blob: 4e11662f29be9737efd94b4ade041daa54089e74 [file] [log] [blame]
Patrick Venture391b8b02018-03-08 08:31:13 -08001#pragma once
Patrick Venture36ab6f62020-08-03 10:50:26 -07002
Patrick Venture09334bb2020-08-16 12:22:54 -07003#include "control.hpp"
4
Patrick Venture9bf5cef2020-08-16 08:59:54 -07005#include <ipmid/api.h>
6
Patrick Venture36ab6f62020-08-03 10:50:26 -07007#include <cstdint>
Patrick Venture09334bb2020-08-16 12:22:54 -07008#include <memory>
Patrick Venture36ab6f62020-08-03 10:50:26 -07009
10namespace pid_control
11{
12namespace ipmi
13{
14
Patrick Venture09334bb2020-08-16 12:22:54 -070015// Implements validation of IPMI commands and handles sending back the
16// responses.
17class ZoneControlIpmiHandler
18{
19 public:
20 ZoneControlIpmiHandler(std::unique_ptr<ZoneControlInterface> control) :
21 _control(std::move(control))
22 {}
23
24 ipmi_ret_t getFailsafeModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
25 size_t* dataLen);
26
27 ipmi_ret_t getManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
28 size_t* dataLen);
29
30 ipmi_ret_t setManualModeState(const uint8_t* reqBuf, uint8_t* replyBuf,
31 size_t* dataLen);
32
33 private:
34 std::unique_ptr<ZoneControlInterface> _control;
35};
36
37ipmi_ret_t manualModeControl(ZoneControlIpmiHandler* handler, ipmi_cmd_t cmd,
38 const uint8_t* reqBuf, uint8_t* replyCmdBuf,
39 size_t* dataLen);
Patrick Venture36ab6f62020-08-03 10:50:26 -070040
41} // namespace ipmi
42} // namespace pid_control