blob: 48e6defff0d83557d5c75fcdb54037d45ca85219 [file] [log] [blame]
Patrick Venturecf2d1b12018-12-11 18:22:36 -08001#pragma once
2
Patrick Ventureb5a97062018-12-13 16:55:23 -08003#include "internal/sys.hpp"
Patrick Venturecf2d1b12018-12-11 18:22:36 -08004#include "ipmi_interface.hpp"
5
Patrick Venture9b534f02018-12-13 16:10:02 -08006namespace host_tool
7{
8
Patrick Venturecf2d1b12018-12-11 18:22:36 -08009class IpmiHandler : public IpmiInterface
10{
11 public:
Patrick Ventureb5a97062018-12-13 16:55:23 -080012 explicit IpmiHandler(const internal::Sys* sys = &internal::sys_impl) :
13 sys(sys){};
Patrick Venturecf2d1b12018-12-11 18:22:36 -080014
Patrick Venture2e12a432018-12-13 18:05:11 -080015 ~IpmiHandler() = default;
16 IpmiHandler(const IpmiHandler&) = delete;
17 IpmiHandler& operator=(const IpmiHandler&) = delete;
18 IpmiHandler(IpmiHandler&&) = default;
19 IpmiHandler& operator=(IpmiHandler&&) = default;
20
21 /**
22 * Attempt to open the device node.
23 *
24 * @return true on success, failure otherwise.
25 */
26 bool open();
27
Patrick Venture035bbbb2018-12-12 14:59:52 -080028 std::vector<std::uint8_t>
29 sendPacket(const std::vector<std::uint8_t>& data) override;
Patrick Ventureb5a97062018-12-13 16:55:23 -080030
31 private:
32 const internal::Sys* sys;
Patrick Venture2e12a432018-12-13 18:05:11 -080033 /** TODO: Use a smart file descriptor when it's ready. Until then only
34 * allow moving this object.
35 */
36 int fd = -1;
Patrick Venturecf2d1b12018-12-11 18:22:36 -080037};
Patrick Venture9b534f02018-12-13 16:10:02 -080038
39} // namespace host_tool