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