summaryrefslogtreecommitdiffstats
path: root/manager.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'manager.hpp')
-rw-r--r--manager.hpp87
1 files changed, 87 insertions, 0 deletions
diff --git a/manager.hpp b/manager.hpp
new file mode 100644
index 0000000..9e32216
--- /dev/null
+++ b/manager.hpp
@@ -0,0 +1,87 @@
+#pragma once
+
+#include <map>
+#include <set>
+namespace phosphor
+{
+namespace led
+{
+
+/** @class Manager
+ * @brief Manages group of LEDs and applies action on the elements of group
+ */
+class Manager
+{
+ public:
+ /** @brief Define possible actions on a given LED.
+ * For the BLINK operation, follow 50-50 duty cycle
+ */
+ enum Action
+ {
+ Off,
+ On,
+ Blink,
+ };
+
+ /** @brief Only need the default Manager */
+ Manager() = default;
+ ~Manager() = default;
+ Manager(const Manager&) = delete;
+ Manager& operator=(const Manager&) = delete;
+ Manager(Manager&&) = delete;
+ Manager& operator=(Manager&&) = delete;
+
+ /** @brief Name of the LED and it's proposed action.
+ * This structure is supplied as configuration at build time
+ */
+ struct LedAction
+ {
+ std::string name;
+ Action action;
+
+ // Needed for inserting elements into sets
+ bool operator<(const LedAction& right) const
+ {
+ if (name == right.name)
+ {
+ return action < right.action;
+ }
+ return name < right.name;
+ }
+ };
+
+ /** @brief For finding intersection */
+ static bool ledComp(const LedAction& left, const LedAction& right)
+ {
+ return left.name < right.name;
+ }
+
+ using group = std::set<LedAction>;
+
+ /** @brief static global map constructed at compile time */
+ static const std::map<std::string, group> ledMap;
+
+ /** @brief Given a group name, applies the action on the group
+ *
+ * @param[in] path - dbus path of group
+ * @param[in] assert - Could be true or false
+ * @return - Success or exception thrown
+ */
+ bool setGroupState(const std::string& path, bool assert);
+
+ private:
+ /** @brief Pointers to groups that are in asserted state */
+ std::set<const group*> assertedGroups;
+
+ /** @brief Contains the LEDs that are in asserted state */
+ group currentState;
+
+ /** @brief Finds the set of LEDs to operate on and executes action
+ *
+ * @return: None
+ */
+ void driveLEDs();
+};
+
+} // namespace led
+} // namespace phosphor
OpenPOWER on IntegriCloud