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