diff options
Diffstat (limited to 'tach_sensor.cpp')
-rw-r--r-- | tach_sensor.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tach_sensor.cpp b/tach_sensor.cpp index 987e390..91e249d 100644 --- a/tach_sensor.cpp +++ b/tach_sensor.cpp @@ -1,4 +1,6 @@ +#include <sdbusplus/exception.hpp> #include "tach_sensor.hpp" +#include "fan_enclosure.hpp" namespace phosphor @@ -13,6 +15,40 @@ 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 |