xref: /openbmc/phosphor-pid-control/ipmi/manualcmds.hpp (revision f8b6e55147148c3cfb42327ff267197a460b411c)
1 #pragma once
2 
3 #include "control.hpp"
4 
5 #include <ipmid/api.h>
6 
7 #include <cstddef>
8 #include <cstdint>
9 #include <memory>
10 #include <utility>
11 
12 namespace pid_control
13 {
14 namespace ipmi
15 {
16 
17 // Implements validation of IPMI commands and handles sending back the
18 // responses.
19 class ZoneControlIpmiHandler
20 {
21   public:
22     explicit ZoneControlIpmiHandler(
23         std::unique_ptr<ZoneControlInterface> control) :
24         _control(std::move(control))
25     {}
26 
27     ipmi_ret_t getFailsafeModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
28                                     size_t* dataLen);
29 
30     ipmi_ret_t getManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
31                                   size_t* dataLen);
32 
33     ipmi_ret_t setManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
34                                   const size_t* dataLen);
35 
36   private:
37     std::unique_ptr<ZoneControlInterface> _control;
38 };
39 
40 ipmi_ret_t manualModeControl(ZoneControlIpmiHandler* handler, ipmi_cmd_t cmd,
41                              const uint8_t* reqBuf, uint8_t* replyCmdBuf,
42                              size_t* dataLen);
43 
44 } // namespace ipmi
45 } // namespace pid_control
46