apphandler: move get ACPI power state to new API

Rewritten "Get ACPI power state" command to use the newly
introduced IPMI provider API.

Tested:
Verified using ipmitool and it is giving same behaviour as before.
ipmitool raw 0x06 0x07
05 03

Change-Id: I51f2d5bbb89e445230ffc1363cf413e716116996
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/apphandler.cpp b/apphandler.cpp
index 42e9e4b..91bede5 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -431,20 +431,23 @@
     return rc;
 }
 
-ipmi_ret_t ipmi_app_get_acpi_power_state(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 ACPI power state command
+ *
+ *  @return IPMI completion code plus response data on success.
+ *   -  ACPI system power state
+ *   -  ACPI device power state
+ **/
+ipmi::RspType<uint8_t, // acpiSystemPowerState
+              uint8_t  // acpiDevicePowerState
+              >
+    ipmiGetAcpiPowerState()
 {
-    ipmi_ret_t rc = IPMI_CC_OK;
-
-    auto* res = reinterpret_cast<acpi_state::ACPIState*>(response);
+    uint8_t sysAcpiState;
+    uint8_t devAcpiState;
 
     sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
 
-    *data_len = 0;
-
     try
     {
         auto acpiObject = ipmi::getDbusObject(bus, acpi_state::acpiInterface);
@@ -454,25 +457,21 @@
             acpi_state::sysACPIProp);
         auto sysACPI = acpi_state::ACPIPowerState::convertACPIFromString(
             std::get<std::string>(sysACPIVal));
-        res->sysACPIState =
-            static_cast<uint8_t>(acpi_state::dbusToIPMI.at(sysACPI));
+        sysAcpiState = static_cast<uint8_t>(acpi_state::dbusToIPMI.at(sysACPI));
 
         auto devACPIVal = ipmi::getDbusProperty(
             bus, acpiObject.second, acpiObject.first, acpi_state::acpiInterface,
             acpi_state::devACPIProp);
         auto devACPI = acpi_state::ACPIPowerState::convertACPIFromString(
             std::get<std::string>(devACPIVal));
-        res->devACPIState =
-            static_cast<uint8_t>(acpi_state::dbusToIPMI.at(devACPI));
-
-        *data_len = sizeof(acpi_state::ACPIState);
+        devAcpiState = static_cast<uint8_t>(acpi_state::dbusToIPMI.at(devACPI));
     }
     catch (const InternalFailure& e)
     {
-        log<level::ERR>("Failed in get ACPI property");
-        return IPMI_CC_UNSPECIFIED_ERROR;
+        return ipmi::responseUnspecifiedError();
     }
-    return rc;
+
+    return ipmi::responseSuccess(sysAcpiState, devAcpiState);
 }
 
 typedef struct
@@ -1348,8 +1347,9 @@
                            ipmi_app_set_acpi_power_state, PRIVILEGE_ADMIN);
 
     // <Get ACPI Power State>
-    ipmi_register_callback(NETFUN_APP, IPMI_CMD_GET_ACPI, NULL,
-                           ipmi_app_get_acpi_power_state, PRIVILEGE_ADMIN);
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnApp,
+                          ipmi::app::cmdGetAcpiPowerState,
+                          ipmi::Privilege::Admin, ipmiGetAcpiPowerState);
 
     // Note: For security reason, this command will be registered only when
     // there are proper I2C Master write read whitelist