summaryrefslogtreecommitdiffstats
path: root/sensordatahandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sensordatahandler.cpp')
-rw-r--r--sensordatahandler.cpp29
1 files changed, 15 insertions, 14 deletions
diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
index 1de1540..0d1182d 100644
--- a/sensordatahandler.cpp
+++ b/sensordatahandler.cpp
@@ -17,8 +17,6 @@ namespace ipmi
namespace sensor
{
-namespace variant_ns = sdbusplus::message::variant_ns;
-
using namespace phosphor::logging;
using InternalFailure =
sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
@@ -134,7 +132,6 @@ GetSensorResponse mapDbusToAssertion(const Info& sensorInfo,
{
sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
GetSensorResponse response{};
- auto responseData = reinterpret_cast<GetReadingResponse*>(response.data());
auto service = ipmi::getService(bus, interface, path);
@@ -151,7 +148,7 @@ GetSensorResponse mapDbusToAssertion(const Info& sensorInfo,
{
if (propValue == value.second.assert)
{
- setOffset(value.first, responseData);
+ setOffset(value.first, &response);
break;
}
}
@@ -171,7 +168,6 @@ GetSensorResponse eventdata2(const Info& sensorInfo)
{
sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
GetSensorResponse response{};
- auto responseData = reinterpret_cast<GetReadingResponse*>(response.data());
auto service = ipmi::getService(bus, sensorInfo.sensorInterface,
sensorInfo.sensorPath);
@@ -190,7 +186,7 @@ GetSensorResponse eventdata2(const Info& sensorInfo)
{
if (propValue == value.second.assert)
{
- setReading(value.first, responseData);
+ setReading(value.first, &response);
break;
}
}
@@ -324,6 +320,15 @@ ipmi_ret_t assertion(const SetSensorReadingReq& cmdData, const Info& sensorInfo)
ipmi::sensor::InterfaceMap interfaces;
for (const auto& interface : sensorInfo.propertyInterfaces)
{
+ // An interface with no properties - It is possible that the sensor
+ // object on DBUS implements a DBUS interface with no properties.
+ // Make sure we add the interface to the list if interfaces on the
+ // object with an empty property map.
+ if (interface.second.empty())
+ {
+ interfaces.emplace(interface.first, ipmi::sensor::PropertyMap{});
+ continue;
+ }
// For a property like functional state the result will be
// calculated based on the true value of all conditions.
for (const auto& property : interface.second)
@@ -340,8 +345,7 @@ ipmi_ret_t assertion(const SetSensorReadingReq& cmdData, const Info& sensorInfo)
{
return IPMI_CC_OK;
}
- result =
- result && variant_ns::get<bool>(value.second.assert);
+ result = result && std::get<bool>(value.second.assert);
valid = true;
}
else if (deassertionSet.test(value.first))
@@ -351,8 +355,7 @@ ipmi_ret_t assertion(const SetSensorReadingReq& cmdData, const Info& sensorInfo)
{
return IPMI_CC_OK;
}
- result =
- result && variant_ns::get<bool>(value.second.deassert);
+ result = result && std::get<bool>(value.second.deassert);
valid = true;
}
}
@@ -361,13 +364,11 @@ ipmi_ret_t assertion(const SetSensorReadingReq& cmdData, const Info& sensorInfo)
{
if (assertionSet.test(value.first))
{
- result =
- result && variant_ns::get<bool>(value.second.assert);
+ result = result && std::get<bool>(value.second.assert);
}
else if (deassertionSet.test(value.first))
{
- result =
- result && variant_ns::get<bool>(value.second.deassert);
+ result = result && std::get<bool>(value.second.deassert);
}
}
if (valid)
OpenPOWER on IntegriCloud