#pragma once #include #include #include #include namespace phosphor { namespace host { namespace command { /** @class Host * @brief OpenBMC control and condition host interface implementation. * @details A concrete implementation for xyz.openbmc_project.Control.Host * and xyz.openbmc_project.Condition.HostFirmware DBus API's. */ class Host : public sdbusplus::server::object_t< sdbusplus::server::xyz::openbmc_project::control::Host, sdbusplus::server::xyz::openbmc_project::condition::HostFirmware> { public: /** @brief Constructs Host Control and Condition Interfaces * * @param[in] bus - The Dbus bus object * @param[in] objPath - The Dbus object path */ Host(sdbusplus::bus_t& bus, const char* objPath) : sdbusplus::server::object_t< sdbusplus::server::xyz::openbmc_project::control::Host, sdbusplus::server::xyz::openbmc_project::condition::HostFirmware>( bus, objPath), bus(bus) { // Nothing to do } /** @brief Send input command to host * Note that the command will be queued in a FIFO if * other commands to the host have yet to be run * * @param[in] command - Input command to execute */ void execute(Command command) override; /** @brief Override reads to CurrentFirmwareCondition */ FirmwareCondition currentFirmwareCondition() const override; private: /** @brief sdbusplus DBus bus connection. */ sdbusplus::bus_t& bus; /** @brief Callback function to be invoked by command manager * * @detail Conveys the status of the last Host bound command. * Depending on the status, a CommandComplete or * CommandFailure signal would be sent * * @param[in] cmd - IPMI command and data sent to Host * @param[in] status - Success or Failure */ void commandStatusHandler(IpmiCmdData cmd, bool status); }; } // namespace command } // namespace host } // namespace phosphor