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 --- include/ipmid/types.hpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'include/ipmid/types.hpp') diff --git a/include/ipmid/types.hpp b/include/ipmid/types.hpp index e2f80c0..3e64cb4 100644 --- a/include/ipmid/types.hpp +++ b/include/ipmid/types.hpp @@ -100,7 +100,15 @@ struct GetReadingResponse constexpr auto inventoryRoot = "/xyz/openbmc_project/inventory"; -using GetSensorResponse = std::array; +struct GetSensorResponse +{ + uint8_t reading; // sensor reading + bool readingOrStateUnavailable; // 1 = reading/state unavailable + bool scanningEnabled; // 0 = sensor scanning disabled + bool allEventMessagesEnabled; // 0 = All Event Messages disabled + uint8_t thresholdLevelsStates; // threshold/discrete sensor states + uint8_t discreteReadingSensorStates; // discrete-only, optional states +}; using OffsetValueMap = std::map; -- cgit v1.2.1