| #pragma once |
| |
| #include <systemd/sd-bus.h> |
| |
| #include <sdbusplus/sdbus.hpp> |
| #include <sdbusplus/server/interface.hpp> |
| #include <sdbusplus/vtable.hpp> |
| |
| #include <string> |
| |
| namespace phosphor::power::sequencer |
| { |
| |
| /** |
| * @class PowerControl |
| * This class provides the org.openbmc.control.Power D-Bus interface. |
| */ |
| class PowerInterface |
| { |
| public: |
| PowerInterface() = delete; |
| PowerInterface(const PowerInterface&) = delete; |
| PowerInterface& operator=(const PowerInterface&) = delete; |
| PowerInterface(PowerInterface&&) = delete; |
| PowerInterface& operator=(PowerInterface&&) = delete; |
| virtual ~PowerInterface() = default; |
| |
| /** |
| * @brief Constructor to put object onto bus at a dbus path. |
| * @param[in] bus D-Bus bus object |
| * @param[in] path D-Bus object path |
| */ |
| PowerInterface(sdbusplus::bus::bus& bus, const char* path); |
| |
| /** |
| * Emit the power good signal |
| */ |
| void emitPowerGoodSignal(); |
| |
| /** |
| * Emit the power lost signal |
| */ |
| void emitPowerLostSignal(); |
| |
| /** |
| * Emit the property changed signal |
| * @param[in] property the property that changed |
| */ |
| void emitPropertyChangedSignal(const char* property); |
| |
| /** |
| * Returns the power good of the chassis |
| * @return power good |
| */ |
| virtual int getPgood() const = 0; |
| |
| /** |
| * Returns the power good timeout |
| * @return power good timeout |
| */ |
| virtual int getPgoodTimeout() const = 0; |
| |
| /** |
| * Returns the value of the last requested power state |
| * @return power state. A power on request is value 1. Power off is 0. |
| */ |
| virtual int getState() const = 0; |
| |
| /** |
| * Sets the power good timeout |
| * @param[in] timeout power good timeout |
| */ |
| virtual void setPgoodTimeout(int timeout) = 0; |
| |
| /** |
| * Initiates a chassis power state change |
| * @param[in] state power state. Request power on with a value of 1. Request |
| * power off with a value of 0. Other values will be rejected. |
| */ |
| virtual void setState(int state) = 0; |
| |
| /** |
| * Sets the power supply error. The error should be of great enough severity |
| * that a power good failure may occur and will be issued in preference to |
| * the power good error. |
| * @param[in] error power supply error. The value should be a message |
| * argument for a phosphor-logging Create call, e.g. |
| * "xyz.openbmc_project.Power.PowerSupply.Error.PSKillFault" |
| */ |
| virtual void setPowerSupplyError(const std::string& error) = 0; |
| |
| private: |
| /** |
| * Holder for the instance of this interface to be on dbus |
| */ |
| sdbusplus::server::interface::interface _serverInterface; |
| |
| /** |
| * Systemd vtable structure that contains all the |
| * methods, signals, and properties of this interface with their |
| * respective systemd attributes |
| */ |
| static const sdbusplus::vtable::vtable_t _vtable[]; |
| |
| /** |
| * Systemd bus callback for getting the pgood property |
| */ |
| static int callbackGetPgood(sd_bus* bus, const char* path, |
| const char* interface, const char* property, |
| sd_bus_message* msg, void* context, |
| sd_bus_error* ret_error); |
| |
| /** |
| * Systemd bus callback for getting the pgood_timeout property |
| */ |
| static int callbackGetPgoodTimeout(sd_bus* bus, const char* path, |
| const char* interface, |
| const char* property, |
| sd_bus_message* msg, void* context, |
| sd_bus_error* error); |
| |
| /** |
| * Systemd bus callback for the getPowerState method |
| */ |
| static int callbackGetPowerState(sd_bus_message* msg, void* context, |
| sd_bus_error* error); |
| |
| /** |
| * Systemd bus callback for getting the state property |
| */ |
| static int callbackGetState(sd_bus* bus, const char* path, |
| const char* interface, const char* property, |
| sd_bus_message* msg, void* context, |
| sd_bus_error* error); |
| |
| /** |
| * Systemd bus callback for setting the pgood_timeout property |
| */ |
| static int callbackSetPgoodTimeout(sd_bus* bus, const char* path, |
| const char* interface, |
| const char* property, |
| sd_bus_message* msg, void* context, |
| sd_bus_error* error); |
| |
| /** |
| * Systemd bus callback for the setPowerSupplyError method |
| */ |
| static int callbackSetPowerSupplyError(sd_bus_message* msg, void* context, |
| sd_bus_error* error); |
| |
| /** |
| * Systemd bus callback for the setPowerState method |
| */ |
| static int callbackSetPowerState(sd_bus_message* msg, void* context, |
| sd_bus_error* error); |
| }; |
| |
| } // namespace phosphor::power::sequencer |