From 1bb0d387cd238a1d4b8c38c474433ccaada47a22 Mon Sep 17 00:00:00 2001 From: Deepak Kodihalli Date: Sat, 12 Aug 2017 02:01:27 -0500 Subject: Refactor set sensor handling code A summary of the changes: - Do not generate per sensor type code to update d-bus objects corresponding to sensors. Function to update d-bus objects based on standard sensor event types, such as assertion, event data, are now generic functions - the need not be generated per sensor or per sensor type. - There's a special case where the assertion is treated as a reading (i.e read the entire assertion field as-is). In this case, code needs to be generated per sensor because the type of the mapped d-bus property can vary. In this case have a generic template function, and generate minimal code like so: inline ipmi_ret_t readingAssertion(const SetSensorReadingReq& cmdData, const Info& sensorInfo) { // Corresponding d-bus property is uint32_t return set::readingAssertion(cmdData, sensorInfo); } - Make sensor-example.yaml succinct. - Make the code in writesensor.mako.cpp more pythonic. Change-Id: I84415ca6e3f756bbb51a90e290539eb086a7f78b Signed-off-by: Deepak Kodihalli --- sensordatahandler.cpp | 63 ++++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 31 deletions(-) (limited to 'sensordatahandler.cpp') diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp index 7c4cd3c..b9ef5e2 100644 --- a/sensordatahandler.cpp +++ b/sensordatahandler.cpp @@ -127,11 +127,17 @@ IpmiUpdateData makeDbusMsg(const std::string& updateInterface, command.c_str()); } -ipmi_ret_t appendDiscreteSignalData(IpmiUpdateData& msg, - const DbusInterfaceMap& interfaceMap, - uint8_t data) +ipmi_ret_t eventdata(const SetSensorReadingReq& cmdData, + const Info& sensorInfo, + uint8_t data) { - const auto& interface = interfaceMap.begin(); + auto msg = makeDbusMsg( + "org.freedesktop.DBus.Properties", + sensorInfo.sensorPath, + "Set", + sensorInfo.sensorInterface); + + const auto& interface = sensorInfo.propertyInterfaces.begin(); msg.append(interface->first); for (const auto& property : interface->second) { @@ -144,32 +150,22 @@ ipmi_ret_t appendDiscreteSignalData(IpmiUpdateData& msg, } msg.append(iter->second.assert); } - return IPMI_CC_OK; + return updateToDbus(msg); } -ipmi_ret_t appendReadingData(IpmiUpdateData& msg, - const DbusInterfaceMap& interfaceMap, - const Value &data) +ipmi_ret_t assertion(const SetSensorReadingReq& cmdData, + const Info& sensorInfo) { - const auto& interface = interfaceMap.begin(); - msg.append(interface->first); - for (const auto& property : interface->second) - { - msg.append(property.first); - msg.append(data); - } - return IPMI_CC_OK; -} + auto msg = makeDbusMsg( + "org.freedesktop.DBus.Properties", + sensorInfo.sensorPath, + "Set", + sensorInfo.sensorInterface); -ipmi_ret_t appendAssertion(IpmiUpdateData& msg, - const DbusInterfaceMap& interfaceMap, - const std::string& sensorPath, - const SetSensorReadingReq& cmdData) -{ std::bitset<16> assertionSet(getAssertionSet(cmdData).first); std::bitset<16> deassertionSet(getAssertionSet(cmdData).second); - const auto& interface = interfaceMap.begin(); + const auto& interface = sensorInfo.propertyInterfaces.begin(); msg.append(interface->first); for (const auto& property : interface->second) { @@ -186,8 +182,9 @@ ipmi_ret_t appendAssertion(IpmiUpdateData& msg, } } } - return IPMI_CC_OK; + return updateToDbus(msg); } + }//namespace set namespace notify @@ -213,16 +210,20 @@ IpmiUpdateData makeDbusMsg(const std::string& updateInterface, command.c_str()); } -ipmi_ret_t appendAssertion(IpmiUpdateData& msg, - const DbusInterfaceMap& interfaceMap, - const std::string& sensorPath, - const SetSensorReadingReq& cmdData) +ipmi_ret_t assertion(const SetSensorReadingReq& cmdData, + const Info& sensorInfo) { + auto msg = makeDbusMsg( + sensorInfo.sensorInterface, + sensorInfo.sensorPath, + "Notify", + sensorInfo.sensorInterface); + std::bitset<16> assertionSet(getAssertionSet(cmdData).first); std::bitset<16> deassertionSet(getAssertionSet(cmdData).second); ipmi::sensor::ObjectMap objects; ipmi::sensor::InterfaceMap interfaces; - for (const auto& interface : interfaceMap) + for (const auto& interface : sensorInfo.propertyInterfaces) { for (const auto& property : interface.second) { @@ -247,9 +248,9 @@ ipmi_ret_t appendAssertion(IpmiUpdateData& msg, } } } - objects.emplace(sensorPath, std::move(interfaces)); + objects.emplace(sensorInfo.sensorPath, std::move(interfaces)); msg.append(std::move(objects)); - return IPMI_CC_OK; + return updateToDbus(msg); } }//namespace notify }//namespace sensor -- cgit v1.2.1