blob: 3f262d3be328ece9c530f8e696b310b5bfcfaea5 [file] [log] [blame]
#pragma once
#include <systemd/sd-bus.h>
#include <sdbusplus/sdbus.hpp>
#include <sdbusplus/server/interface.hpp>
#include <sdbusplus/vtable.hpp>
#include <string>
namespace phosphor
{
namespace power
{
namespace regulators
{
namespace interface
{
class ManagerInterface
{
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.
*/
ManagerInterface() = delete;
ManagerInterface(const ManagerInterface&) = delete;
ManagerInterface& operator=(const ManagerInterface&) = delete;
ManagerInterface(ManagerInterface&&) = delete;
ManagerInterface& operator=(ManagerInterface&&) = delete;
virtual ~ManagerInterface() = 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.
*/
ManagerInterface(sdbusplus::bus::bus& bus, const char* path);
/**
* @brief Implementation for the configure method
* Request to configure the regulators according to the
* machine's regulators configuration file.
*/
virtual void configure() = 0;
/**
* @brief Implementation for the monitor method
* Begin to monitor the regulators according to the
* machine's regulators configuration file.
*
* @param[in] enable - Enable or disable monitoring of the regulators.
*/
virtual void monitor(bool enable) = 0;
/**
* @brief This dbus interface's name
*/
static constexpr auto interface =
"xyz.openbmc_project.Power.Regulators.Manager";
private:
/**
* @brief Systemd bus callback for the configure method
*/
static int callbackConfigure(sd_bus_message* msg, void* context,
sd_bus_error* error);
/**
* @brief Systemd bus callback for the monitor method
*/
static int callbackMonitor(sd_bus_message* msg, void* context,
sd_bus_error* error);
/**
* @brief 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[];
/**
* @brief Holder for the instance of this interface to be
* on dbus
*/
sdbusplus::server::interface::interface _serverInterface;
};
} // namespace interface
} // namespace regulators
} // namespace power
} // namespace phosphor