diff options
Diffstat (limited to 'manager.hpp')
-rw-r--r-- | manager.hpp | 87 |
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 |