diff options
Diffstat (limited to 'sensordatahandler.cpp')
-rw-r--r-- | sensordatahandler.cpp | 29 |
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) |