blob: d1f17d453f71cd61f542c0cb405a0fbb6bb5aebb [file] [log] [blame]
Andrew Geissler36529022016-11-29 15:23:54 -06001#pragma once
2
3#include <sdbusplus/bus.hpp>
4#include "xyz/openbmc_project/State/Host/server.hpp"
5
6namespace phosphor
7{
8namespace state
9{
10namespace manager
11{
12
13/** @class Host
14 * @brief OpenBMC host state management implementation.
15 * @details A concrete implementation for xyz.openbmc_project.State.Host
16 * DBus API.
17 */
18class Host : public sdbusplus::server::object::object<
19 sdbusplus::xyz::openbmc_project::State::server::Host>
20{
21 public:
22 /** @brief Constructs Host State Manager
23 *
Andrew Geissleref3c1842016-12-01 12:33:09 -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 Geissler36529022016-11-29 15:23:54 -060028 * @param[in] bus - The Dbus bus object
29 * @param[in] busName - The Dbus name to own
30 * @param[in] objPath - The Dbus object path
31 */
32 Host(sdbusplus::bus::bus& bus,
33 const char* busName,
34 const char* objPath) :
35 sdbusplus::server::object::object<
36 sdbusplus::xyz::openbmc_project::State::server::Host>(
Andrew Geissleref3c1842016-12-01 12:33:09 -060037 bus, objPath, true),
38 bus(bus)
39 {
40 // Will throw exception on fail
41 determineInitialState();
42
43 // We deferred this until we could get our property correct
44 this->emit_object_added();
45 }
46
47 /**
48 * @brief Determine initial host state and set internally
49 *
50 * @return Will throw exceptions on failure
51 **/
52 void determineInitialState();
53
54 /** @brief Set value of HostTransition */
55 Transition requestedHostTransition(Transition value) override;
56
57 /** @brief Set value of CurrentHostState */
58 HostState currentHostState(HostState value) override;
Andrew Geissler36529022016-11-29 15:23:54 -060059
60 private:
Andrew Geissleref3c1842016-12-01 12:33:09 -060061 /** @brief Persistent sdbusplus DBus bus connection. */
62 sdbusplus::bus::bus& bus;
Andrew Geissler36529022016-11-29 15:23:54 -060063};
64
65} // namespace manager
66} // namespace state
67} // namespace phosphor