1 #pragma once
2 
3 #include <ipmid-host/cmd-utils.hpp>
4 #include <org/open_power/Control/Host/server.hpp>
5 #include <sdbusplus/bus.hpp>
6 namespace open_power
7 {
8 namespace host
9 {
10 namespace command
11 {
12 
13 namespace Base = sdbusplus::org::open_power::Control::server;
14 using IpmiCmdData = phosphor::host::command::IpmiCmdData;
15 
16 /** @class Host
17  *  @brief OpenBMC control host interface implementation.
18  *  @details A concrete implementation for org.open_power.Control.Host
19  *  DBus API.
20  */
21 class Host : public sdbusplus::server::object_t<Base::Host>
22 {
23   public:
24     /** @brief Constructs Host Control Interface
25      *
26      *  @param[in] bus     - The Dbus bus object
27      *  @param[in] objPath - The Dbus object path
28      */
29     Host(sdbusplus::bus_t& bus, const char* objPath) :
30         sdbusplus::server::object_t<Base::Host>(bus, objPath), bus(bus)
31     {
32         // Nothing to do
33     }
34 
35     /** @brief Sends input command to host
36      *         Note that the command will be queued in a FIFO if
37      *         other commands to the host have yet to be run
38      *
39      *  @param[in] command - Input command to execute
40      *  @param[in] data    - Data associated with the command
41      */
42     void execute(Command command, std::variant<uint8_t> data) override;
43 
44   private:
45     /** @brief sdbusplus DBus bus connection. */
46     sdbusplus::bus_t& bus;
47 
48     /** @brief  Callback function to be invoked by command manager
49      *
50      *  @detail Conveys the status of the last Host bound command.
51      *          Depending on the status,  a CommandComplete or
52      *          CommandFailure signal would be sent
53      *
54      *  @param[in] cmd    - IPMI command and data sent to Host
55      *  @param[in] status - Success or Failure
56      */
57     void commandStatusHandler(IpmiCmdData cmd, bool status);
58 };
59 
60 } // namespace command
61 } // namespace host
62 } // namespace open_power
63