sensorhandler: move get sensor type to new api
Rewritten "get sensor type" command to use the newly
introduced ipmi provider api.
Tested:
Verified using ipmitool and it is giving same behaviour as before.
ipmitool raw 0x04 0x2f 0x3
Output: Unable to send RAW command (channel=0x0 netfn=0x4 lun=0x0 cmd=0x2f rsp=0xcb): Requested sensor, data, or record not found
Change-Id: Iad80ade2dc7985f10f318ab38a3c5d99543fd62b
Signed-off-by: Deepak Kumar Sahu <deepakx.sahu@intel.com>
Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index 1cffd55..d2fac66 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -286,33 +286,29 @@
return get_type_from_interface(dbus_if);
}
-ipmi_ret_t ipmi_sen_get_sensor_type(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
- ipmi_request_t request,
- ipmi_response_t response,
- ipmi_data_len_t data_len,
- ipmi_context_t context)
+/**
+ * @brief implements the get sensor type command.
+ * @param - sensorNumber
+ *
+ * @return IPMI completion code plus response data on success.
+ * - sensorType
+ * - eventType
+ **/
+
+ipmi::RspType<uint8_t, // sensorType
+ uint8_t // eventType
+ >
+ ipmiGetSensorType(uint8_t sensorNumber)
{
- auto reqptr = static_cast<sensor_data_t*>(request);
- ipmi_ret_t rc = IPMI_CC_OK;
+ uint8_t sensorType = find_type_for_sensor_number(sensorNumber);
- printf("IPMI GET_SENSOR_TYPE [0x%02X]\n", reqptr->sennum);
-
- // TODO Not sure what the System-event-sensor is suppose to return
- // need to ask Hostboot team
- unsigned char buf[] = {0x00, 0x6F};
-
- buf[0] = find_type_for_sensor_number(reqptr->sennum);
-
- // HACK UNTIL Dbus gets updated or we find a better way
- if (buf[0] == 0)
+ if (sensorType == 0)
{
- rc = IPMI_CC_SENSOR_INVALID;
+ return ipmi::responseSensorInvalid();
}
- *data_len = sizeof(buf);
- std::memcpy(response, &buf, *data_len);
-
- return rc;
+ constexpr uint8_t eventType = 0x6F;
+ return ipmi::responseSuccess(sensorType, eventType);
}
const std::set<std::string> analogSensorInterfaces = {
@@ -1097,9 +1093,11 @@
// <Platform Event Message>
ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_PLATFORM_EVENT, nullptr,
ipmicmdPlatformEvent, PRIVILEGE_OPERATOR);
+
// <Get Sensor Type>
- ipmi_register_callback(NETFUN_SENSOR, IPMI_CMD_GET_SENSOR_TYPE, nullptr,
- ipmi_sen_get_sensor_type, PRIVILEGE_USER);
+ ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnSensor,
+ ipmi::sensor_event::cmdGetSensorType,
+ ipmi::Privilege::User, ipmiGetSensorType);
// <Set Sensor Reading and Event Status>
ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnSensor,