xref: /openbmc/phosphor-pid-control/ipmi/manualcmds.hpp (revision 92110f8ddbc5e73ccdccdf4016fc0be8a40048c1)
1 #pragma once
2 
3 #include "control.hpp"
4 
5 #include <ipmid/api-types.hpp>
6 
7 #include <cstddef>
8 #include <cstdint>
9 #include <memory>
10 #include <utility>
11 
12 namespace pid_control::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::Cc getFailsafeModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
26                                     size_t* dataLen);
27 
28     ::ipmi::Cc getManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
29                                   size_t* dataLen);
30 
31     ::ipmi::Cc 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::Cc manualModeControl(ZoneControlIpmiHandler* handler, uint8_t cmd,
39                              const uint8_t* reqBuf, uint8_t* replyCmdBuf,
40                              size_t* dataLen);
41 
42 } // namespace pid_control::ipmi
43