From 4cc42556be1e69f1210e3a0a0bcff49078e39ec6 Mon Sep 17 00:00:00 2001 From: Sui Chen Date: Wed, 11 Sep 2019 10:28:35 -0700 Subject: Refactor ipmi::sensor::GetSensorResponse away from std::array This change refactors GetSensorResponse from std::array to struct. This change depends on change #23544. GetSensorResponse is an internal, intermediate structure, an unpacked form of a Get Sensor Reading response, providing direct access to its fields. Its life time is: GetReadingResponse -> GetSensorResponse -> ipmi::RspType. It is written to in 5 functions in the ipmi::sensor::get namespace, by four setter functions (setOffset, setReading, setAssertionBytes, enableScanning). It is currently read from by 1 function (ipmiSensorGetSensorReading) for transforming to an ipmi::RspType. Originally, the setter functions assumed bitwise equivalence between GetSensorResponse and GetReadingResponse, and the setter functions used reinterpret_cast to assign to a GetSensorResponse as if it were a GetReadingResponse. With this change, the reinterpret_cast's are removed, and the set functions now accept GetSensorResponse instead of GetReadingResponse, so the code gets a bit easier to read. Tested: Tested using a server with a BMC; sensor readings obtained through `ipmitool` appear to be correct (the reading might change within a small range): # ipmitool raw 0x04 0x2d 0x16 9B 40 00 00 Signed-off-by: Sui Chen Change-Id: I5d454d6249f5431fb98169e6ef7c585c34024004 --- sensordatahandler.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'sensordatahandler.cpp') diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp index 923b96a..0d1182d 100644 --- a/sensordatahandler.cpp +++ b/sensordatahandler.cpp @@ -132,7 +132,6 @@ GetSensorResponse mapDbusToAssertion(const Info& sensorInfo, { sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()}; GetSensorResponse response{}; - auto responseData = reinterpret_cast(response.data()); auto service = ipmi::getService(bus, interface, path); @@ -149,7 +148,7 @@ GetSensorResponse mapDbusToAssertion(const Info& sensorInfo, { if (propValue == value.second.assert) { - setOffset(value.first, responseData); + setOffset(value.first, &response); break; } } @@ -169,7 +168,6 @@ GetSensorResponse eventdata2(const Info& sensorInfo) { sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()}; GetSensorResponse response{}; - auto responseData = reinterpret_cast(response.data()); auto service = ipmi::getService(bus, sensorInfo.sensorInterface, sensorInfo.sensorPath); @@ -188,7 +186,7 @@ GetSensorResponse eventdata2(const Info& sensorInfo) { if (propValue == value.second.assert) { - setReading(value.first, responseData); + setReading(value.first, &response); break; } } -- cgit v1.2.1