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,