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