summaryrefslogtreecommitdiffstats
path: root/tach_sensor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tach_sensor.cpp')
-rw-r--r--tach_sensor.cpp36
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
OpenPOWER on IntegriCloud