1 #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 
11 namespace phosphor
12 {
13 namespace power
14 {
15 namespace regulators
16 {
17 namespace interface
18 {
19 
20 class ManagerInterface
21 {
22   public:
23     /* Define all of the basic class operations:
24      *     Not allowed:
25      *         - Default constructor to avoid nullptrs.
26      *         - Copy operations due to internal unique_ptr.
27      *         - Move operations due to 'this' being registered as the
28      *           'context' with sdbus.
29      *     Allowed:
30      *         - Destructor.
31      */
32     ManagerInterface() = delete;
33     ManagerInterface(const ManagerInterface&) = delete;
34     ManagerInterface& operator=(const ManagerInterface&) = delete;
35     ManagerInterface(ManagerInterface&&) = delete;
36     ManagerInterface& operator=(ManagerInterface&&) = delete;
37     virtual ~ManagerInterface() = default;
38 
39     /**
40      * @brief Constructor to put object onto bus at a dbus path.
41      * @param[in] bus - Bus to attach to.
42      * @param[in] path - Path to attach at.
43      */
44     ManagerInterface(sdbusplus::bus_t& bus, const char* path);
45 
46     /**
47      * @brief Implementation for the configure method
48      * Request to configure the regulators according to the
49      * machine's regulators configuration file.
50      */
51     virtual void configure() = 0;
52 
53     /**
54      * @brief Implementation for the monitor method
55      * Begin to monitor the regulators according to the
56      * machine's regulators configuration file.
57      *
58      * @param[in] enable - Enable or disable monitoring of the regulators.
59      */
60     virtual void monitor(bool enable) = 0;
61 
62     /**
63      * @brief This dbus interface's name
64      */
65     static constexpr auto interface =
66         "xyz.openbmc_project.Power.Regulators.Manager";
67 
68   private:
69     /**
70      * @brief Systemd bus callback for the configure method
71      */
72     static int callbackConfigure(sd_bus_message* msg, void* context,
73                                  sd_bus_error* error);
74 
75     /**
76      * @brief Systemd bus callback for the monitor method
77      */
78     static int callbackMonitor(sd_bus_message* msg, void* context,
79                                sd_bus_error* error);
80 
81     /**
82      * @brief Systemd vtable structure that contains all the
83      * methods, signals, and properties of this interface with their
84      * respective systemd attributes
85      */
86     static const sdbusplus::vtable::vtable_t _vtable[];
87 
88     /**
89      * @brief Holder for the instance of this interface to be
90      * on dbus
91      */
92     sdbusplus::server::interface::interface _serverInterface;
93 };
94 
95 } // namespace interface
96 } // namespace regulators
97 } // namespace power
98 } // namespace phosphor
99