1dd2c6fdcSAndrew Geissler #pragma once
2dd2c6fdcSAndrew Geissler 
3dd2c6fdcSAndrew Geissler #include <sdbusplus/bus.hpp>
4dd2c6fdcSAndrew Geissler #include <xyz/openbmc_project/Control/Host/server.hpp>
5dd2c6fdcSAndrew Geissler 
6dd2c6fdcSAndrew Geissler namespace phosphor
7dd2c6fdcSAndrew Geissler {
8dd2c6fdcSAndrew Geissler namespace host
9dd2c6fdcSAndrew Geissler {
10dd2c6fdcSAndrew Geissler 
11dd2c6fdcSAndrew Geissler /** @class Host
12dd2c6fdcSAndrew Geissler  *  @brief OpenBMC control host interface implementation.
13dd2c6fdcSAndrew Geissler  *  @details A concrete implementation for xyz.openbmc_project.Control.Host
14dd2c6fdcSAndrew Geissler  *  DBus API.
15dd2c6fdcSAndrew Geissler  */
16dd2c6fdcSAndrew Geissler class Host : public sdbusplus::server::object::object<
17dd2c6fdcSAndrew Geissler                 sdbusplus::xyz::openbmc_project::Control::server::Host>
18dd2c6fdcSAndrew Geissler {
19dd2c6fdcSAndrew Geissler     public:
20dd2c6fdcSAndrew Geissler         /** @brief Constructs Host Control Interface
21dd2c6fdcSAndrew Geissler          *
22dd2c6fdcSAndrew Geissler          * @param[in] bus       - The Dbus bus object
23dd2c6fdcSAndrew Geissler          * @param[in] objPath   - The Dbus object path
24dd2c6fdcSAndrew Geissler          */
25dd2c6fdcSAndrew Geissler         Host(sdbusplus::bus::bus& bus,
26dd2c6fdcSAndrew Geissler              const char* objPath) :
27dd2c6fdcSAndrew Geissler              sdbusplus::server::object::object<
28dd2c6fdcSAndrew Geissler                 sdbusplus::xyz::openbmc_project::Control::server::Host>(
29*1b9d4e5cSAndrew Geissler                         bus, objPath),
30*1b9d4e5cSAndrew Geissler              bus(bus)
31dd2c6fdcSAndrew Geissler         {}
3262817fa9SAndrew Geissler 
3362817fa9SAndrew Geissler         /** @brief Send input command to host
3462817fa9SAndrew Geissler          *
3562817fa9SAndrew Geissler          * Note that the command will be queued in a FIFO if other commands
3662817fa9SAndrew Geissler          * to the host have yet to be run
3762817fa9SAndrew Geissler          *
3862817fa9SAndrew Geissler          * @param[in] command       - Input command to execute
3962817fa9SAndrew Geissler          */
4062817fa9SAndrew Geissler         void execute(Command command) override;
41*1b9d4e5cSAndrew Geissler 
42*1b9d4e5cSAndrew Geissler     private:
43*1b9d4e5cSAndrew Geissler 
44*1b9d4e5cSAndrew Geissler         /** @brief Persistent sdbusplus DBus bus connection. */
45*1b9d4e5cSAndrew Geissler         sdbusplus::bus::bus& bus;
46dd2c6fdcSAndrew Geissler };
47dd2c6fdcSAndrew Geissler 
48dd2c6fdcSAndrew Geissler } // namespace host
49dd2c6fdcSAndrew Geissler } // namespace phosphor
50