From e0af7209c748794b867bce6901f834d10d47773f Mon Sep 17 00:00:00 2001 From: Dhruvaraj Subhashchandran Date: Wed, 12 Jul 2017 06:35:20 -0500 Subject: IPMI: Virtual sensor support in host ipmid Resolves openbmc/openbmc#1608 Change-Id: Id76446061fd0fa6dc3dead702538e424293af7ce Signed-off-by: Dhruvaraj Subhashchandran --- sensordatahandler.hpp | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 sensordatahandler.hpp (limited to 'sensordatahandler.hpp') diff --git a/sensordatahandler.hpp b/sensordatahandler.hpp new file mode 100644 index 0000000..fa74235 --- /dev/null +++ b/sensordatahandler.hpp @@ -0,0 +1,150 @@ +#include "types.hpp" +#include "host-ipmid/ipmid-api.h" + +namespace ipmi +{ +namespace sensor +{ + +using Assertion = uint16_t; +using Deassertion = uint16_t; +using AssertionSet = std::pair; + +using Service = std::string; +using Path = std::string; +using Interface = std::string; + +using ServicePath = std::pair; + +using Interfaces = std::vector; + +using MapperResponseType = std::map>; + +/** @brief get the D-Bus service and service path + * @param[in] bus - The Dbus bus object + * @param[in] interface - interface to the service + * @param[in] path - interested path in the list of objects + * @return pair of service path and service + */ +ServicePath getServiceAndPath(sdbusplus::bus::bus& bus, + const std::string& interface, + const std::string& path = std::string()); + +/** @brief Make assertion set from input data + * @param[in] cmdData - Input sensor data + * @return pair of assertion and deassertion set + */ +AssertionSet getAssertionSet(const SetSensorReadingReq& cmdData); + +/** @brief send the message to DBus + * @param[in] msg - message to send + * @return failure status in IPMI error code + */ +ipmi_ret_t updateToDbus(const IpmiUpdateData& msg); + +namespace set +{ + +/** @brief Make a DBus message for a Dbus call + * @param[in] updateInterface - Interface name + * @param[in] sensorPath - Path of the sensor + * @param[in] command - command to be executed + * @param[in] sensorInterface - DBus interface of sensor + * @return a dbus message + */ +IpmiUpdateData makeDbusMsg(const std::string& updateInterface, + const std::string& sensorPath, + const std::string& command, + const std::string& sensorInterface); + +/** @brief Create a message for IPMI assertion + * @param[in] msg - Message to add the values + * @param[in] interface - sensor interface + * @param[in] sensorPath - Path of the sensor + * @param[in] cmdData - input sensor data + * @return a IPMI error code + */ +ipmi_ret_t appendAssertion(IpmiUpdateData& msg, + const DbusInterfaceMap& interfaceMap, + const std::string& sensorPath, + const SetSensorReadingReq& cmdData); + +/** @brief Create a message for discrete signal + * @param[in] msg - Message to add the values + * @param[in] interface - sensor interface + * @param[in] data - input discrete sensor data + * @return a IPMI error code + */ +ipmi_ret_t appendDiscreteSignalData(IpmiUpdateData& msg, + const DbusInterfaceMap& interfaceMap, + uint8_t data); + +/** @brief Create a message for reading data + * @param[in] msg - Message to add the values + * @param[in] interface - sensor interface + * @param[in] data - input sensor data + * @return a IPMI error code + */ +ipmi_ret_t appendReadingData(IpmiUpdateData& msg, + const DbusInterfaceMap& interfaceMap, + const Value& data); + +}//namespace set + +namespace notify +{ + +/** @brief Make a DBus message for a Dbus call + * @param[in] updateInterface - Interface name + * @param[in] sensorPath - Path of the sensor + * @param[in] command - command to be executed + * @param[in] sensorInterface - DBus interface of sensor + * @return a dbus message + */ +IpmiUpdateData makeDbusMsg(const std::string& updateInterface, + const std::string& sensorPath, + const std::string& command, + const std::string& sensorInterface); + +/** @brief Create a message for IPMI discrete signal + * @param[in] msg - Message to add the values + * @param[in] interfaceMap - sensor interface + * @param[in] sensorPath - Path of the sensor + * @param[in] cmdData - input sensor data + * @return a IPMI error code + */ +inline ipmi_ret_t appendDiscreteSignalData(IpmiUpdateData& msg, + const DbusInterfaceMap& interfaceMap, + uint8_t data) +{ + return IPMI_CC_OK; +} + +/** @brief Create a message for reading data + * @param[in] msg - Message to add the values + * @param[in] interfaceMap - sensor interface + * @param[in] data - input sensor data + * @return a IPMI error code + */ +inline ipmi_ret_t appendReadingData(IpmiUpdateData& msg, + const DbusInterfaceMap& interfaceMap, + const Value &data) +{ + return IPMI_CC_OK; +} + +/** @brief Create a message for IPMI asserting + * @param[in] msg - Message to add the values + * @param[in] interfaceMap - sensor interface + * @param[in] sensorPath - Path of the sensor + * @param[in] cmdData - input sensor data + * @return a IPMI error code + */ +ipmi_ret_t appendAssertion(IpmiUpdateData& msg, + const DbusInterfaceMap& interfaceMap, + const std::string& sensorPath, + const SetSensorReadingReq& cmdData); + +}//namespace notify +}//namespace sensor +}//namespace ipmi -- cgit v1.2.1