xref: /openbmc/phosphor-led-manager/manager/ledlayout.hpp (revision 55badf7979f57d5f9ed2db726eebf35e84d0dac5)
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