1*a90a31a9SAndrew Geissler #pragma once
2*a90a31a9SAndrew Geissler 
3*a90a31a9SAndrew Geissler #include <sdbusplus/bus.hpp>
4*a90a31a9SAndrew Geissler #include "xyz/openbmc_project/State/Chassis/server.hpp"
5*a90a31a9SAndrew Geissler 
6*a90a31a9SAndrew Geissler namespace phosphor
7*a90a31a9SAndrew Geissler {
8*a90a31a9SAndrew Geissler namespace state
9*a90a31a9SAndrew Geissler {
10*a90a31a9SAndrew Geissler namespace manager
11*a90a31a9SAndrew Geissler {
12*a90a31a9SAndrew Geissler 
13*a90a31a9SAndrew Geissler /** @class Chassis
14*a90a31a9SAndrew Geissler  *  @brief OpenBMC chassis state management implementation.
15*a90a31a9SAndrew Geissler  *  @details A concrete implementation for xyz.openbmc_project.State.Chassis
16*a90a31a9SAndrew Geissler  *  DBus API.
17*a90a31a9SAndrew Geissler  */
18*a90a31a9SAndrew Geissler class Chassis : public sdbusplus::server::object::object<
19*a90a31a9SAndrew Geissler                 sdbusplus::xyz::openbmc_project::State::server::Chassis>
20*a90a31a9SAndrew Geissler {
21*a90a31a9SAndrew Geissler     public:
22*a90a31a9SAndrew Geissler         /** @brief Constructs Chassis State Manager
23*a90a31a9SAndrew Geissler          *
24*a90a31a9SAndrew Geissler          * @param[in] bus       - The Dbus bus object
25*a90a31a9SAndrew Geissler          * @param[in] busName   - The Dbus name to own
26*a90a31a9SAndrew Geissler          * @param[in] objPath   - The Dbus object path
27*a90a31a9SAndrew Geissler          */
28*a90a31a9SAndrew Geissler         Chassis(sdbusplus::bus::bus& bus,
29*a90a31a9SAndrew Geissler                 const char* busName,
30*a90a31a9SAndrew Geissler                 const char* objPath) :
31*a90a31a9SAndrew Geissler                 sdbusplus::server::object::object<
32*a90a31a9SAndrew Geissler                     sdbusplus::xyz::openbmc_project::State::server::Chassis>(
33*a90a31a9SAndrew Geissler                             bus, objPath),
34*a90a31a9SAndrew Geissler                 bus(bus)
35*a90a31a9SAndrew Geissler         {}
36*a90a31a9SAndrew Geissler 
37*a90a31a9SAndrew Geissler         /** @brief Set value of RequestedPowerTransition */
38*a90a31a9SAndrew Geissler         Transition requestedPowerTransition(Transition value) override;
39*a90a31a9SAndrew Geissler 
40*a90a31a9SAndrew Geissler         /** @brief Set value of CurrentPowerState */
41*a90a31a9SAndrew Geissler         PowerState currentPowerState(PowerState value) override;
42*a90a31a9SAndrew Geissler 
43*a90a31a9SAndrew Geissler     private:
44*a90a31a9SAndrew Geissler         /** @brief Persistent sdbusplus DBus connection. */
45*a90a31a9SAndrew Geissler         sdbusplus::bus::bus& bus;
46*a90a31a9SAndrew Geissler };
47*a90a31a9SAndrew Geissler 
48*a90a31a9SAndrew Geissler } // namespace manager
49*a90a31a9SAndrew Geissler } // namespace state
50*a90a31a9SAndrew Geissler } // namespace phosphor
51