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