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