1953315d2SPatrick Williams #pragma once 2953315d2SPatrick Williams 3ed80e885SPatrick Williams #include <xyz/openbmc_project/Led/Physical/server.hpp> 4ed80e885SPatrick Williams 5953315d2SPatrick Williams #include <set> 6953315d2SPatrick Williams #include <string> 7f2044037SPatrick Williams #include <unordered_map> 8953315d2SPatrick Williams 9953315d2SPatrick Williams namespace phosphor 10953315d2SPatrick Williams { 11953315d2SPatrick Williams namespace led 12953315d2SPatrick Williams { 13953315d2SPatrick Williams /** @namespace Layout 14953315d2SPatrick Williams * @brief Depicts the LED and their mappings and group actions 15953315d2SPatrick Williams */ 16953315d2SPatrick Williams namespace Layout 17953315d2SPatrick Williams { 18ed80e885SPatrick Williams 19ed80e885SPatrick Williams using Action = sdbusplus::xyz::openbmc_project::Led::server::Physical::Action; 20953315d2SPatrick Williams 21953315d2SPatrick Williams /** @brief Name of the LED and it's proposed action. 22953315d2SPatrick Williams * This structure is supplied as configuration at build time 23953315d2SPatrick Williams */ 24953315d2SPatrick Williams struct LedAction 25953315d2SPatrick Williams { 26953315d2SPatrick Williams std::string name; 27953315d2SPatrick Williams Action action; 28953315d2SPatrick Williams uint8_t dutyOn; 29953315d2SPatrick Williams uint16_t period; 30*55badf79SAlexander Hansen std::optional<Action> priority; 31953315d2SPatrick Williams 32953315d2SPatrick Williams // Order LEDs such that same LEDs are grouped next to 33953315d2SPatrick Williams // each other and the same LEDs are in priority order 34953315d2SPatrick Williams // with the highest priority coming first operator <phosphor::led::Layout::LedAction35953315d2SPatrick Williams bool operator<(const LedAction& right) const 36953315d2SPatrick Williams { 37953315d2SPatrick Williams if (name == right.name) 38953315d2SPatrick Williams { 39953315d2SPatrick Williams if (action == right.action) 40953315d2SPatrick Williams { 41953315d2SPatrick Williams return false; 42953315d2SPatrick Williams } 43953315d2SPatrick Williams else if (action == priority) 44953315d2SPatrick Williams { 45953315d2SPatrick Williams return true; 46953315d2SPatrick Williams } 47953315d2SPatrick Williams } 48953315d2SPatrick Williams return name < right.name; 49953315d2SPatrick Williams } 50953315d2SPatrick Williams }; 51953315d2SPatrick Williams } // namespace Layout 52158b2c14SPatrick Williams 53158b2c14SPatrick Williams using ActionSet = std::set<Layout::LedAction>; 54158b2c14SPatrick Williams 55953315d2SPatrick Williams } // namespace led 56953315d2SPatrick Williams } // namespace phosphor 57