blob: 0a3dae08df669bdd455c560fa679fc8fe42edab4 [file] [log] [blame]
Jim Wright19920832021-08-25 11:13:56 -05001#pragma once
2
3#include <systemd/sd-bus.h>
4
5#include <sdbusplus/sdbus.hpp>
6#include <sdbusplus/server/interface.hpp>
7#include <sdbusplus/vtable.hpp>
8
9#include <string>
10
11namespace phosphor::power::sequencer
12{
13
14/**
15 * @class PowerControl
16 * This class provides the org.openbmc.control.Power D-Bus interface.
17 */
18class PowerInterface
19{
20 public:
21 PowerInterface() = delete;
22 PowerInterface(const PowerInterface&) = delete;
23 PowerInterface& operator=(const PowerInterface&) = delete;
24 PowerInterface(PowerInterface&&) = delete;
25 PowerInterface& operator=(PowerInterface&&) = delete;
26 virtual ~PowerInterface() = default;
27
28 /**
29 * @brief Constructor to put object onto bus at a dbus path.
30 * @param[in] bus D-Bus bus object
31 * @param[in] path D-Bus object path
32 */
33 PowerInterface(sdbusplus::bus::bus& bus, const char* path);
34
35 /**
36 * Emit the power good signal
37 */
38 void emitPowerGoodSignal();
39
40 /**
41 * Emit the power lost signal
42 */
43 void emitPowerLostSignal();
44
45 /**
46 * Emit the property changed signal
47 * @param[in] property the property that changed
48 */
49 void emitPropertyChangedSignal(const char* property);
50
51 /**
Jim Wright22318a32021-08-27 15:56:09 -050052 * Returns the power good of the chassis
Jim Wright19920832021-08-25 11:13:56 -050053 * @return power good
54 */
Jim Wright22318a32021-08-27 15:56:09 -050055 virtual int getPgood() const = 0;
Jim Wright19920832021-08-25 11:13:56 -050056
57 /**
Jim Wright22318a32021-08-27 15:56:09 -050058 * Returns the power good timeout
Jim Wright19920832021-08-25 11:13:56 -050059 * @return power good timeout
60 */
Jim Wright22318a32021-08-27 15:56:09 -050061 virtual int getPgoodTimeout() const = 0;
Jim Wright19920832021-08-25 11:13:56 -050062
63 /**
Jim Wright22318a32021-08-27 15:56:09 -050064 * Returns the value of the last requested power state
Jim Wright19920832021-08-25 11:13:56 -050065 * @return power state. A power on request is value 1. Power off is 0.
66 */
Jim Wright22318a32021-08-27 15:56:09 -050067 virtual int getState() const = 0;
Jim Wright19920832021-08-25 11:13:56 -050068
69 /**
Jim Wright22318a32021-08-27 15:56:09 -050070 * Sets the power good timeout
Jim Wright19920832021-08-25 11:13:56 -050071 * @param[in] timeout power good timeout
72 */
73 virtual void setPgoodTimeout(int timeout) = 0;
74
75 /**
Jim Wright22318a32021-08-27 15:56:09 -050076 * Initiates a chassis power state change
Jim Wright19920832021-08-25 11:13:56 -050077 * @param[in] state power state. Request power on with a value of 1. Request
78 * power off with a value of 0. Other values will be rejected.
79 */
80 virtual void setState(int state) = 0;
81
Jim Wrightccea2d22021-12-10 14:10:46 -060082 /**
83 * Sets the power supply error. The error should be of great enough severity
84 * that a power good failure may occur and will be issued in preference to
85 * the power good error.
86 * @param[in] error power supply error. The value should be a message
87 * argument for a phosphor-logging Create call, e.g.
88 * "xyz.openbmc_project.Power.PowerSupply.Error.PSKillFault"
89 */
90 virtual void setPowerSupplyError(const std::string& error) = 0;
91
Jim Wright19920832021-08-25 11:13:56 -050092 private:
93 /**
94 * Holder for the instance of this interface to be on dbus
95 */
96 sdbusplus::server::interface::interface _serverInterface;
97
98 /**
99 * Systemd vtable structure that contains all the
100 * methods, signals, and properties of this interface with their
101 * respective systemd attributes
102 */
103 static const sdbusplus::vtable::vtable_t _vtable[];
104
105 /**
106 * Systemd bus callback for getting the pgood property
107 */
108 static int callbackGetPgood(sd_bus* bus, const char* path,
109 const char* interface, const char* property,
110 sd_bus_message* msg, void* context,
111 sd_bus_error* ret_error);
112
113 /**
114 * Systemd bus callback for getting the pgood_timeout property
115 */
116 static int callbackGetPgoodTimeout(sd_bus* bus, const char* path,
117 const char* interface,
118 const char* property,
119 sd_bus_message* msg, void* context,
120 sd_bus_error* error);
121
122 /**
123 * Systemd bus callback for the getPowerState method
124 */
125 static int callbackGetPowerState(sd_bus_message* msg, void* context,
126 sd_bus_error* error);
127
128 /**
129 * Systemd bus callback for getting the state property
130 */
131 static int callbackGetState(sd_bus* bus, const char* path,
132 const char* interface, const char* property,
133 sd_bus_message* msg, void* context,
134 sd_bus_error* error);
135
136 /**
137 * Systemd bus callback for setting the pgood_timeout property
138 */
139 static int callbackSetPgoodTimeout(sd_bus* bus, const char* path,
140 const char* interface,
141 const char* property,
142 sd_bus_message* msg, void* context,
143 sd_bus_error* error);
144
145 /**
Jim Wrightccea2d22021-12-10 14:10:46 -0600146 * Systemd bus callback for the setPowerSupplyError method
147 */
148 static int callbackSetPowerSupplyError(sd_bus_message* msg, void* context,
149 sd_bus_error* error);
150
151 /**
Jim Wright19920832021-08-25 11:13:56 -0500152 * Systemd bus callback for the setPowerState method
153 */
154 static int callbackSetPowerState(sd_bus_message* msg, void* context,
155 sd_bus_error* error);
156};
157
158} // namespace phosphor::power::sequencer