Add double support for sensor interface
Add support for reading sensors that produce a double
as the value. Use a visitor to pull out the sensor value
so type doesn't matter.
Change-Id: I37c05e7077ead6f3084ab9704a1b2c62becb5e19
Signed-off-by: James Feist <james.feist@linux.intel.com>
diff --git a/dbus/dbuspassive.cpp b/dbus/dbuspassive.cpp
index daeef62..da9b387 100644
--- a/dbus/dbuspassive.cpp
+++ b/dbus/dbuspassive.cpp
@@ -97,7 +97,7 @@
int HandleSensorValue(sdbusplus::message::message& msg, DbusPassive* owner)
{
std::string msgSensor;
- std::map<std::string, sdbusplus::message::variant<int64_t>> msgData;
+ std::map<std::string, sdbusplus::message::variant<int64_t, double>> msgData;
msg.read(msgSensor, msgData);
@@ -106,10 +106,10 @@
auto valPropMap = msgData.find("Value");
if (valPropMap != msgData.end())
{
- int64_t rawValue = sdbusplus::message::variant_ns::get<int64_t>(
- valPropMap->second);
+ double value = mapbox::util::apply_visitor(VariantToDoubleVisitor(),
+ valPropMap->second);
- double value = rawValue * std::pow(10, owner->getScale());
+ value *= std::pow(10, owner->getScale());
owner->setValue(value);
}