Use generated bindings for Led Group manager

This extends generated sdbusplus interface and provides implementation for
handling LED group operations.

Change-Id: I9e6f83f2f801de24d33937bc651228b1c0ccdc37
Signed-off-by: Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com>
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