apphandler: move set acpi power state to new api.

Rewrite "set acpi power state" command to use the newly
introduced ipmi provider API.

Tested:
verified ipmitool set/get acpi power state status is same both
before and after the changes

Command : ipmitool raw 0x06 0x07 // get acpi
Response: 05 03

Command: ipmitool raw 0x06 0x06 0x87 0x82 //set acpi
Response:

Command: ipmitool raw 0x06 0x07 // get acpi
Response:  07 02

Command:  ipmitool raw 0x06 0x06 0x88 0x83 // set acpi
Response:

Command:  ipmitool raw 0x06 0x07 // get acpi
Response: 08 03

Signed-off-by: Deepak Kumar Sahu <deepakx.sahu@intel.com>
Change-Id: I7dc6edf3d3fd3d0caa98d1b1604e09c6d06675b4
diff --git a/apphandler.cpp b/apphandler.cpp
index 43cddd7..2430e8e 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -241,12 +241,6 @@
 
 static constexpr uint8_t stateChanged = 0x80;
 
-struct ACPIState
-{
-    uint8_t sysACPIState;
-    uint8_t devACPIState;
-} __attribute__((packed));
-
 std::map<ACPIPowerState::ACPI, PowerState> dbusToIPMI = {
     {ACPIPowerState::ACPI::S0_G0_D0, PowerState::s0G0D0},
     {ACPIPowerState::ACPI::S1_D1, PowerState::s1D1},
@@ -302,41 +296,32 @@
 }
 } // namespace acpi_state
 
-ipmi_ret_t ipmi_app_set_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 Set ACPI Power State command
+ * @param sysAcpiState - ACPI system power state to set
+ * @param devAcpiState - ACPI device power state to set
+ *
+ * @return IPMI completion code on success
+ **/
+ipmi::RspType<> ipmiSetAcpiPowerState(uint8_t sysAcpiState,
+                                      uint8_t devAcpiState)
 {
     auto s = static_cast<uint8_t>(acpi_state::PowerState::unknown);
-    ipmi_ret_t rc = IPMI_CC_OK;
 
     sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
 
     auto value = acpi_state::ACPIPowerState::ACPI::Unknown;
 
-    auto* req = reinterpret_cast<acpi_state::ACPIState*>(request);
-
-    if (*data_len != sizeof(acpi_state::ACPIState))
-    {
-        log<level::ERR>("set_acpi invalid len");
-        *data_len = 0;
-        return IPMI_CC_REQ_DATA_LEN_INVALID;
-    }
-
-    *data_len = 0;
-
-    if (req->sysACPIState & acpi_state::stateChanged)
+    if (sysAcpiState & acpi_state::stateChanged)
     {
         // set system power state
-        s = req->sysACPIState & ~acpi_state::stateChanged;
+        s = sysAcpiState & ~acpi_state::stateChanged;
 
         if (!acpi_state::isValidACPIState(
                 acpi_state::PowerStateType::sysPowerState, s))
         {
             log<level::ERR>("set_acpi_power sys invalid input",
                             entry("S=%x", s));
-            return IPMI_CC_PARM_OUT_OF_RANGE;
+            return ipmi::responseParmOutOfRange();
         }
 
         // valid input
@@ -367,7 +352,7 @@
             {
                 log<level::ERR>("Failed in set ACPI system property",
                                 entry("EXCEPTION=%s", e.what()));
-                return IPMI_CC_UNSPECIFIED_ERROR;
+                return ipmi::responseUnspecifiedError();
             }
         }
     }
@@ -376,16 +361,16 @@
         log<level::DEBUG>("Do not change system power state");
     }
 
-    if (req->devACPIState & acpi_state::stateChanged)
+    if (devAcpiState & acpi_state::stateChanged)
     {
         // set device power state
-        s = req->devACPIState & ~acpi_state::stateChanged;
+        s = devAcpiState & ~acpi_state::stateChanged;
         if (!acpi_state::isValidACPIState(
                 acpi_state::PowerStateType::devPowerState, s))
         {
             log<level::ERR>("set_acpi_power dev invalid input",
                             entry("S=%x", s));
-            return IPMI_CC_PARM_OUT_OF_RANGE;
+            return ipmi::responseParmOutOfRange();
         }
 
         // valid input
@@ -416,7 +401,7 @@
             {
                 log<level::ERR>("Failed in set ACPI device property",
                                 entry("EXCEPTION=%s", e.what()));
-                return IPMI_CC_UNSPECIFIED_ERROR;
+                return ipmi::responseUnspecifiedError();
             }
         }
     }
@@ -424,8 +409,7 @@
     {
         log<level::DEBUG>("Do not change device power state");
     }
-
-    return rc;
+    return ipmi::responseSuccess();
 }
 
 /**
@@ -1691,9 +1675,9 @@
                           ipmiAppGetDeviceGuid);
 
     // <Set ACPI Power State>
-    ipmi_register_callback(NETFUN_APP, IPMI_CMD_SET_ACPI, NULL,
-                           ipmi_app_set_acpi_power_state, PRIVILEGE_ADMIN);
-
+    ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnApp,
+                          ipmi::app::cmdSetAcpiPowerState,
+                          ipmi::Privilege::Admin, ipmiSetAcpiPowerState);
     // <Get ACPI Power State>
     ipmi::registerHandler(ipmi::prioOpenBmcBase, ipmi::netFnApp,
                           ipmi::app::cmdGetAcpiPowerState,