1dd2c6fdcSAndrew Geissler #pragma once
2dd2c6fdcSAndrew Geissler 
30b02be92SPatrick Venture #include <host-cmd-manager.hpp>
4dd2c6fdcSAndrew Geissler #include <sdbusplus/bus.hpp>
5c7021b86SAndrew Geissler #include <xyz/openbmc_project/Condition/HostFirmware/server.hpp>
6dd2c6fdcSAndrew Geissler #include <xyz/openbmc_project/Control/Host/server.hpp>
7dd2c6fdcSAndrew Geissler namespace phosphor
8dd2c6fdcSAndrew Geissler {
9dd2c6fdcSAndrew Geissler namespace host
10dd2c6fdcSAndrew Geissler {
113eb117a3SVishwanatha Subbanna namespace command
123eb117a3SVishwanatha Subbanna {
1312866370SAndrew Geissler 
14dd2c6fdcSAndrew Geissler /** @class Host
15c7021b86SAndrew Geissler  *  @brief OpenBMC control and condition host interface implementation.
16dd2c6fdcSAndrew Geissler  *  @details A concrete implementation for xyz.openbmc_project.Control.Host
17c7021b86SAndrew Geissler  *  and xyz.openbmc_project.Condition.HostFirmware DBus API's.
18dd2c6fdcSAndrew Geissler  */
19fbc6c9d7SPatrick Williams class Host :
20fbc6c9d7SPatrick Williams     public sdbusplus::server::object_t<
21*523e2d1bSWilly Tu         sdbusplus::server::xyz::openbmc_project::control::Host,
22*523e2d1bSWilly Tu         sdbusplus::server::xyz::openbmc_project::condition::HostFirmware>
23dd2c6fdcSAndrew Geissler {
24dd2c6fdcSAndrew Geissler   public:
25c7021b86SAndrew Geissler     /** @brief Constructs Host Control and Condition Interfaces
26dd2c6fdcSAndrew Geissler      *
27dd2c6fdcSAndrew Geissler      *  @param[in] bus     - The Dbus bus object
28dd2c6fdcSAndrew Geissler      *  @param[in] objPath - The Dbus object path
29dd2c6fdcSAndrew Geissler      */
Host(sdbusplus::bus_t & bus,const char * objPath)305d82f474SPatrick Williams     Host(sdbusplus::bus_t& bus, const char* objPath) :
315d82f474SPatrick Williams         sdbusplus::server::object_t<
32*523e2d1bSWilly Tu             sdbusplus::server::xyz::openbmc_project::control::Host,
33*523e2d1bSWilly Tu             sdbusplus::server::xyz::openbmc_project::condition::HostFirmware>(
34c7021b86SAndrew Geissler             bus, objPath),
353eb117a3SVishwanatha Subbanna         bus(bus)
363eb117a3SVishwanatha Subbanna     {
373eb117a3SVishwanatha Subbanna         // Nothing to do
383eb117a3SVishwanatha Subbanna     }
3962817fa9SAndrew Geissler 
4062817fa9SAndrew Geissler     /** @brief Send input command to host
413eb117a3SVishwanatha Subbanna      *         Note that the command will be queued in a FIFO if
423eb117a3SVishwanatha Subbanna      *         other commands to the host have yet to be run
4362817fa9SAndrew Geissler      *
4462817fa9SAndrew Geissler      *  @param[in] command - Input command to execute
4562817fa9SAndrew Geissler      */
4662817fa9SAndrew Geissler     void execute(Command command) override;
471b9d4e5cSAndrew Geissler 
48c7021b86SAndrew Geissler     /** @brief Override reads to CurrentFirmwareCondition */
49c7021b86SAndrew Geissler     FirmwareCondition currentFirmwareCondition() const override;
50c7021b86SAndrew Geissler 
511b9d4e5cSAndrew Geissler   private:
523eb117a3SVishwanatha Subbanna     /** @brief sdbusplus DBus bus connection. */
535d82f474SPatrick Williams     sdbusplus::bus_t& bus;
5412866370SAndrew Geissler 
553eb117a3SVishwanatha Subbanna     /** @brief  Callback function to be invoked by command manager
563eb117a3SVishwanatha Subbanna      *
573eb117a3SVishwanatha Subbanna      *  @detail Conveys the status of the last Host bound command.
583eb117a3SVishwanatha Subbanna      *          Depending on the status,  a CommandComplete or
593eb117a3SVishwanatha Subbanna      *          CommandFailure signal would be sent
603eb117a3SVishwanatha Subbanna      *
613eb117a3SVishwanatha Subbanna      *  @param[in] cmd    - IPMI command and data sent to Host
623eb117a3SVishwanatha Subbanna      *  @param[in] status - Success or Failure
633eb117a3SVishwanatha Subbanna      */
643eb117a3SVishwanatha Subbanna     void commandStatusHandler(IpmiCmdData cmd, bool status);
65dd2c6fdcSAndrew Geissler };
66dd2c6fdcSAndrew Geissler 
673eb117a3SVishwanatha Subbanna } // namespace command
68dd2c6fdcSAndrew Geissler } // namespace host
69dd2c6fdcSAndrew Geissler } // namespace phosphor
70