blob: 3f4d6d44ca033960de59066805eea1fbdf5e39d4 [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
Ed Tanousf8b6e552025-06-27 13:27:50 -07007#include <cstddef>
Patrick Venture36ab6f62020-08-03 10:50:26 -07008#include <cstdint>
Patrick Venture09334bb2020-08-16 12:22:54 -07009#include <memory>
Ed Tanousf8b6e552025-06-27 13:27:50 -070010#include <utility>
Patrick Venture36ab6f62020-08-03 10:50:26 -070011
12namespace pid_control
13{
14namespace ipmi
15{
16
Patrick Venture09334bb2020-08-16 12:22:54 -070017// Implements validation of IPMI commands and handles sending back the
18// responses.
19class ZoneControlIpmiHandler
20{
21 public:
Harvey Wu22579ca2022-11-07 14:53:37 +080022 explicit ZoneControlIpmiHandler(
23 std::unique_ptr<ZoneControlInterface> control) :
Patrick Venture09334bb2020-08-16 12:22:54 -070024 _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,
Harvey Wu22579ca2022-11-07 14:53:37 +080034 const size_t* dataLen);
Patrick Venture09334bb2020-08-16 12:22:54 -070035
36 private:
37 std::unique_ptr<ZoneControlInterface> _control;
38};
39
40ipmi_ret_t manualModeControl(ZoneControlIpmiHandler* handler, ipmi_cmd_t cmd,
41 const uint8_t* reqBuf, uint8_t* replyCmdBuf,
42 size_t* dataLen);
Patrick Venture36ab6f62020-08-03 10:50:26 -070043
44} // namespace ipmi
45} // namespace pid_control