summaryrefslogtreecommitdiffstats
path: root/xyz/openbmc_project/State/BMC/server.hpp
blob: b66fbf2b874c994f04e67224630a293e9ff3d4cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#pragma once
#include <tuple>
#include <systemd/sd-bus.h>
#include <sdbusplus/server.hpp>

namespace sdbusplus
{
namespace xyz
{
namespace openbmc_project
{
namespace State
{
namespace server
{

class BMC
{
    public:
        /* Define all of the basic class operations:
         *     Not allowed:
         *         - Default constructor to avoid nullptrs.
         *         - Copy operations due to internal unique_ptr.
         *         - Move operations due to 'this' being registered as the
         *           'context' with sdbus.
         *     Allowed:
         *         - Destructor.
         */
        BMC() = delete;
        BMC(const BMC&) = delete;
        BMC& operator=(const BMC&) = delete;
        BMC(BMC&&) = delete;
        BMC& operator=(BMC&&) = delete;
        virtual ~BMC() = default;

        /** @brief Constructor to put object onto bus at a dbus path.
         *  @param[in] bus - Bus to attach to.
         *  @param[in] path - Path to attach at.
         */
        BMC(bus::bus& bus, const char* path);

        enum class Transition
        {
            Reboot,
            None,
        };
        enum class BMCState
        {
            Ready,
            NotReady,
        };



        /** Get value of RequestedBMCTransition */
        virtual Transition requestedBMCTransition() const;
        /** Set value of RequestedBMCTransition */
        virtual Transition requestedBMCTransition(Transition value);
        /** Get value of CurrentBMCState */
        virtual BMCState currentBMCState() const;
        /** Set value of CurrentBMCState */
        virtual BMCState currentBMCState(BMCState value);

    /** @brief Convert a string to an appropriate enum value.
     *  @param[in] s - The string to convert in the form of
     *                 "xyz.openbmc_project.State.BMC.<value name>"
     *  @return - The enum value.
     */
    static Transition convertTransitionFromString(std::string& s);
    /** @brief Convert a string to an appropriate enum value.
     *  @param[in] s - The string to convert in the form of
     *                 "xyz.openbmc_project.State.BMC.<value name>"
     *  @return - The enum value.
     */
    static BMCState convertBMCStateFromString(std::string& s);

    private:

        /** @brief sd-bus callback for get-property 'RequestedBMCTransition' */
        static int _callback_get_RequestedBMCTransition(
            sd_bus*, const char*, const char*, const char*,
            sd_bus_message*, void*, sd_bus_error*);
        /** @brief sd-bus callback for set-property 'RequestedBMCTransition' */
        static int _callback_set_RequestedBMCTransition(
            sd_bus*, const char*, const char*, const char*,
            sd_bus_message*, void*, sd_bus_error*);

        /** @brief sd-bus callback for get-property 'CurrentBMCState' */
        static int _callback_get_CurrentBMCState(
            sd_bus*, const char*, const char*, const char*,
            sd_bus_message*, void*, sd_bus_error*);
        /** @brief sd-bus callback for set-property 'CurrentBMCState' */
        static int _callback_set_CurrentBMCState(
            sd_bus*, const char*, const char*, const char*,
            sd_bus_message*, void*, sd_bus_error*);


        static constexpr auto _interface = "xyz.openbmc_project.State.BMC";
        static const vtable::vtable_t _vtable[];
        sdbusplus::server::interface::interface
                _xyz_openbmc_project_State_BMC_interface;

        Transition _requestedBMCTransition = Transition::None;
        BMCState _currentBMCState{};

};

/* Specialization of sdbusplus::server::bindings::details::convertForMessage
 * for enum-type BMC::Transition.
 *
 * This converts from the enum to a constant c-string representing the enum.
 *
 * @param[in] e - Enum value to convert.
 * @return C-string representing the name for the enum value.
 */
std::string convertForMessage(BMC::Transition e);
/* Specialization of sdbusplus::server::bindings::details::convertForMessage
 * for enum-type BMC::BMCState.
 *
 * This converts from the enum to a constant c-string representing the enum.
 *
 * @param[in] e - Enum value to convert.
 * @return C-string representing the name for the enum value.
 */
std::string convertForMessage(BMC::BMCState e);

} // namespace server
} // namespace State
} // namespace openbmc_project
} // namespace xyz
} // namespace sdbusplus

OpenPOWER on IntegriCloud