blob: 98cf660e23af137374bbecdf25fc02799a4a0df0 [file] [log] [blame]
Jayashree Dhanapalb6779842022-10-07 13:34:16 +05301#pragma once
2
3#include "physical.hpp"
4
Jayashree Dhanapalb6779842022-10-07 13:34:16 +05305#include <phosphor-logging/lg2.hpp>
6#include <sdbusplus/bus.hpp>
7#include <sdbusplus/server/interface.hpp>
8#include <sdbusplus/vtable.hpp>
9
10#include <unordered_map>
11
12static constexpr auto busName = "xyz.openbmc_project.LED.Controller";
13static constexpr auto ledPath = "/xyz/openbmc_project/led";
14static constexpr auto physParent = "/xyz/openbmc_project/led/physical";
Jayashree Dhanapalb6779842022-10-07 13:34:16 +053015static constexpr auto internalInterface =
16 "xyz.openbmc_project.Led.Sysfs.Internal";
17static constexpr auto ledAddMethod = "AddLED";
18
19namespace phosphor
20{
21namespace led
22{
23namespace sysfs
24{
25namespace interface
26{
27
28class InternalInterface
29{
30 public:
31 InternalInterface() = delete;
32 InternalInterface(const InternalInterface&) = delete;
33 InternalInterface& operator=(const InternalInterface&) = delete;
34 InternalInterface(InternalInterface&&) = delete;
35 InternalInterface& operator=(InternalInterface&&) = delete;
36 virtual ~InternalInterface() = default;
37
38 /**
39 * @brief Construct a class to put object onto bus at a dbus path.
40 *
41 * @param[in] bus - D-Bus object.
42 * @param[in] path - D-Bus Path.
43 */
44
45 InternalInterface(sdbusplus::bus_t& bus, const char* path);
46
47 /**
48 * @brief Implementation for the AddLed method to add
49 * the LED name to dbus path.
50 *
51 * @param[in] name - LED name to add.
52 */
53
54 void addLED(const std::string& name);
55
56 /**
57 * @brief Implementation for the RemoveLed method to remove
58 * the LED name to dbus path.
59 *
60 * @param[in] name - LED name to remove.
61 */
62
63 void removeLED(const std::string& name);
64
Alexander Hansen673b9812024-08-01 15:21:34 +020065 /** @brief Generates LED DBus name from LED description
66 *
67 * @param[in] name - LED description
68 * @return - DBus LED name
69 */
70
71 static std::string getDbusName(const LedDescr& ledDescr);
72
Jayashree Dhanapalb6779842022-10-07 13:34:16 +053073 private:
74 /**
75 * @brief Unordered map to declare the sysfs LEDs
76 */
77
78 std::unordered_map<std::string, std::unique_ptr<phosphor::led::Physical>>
79 leds;
80
81 /**
Jayashree Dhanapalb6779842022-10-07 13:34:16 +053082 * @brief sdbusplus D-Bus connection.
83 */
84
85 sdbusplus::bus_t& bus;
86
87 /**
88 * @brief Systemd bus callback for the AddLed method.
89 */
90
91 static int addLedConfigure(sd_bus_message* msg, void* context,
92 sd_bus_error* error);
93
94 /**
95 * @brief Systemd bus callback for the RemoveLed method.
96 */
97
98 static int removeLedConfigure(sd_bus_message* msg, void* context,
99 sd_bus_error* error);
100
101 /**
102 * @brief Systemd vtable structure that contains all the
103 * methods, signals, and properties of this interface with their
104 * respective systemd attributes
105 */
106
107 static const std::array<sdbusplus::vtable::vtable_t, 4> vtable;
108
109 /**
110 * @brief Support for the dbus based instance of this interface.
111 */
112
113 sdbusplus::server::interface_t serverInterface;
114
115 /**
116 * @brief Implementation to create a dbus path for LED.
117 *
118 * @param[in] name - LED name.
119 */
120
121 void createLEDPath(const std::string& ledName);
Jayashree Dhanapalb6779842022-10-07 13:34:16 +0530122};
123
124} // namespace interface
125} // namespace sysfs
126} // namespace led
127} // namespace phosphor