chassishandler: move chassis control to new API

Rewritten "Chassis control" command to the use newly
introduced IPMI provider API.

Tested:
Verified ipmitool raw chassis control command
ipmitool raw 0 2 0/1/2/3/4/5 and for invalid value
got invalid field in request response.

Change-Id: I0213157640e34c693b53999f69d7d47ced950e0d
Signed-off-by: anil kumar appana <anil.kumarx.appana@intel.com>
Signed-off-by: Richard Marian Thomaiyar <richard.marian.thomaiyar@linux.intel.com>
diff --git a/chassishandler.cpp b/chassishandler.cpp
index a89c2a5..a9e188f 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -1006,25 +1006,16 @@
     std::ofstream(path.c_str());
 }
 
-//----------------------------------------------------------------------
-// Chassis Control commands
-//----------------------------------------------------------------------
-ipmi_ret_t ipmi_chassis_control(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 Implementation of chassis control command
+ *
+ *  @param - chassisControl command byte
+ *
+ *  @return  Success or InvalidFieldRequest.
+ */
+ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
 {
-    // Error from power off.
     int rc = 0;
-
-    // No response for this command.
-    *data_len = 0;
-
-    // Catch the actual operaton by peeking into request buffer
-    uint8_t chassis_ctrl_cmd = *(uint8_t*)request;
-
-    switch (chassis_ctrl_cmd)
+    switch (chassisControl)
     {
         case CMD_POWER_ON:
             rc = initiate_state_transition(State::Host::Transition::On);
@@ -1087,12 +1078,13 @@
         default:
         {
             log<level::ERR>("Invalid Chassis Control command",
-                            entry("CMD=0x%X", chassis_ctrl_cmd));
-            rc = -1;
+                            entry("CMD=0x%X", chassisControl));
+            return ipmi::responseInvalidFieldRequest();
         }
     }
 
-    return ((rc < 0) ? IPMI_CC_INVALID : IPMI_CC_OK);
+    return ((rc < 0) ? ipmi::responseUnspecifiedError()
+                     : ipmi::responseSuccess());
 }
 
 /** @brief Return D-Bus connection string to enclosure identify LED object
@@ -1710,8 +1702,9 @@
                            ipmi_get_chassis_status, PRIVILEGE_USER);
 
     // <Chassis Control>
-    ipmi_register_callback(NETFUN_CHASSIS, IPMI_CMD_CHASSIS_CONTROL, NULL,
-                           ipmi_chassis_control, PRIVILEGE_OPERATOR);
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,
+                          ipmi::chassis::cmdChassisControl,
+                          ipmi::Privilege::Operator, ipmiChassisControl);
 
     // <Chassis Identify>
     ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnChassis,