| #include <sdbusplus/exception.hpp> |
| #include "tach_sensor.hpp" |
| #include "fan_enclosure.hpp" |
| |
| |
| namespace phosphor |
| { |
| namespace fan |
| { |
| namespace presence |
| { |
| |
| bool TachSensor::isPresent() |
| { |
| return (tach != 0); |
| } |
| |
| // Tach signal callback handler |
| int TachSensor::handleTachChangeSignal(sd_bus_message* msg, |
| void* usrData, |
| sd_bus_error* err) |
| { |
| auto sdbpMsg = sdbusplus::message::message(msg); |
| static_cast<TachSensor*>(usrData)->handleTachChange(sdbpMsg, err); |
| return 0; |
| } |
| |
| void TachSensor::handleTachChange(sdbusplus::message::message& sdbpMsg, |
| sd_bus_error* err) |
| { |
| std::string msgSensor; |
| std::map<std::string, sdbusplus::message::variant<int64_t>> msgData; |
| sdbpMsg.read(msgSensor, msgData); |
| |
| // TODO openbmc/phosphor-fan-presence#5 |
| // Update to use 'arg0namespace' match option to reduce dbus traffic |
| // Find interface with value property |
| if (msgSensor.compare("xyz.openbmc_project.Sensor.Value") == 0) |
| { |
| // Find the 'Value' property containing tach |
| auto valPropMap = msgData.find("Value"); |
| if (valPropMap != msgData.end()) |
| { |
| tach = sdbusplus::message::variant_ns::get<int64_t>( |
| valPropMap->second); |
| } |
| } |
| // Update inventory according to latest tach reported |
| fanEnc.updInventory(); |
| } |
| |
| } // namespace presence |
| } // namespace fan |
| } // namespace phosphor |