1a90a31a9SAndrew Geissler #pragma once
2a90a31a9SAndrew Geissler 
3a90a31a9SAndrew Geissler #include <sdbusplus/bus.hpp>
4a90a31a9SAndrew Geissler #include "xyz/openbmc_project/State/Chassis/server.hpp"
5a90a31a9SAndrew Geissler 
6a90a31a9SAndrew Geissler namespace phosphor
7a90a31a9SAndrew Geissler {
8a90a31a9SAndrew Geissler namespace state
9a90a31a9SAndrew Geissler {
10a90a31a9SAndrew Geissler namespace manager
11a90a31a9SAndrew Geissler {
12a90a31a9SAndrew Geissler 
13a90a31a9SAndrew Geissler /** @class Chassis
14a90a31a9SAndrew Geissler  *  @brief OpenBMC chassis state management implementation.
15a90a31a9SAndrew Geissler  *  @details A concrete implementation for xyz.openbmc_project.State.Chassis
16a90a31a9SAndrew Geissler  *  DBus API.
17a90a31a9SAndrew Geissler  */
18a90a31a9SAndrew Geissler class Chassis : public sdbusplus::server::object::object<
19a90a31a9SAndrew Geissler                 sdbusplus::xyz::openbmc_project::State::server::Chassis>
20a90a31a9SAndrew Geissler {
21a90a31a9SAndrew Geissler     public:
22a90a31a9SAndrew Geissler         /** @brief Constructs Chassis State Manager
23a90a31a9SAndrew Geissler          *
24*dff50ed6SAndrew Geissler          * @note This constructor passes 'true' to the base class in order to
25*dff50ed6SAndrew Geissler          *       defer dbus object registration until we can run
26*dff50ed6SAndrew Geissler          *       determineInitialState() and set our properties
27*dff50ed6SAndrew Geissler          *
28a90a31a9SAndrew Geissler          * @param[in] bus       - The Dbus bus object
29*dff50ed6SAndrew Geissler          * @param[in] instance  - The instance of this object
30a90a31a9SAndrew Geissler          * @param[in] objPath   - The Dbus object path
31a90a31a9SAndrew Geissler          */
32a90a31a9SAndrew Geissler         Chassis(sdbusplus::bus::bus& bus,
33a90a31a9SAndrew Geissler                 const char* busName,
34a90a31a9SAndrew Geissler                 const char* objPath) :
35a90a31a9SAndrew Geissler                 sdbusplus::server::object::object<
36a90a31a9SAndrew Geissler                     sdbusplus::xyz::openbmc_project::State::server::Chassis>(
37*dff50ed6SAndrew Geissler                             bus, objPath, true),
38a90a31a9SAndrew Geissler                 bus(bus)
39*dff50ed6SAndrew Geissler         {
40*dff50ed6SAndrew Geissler             determineInitialState();
41*dff50ed6SAndrew Geissler 
42*dff50ed6SAndrew Geissler             // We deferred this until we could get our property correct
43*dff50ed6SAndrew Geissler             this->emit_object_added();
44*dff50ed6SAndrew Geissler         }
45*dff50ed6SAndrew Geissler 
46*dff50ed6SAndrew Geissler         /** @brief Determine initial chassis state and set internally */
47*dff50ed6SAndrew Geissler         void determineInitialState();
48a90a31a9SAndrew Geissler 
49a90a31a9SAndrew Geissler         /** @brief Set value of RequestedPowerTransition */
50a90a31a9SAndrew Geissler         Transition requestedPowerTransition(Transition value) override;
51a90a31a9SAndrew Geissler 
52a90a31a9SAndrew Geissler         /** @brief Set value of CurrentPowerState */
53a90a31a9SAndrew Geissler         PowerState currentPowerState(PowerState value) override;
54a90a31a9SAndrew Geissler 
55a90a31a9SAndrew Geissler     private:
56a90a31a9SAndrew Geissler         /** @brief Persistent sdbusplus DBus connection. */
57a90a31a9SAndrew Geissler         sdbusplus::bus::bus& bus;
58a90a31a9SAndrew Geissler };
59a90a31a9SAndrew Geissler 
60a90a31a9SAndrew Geissler } // namespace manager
61a90a31a9SAndrew Geissler } // namespace state
62a90a31a9SAndrew Geissler } // namespace phosphor
63