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::object<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::bus& bus, const char* objPath) :
30         sdbusplus::server::object::object<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,
43                  sdbusplus::message::variant<uint8_t> data) override;
44 
45   private:
46     /** @brief sdbusplus DBus bus connection. */
47     sdbusplus::bus::bus& bus;
48 
49     /** @brief  Callback function to be invoked by command manager
50      *
51      *  @detail Conveys the status of the last Host bound command.
52      *          Depending on the status,  a CommandComplete or
53      *          CommandFailure signal would be sent
54      *
55      *  @param[in] cmd    - IPMI command and data sent to Host
56      *  @param[in] status - Success or Failure
57      */
58     void commandStatusHandler(IpmiCmdData cmd, bool status);
59 };
60 
61 } // namespace command
62 } // namespace host
63 } // namespace open_power
64