diff options
author | Tom Joseph <tomjoseph@in.ibm.com> | 2017-09-07 00:43:16 +0530 |
---|---|---|
committer | Tom Joseph <tomjoseph@in.ibm.com> | 2017-09-14 18:48:14 +0530 |
commit | e05b292b8451eaa3ffb7bb28df231e0e1ed008b8 (patch) | |
tree | 8dfaf8dc017f0ea336caa10243d95da21e84040f | |
parent | 295f17e5257774f11d6c05ed6e00e28cb4039dbf (diff) | |
download | phosphor-host-ipmid-e05b292b8451eaa3ffb7bb28df231e0e1ed008b8.tar.gz phosphor-host-ipmid-e05b292b8451eaa3ffb7bb28df231e0e1ed008b8.zip |
sensor: Map dbus info to sensor's reading field
Change-Id: I3e35bf78260b1fa29e992b00279f2dd166cd2fe1
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
-rw-r--r-- | sensordatahandler.hpp | 37 | ||||
-rw-r--r-- | sensorhandler.h | 10 |
2 files changed, 47 insertions, 0 deletions
diff --git a/sensordatahandler.hpp b/sensordatahandler.hpp index ba496e7..1b05342 100644 --- a/sensordatahandler.hpp +++ b/sensordatahandler.hpp @@ -115,6 +115,43 @@ GetSensorResponse readingAssertion(const Info& sensorInfo) return response; } +/** @brief Map the Dbus info to the reading field in the Get sensor reading + * command response + * + * @tparam T - type of the dbus property related to sensor. + * @param[in] sensorInfo - Dbus info related to sensor. + * + * @return Response for get sensor reading command. + */ +template<typename T> +GetSensorResponse readingData(const Info& sensorInfo) +{ + sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()}; + GetSensorResponse response {}; + auto responseData = reinterpret_cast<GetReadingResponse*>(response.data()); + + enableScanning(responseData); + + auto service = ipmi::getService(bus, + sensorInfo.sensorInterface, + sensorInfo.sensorPath); + + auto propValue = ipmi::getDbusProperty( + bus, + service, + sensorInfo.sensorPath, + sensorInfo.propertyInterfaces.begin()->first, + sensorInfo.propertyInterfaces.begin()->second.begin()->first); + + auto value = static_cast<uint8_t>( + (propValue.get<T>() - sensorInfo.scaledOffset) / + (sensorInfo.coefficientM ? sensorInfo.coefficientM : 1)); + + setReading(value, responseData); + + return response; +} + } //namespace get namespace set diff --git a/sensorhandler.h b/sensorhandler.h index 6ba5c34..ca30fb0 100644 --- a/sensorhandler.h +++ b/sensorhandler.h @@ -524,6 +524,16 @@ inline void setAssertionBytes(uint16_t value, resp->assertOffset8_14 = static_cast<uint8_t>(value >> 8); } +/** + * @brief Set the scanning enabled bit in the response. + * + * @param[in/out] resp - get sensor reading response. + */ +inline void enableScanning(ipmi::sensor::GetReadingResponse* resp) +{ + resp->operation = 1 << 6; +} + } // namespace sensor } // namespace ipmi |