#include #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(usrData)->handleTachChange(sdbpMsg, err); return 0; } void TachSensor::handleTachChange(sdbusplus::message::message& sdbpMsg, sd_bus_error* err) { std::string msgSensor; std::map> 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( valPropMap->second); } } // Update inventory according to latest tach reported fanEnc.updInventory(); } } // namespace presence } // namespace fan } // namespace phosphor