1 #pragma once 2 3 #include "manager.hpp" 4 #include "serialize.hpp" 5 6 #include <sdbusplus/bus.hpp> 7 #include <sdbusplus/server/object.hpp> 8 #include <xyz/openbmc_project/Led/Group/server.hpp> 9 10 #include <string> 11 12 namespace phosphor 13 { 14 namespace led 15 { 16 17 namespace 18 { 19 using GroupInherit = sdbusplus::server::object_t< 20 sdbusplus::xyz::openbmc_project::Led::server::Group>; 21 } 22 23 /** @class Group 24 * @brief Manages group of LEDs and applies action on the elements of group 25 */ 26 class Group : public GroupInherit 27 { 28 public: 29 Group() = delete; 30 ~Group() = default; 31 Group(const Group&) = delete; 32 Group& operator=(const Group&) = delete; 33 Group(Group&&) = delete; 34 Group& operator=(Group&&) = delete; 35 36 /** @brief Constructs LED Group 37 * 38 * @param[in] bus - Handle to system dbus 39 * @param[in] objPath - The D-Bus path that hosts LED group 40 * @param[in] manager - Reference to Manager 41 * @param[in] serializePtr - Serialize object 42 * @param[in] callBack - Custom callback when LED group is asserted 43 */ 44 Group(sdbusplus::bus_t& bus, const std::string& objPath, Manager& manager, 45 std::shared_ptr<Serialize> serializePtr, 46 std::function<bool(Group*, bool)> callBack = nullptr) : 47 48 GroupInherit(bus, objPath.c_str(), GroupInherit::action::defer_emit), 49 path(objPath), manager(manager), serializePtr(serializePtr), 50 customCallBack(callBack) 51 { 52 // Initialize Asserted property value 53 if (serializePtr && serializePtr->getGroupSavedState(objPath)) 54 { 55 asserted(true); 56 } 57 58 // Emit deferred signal. 59 emit_object_added(); 60 } 61 62 /** @brief Property SET Override function 63 * 64 * @param[in] value - True or False 65 * @return - Success or exception thrown 66 */ 67 bool asserted(bool value) override; 68 69 private: 70 /** @brief Path of the group instance */ 71 std::string path; 72 73 /** @brief Reference to Manager object */ 74 Manager& manager; 75 76 /** @brief The serialize class for storing and restoring groups of LEDs */ 77 std::shared_ptr<Serialize> serializePtr; 78 79 /** @brief Custom callback when LED group is asserted 80 * Callback that holds LED group method which handles lamp test request. 81 * 82 * @param[in] Group object - Pointer to Group object 83 * @param[in] bool - Input value (true/false) 84 * 85 * @return bool which tells if execution succeeds(true) or fails(false). 86 */ 87 std::function<bool(Group*, bool)> customCallBack; 88 }; 89 90 } // namespace led 91 } // namespace phosphor 92