xref: /openbmc/phosphor-led-manager/README.md (revision 95da5ba556012d82326e92b919ebf59e59556db6)
1bdbfcde1SAlexander Hansen# phosphor-led-manager
2bdbfcde1SAlexander Hansen
3bdbfcde1SAlexander HansenThis project manages LED groups on dbus. Sometimes many LEDs must be driven
4bdbfcde1SAlexander Hansentogether to indicate some system state.
5bdbfcde1SAlexander Hansen
6bdbfcde1SAlexander HansenFor example, there can be multiple identify LEDs. When the user wants to
7bdbfcde1SAlexander Hansenidentify the system, they should all light up together.
8bdbfcde1SAlexander Hansen
9bdbfcde1SAlexander Hansen## Configuration
10bdbfcde1SAlexander Hansen
11bdbfcde1SAlexander HansenThe configuration can happen via json or yaml.
12bdbfcde1SAlexander Hansen
132099d9f5SAlexander Hansen### Configuration: LED Priority
142099d9f5SAlexander Hansen
154d44a55eSAlexander HansenEach LED can have "Priority" as "Blink", "Off" or "On". If this property is
164d44a55eSAlexander Hansendefined, it should be defined on each instance of the LED in the config.
172099d9f5SAlexander Hansen
182099d9f5SAlexander HansenWhen multiple LED groups are asserted and contain the same LED, "Priority"
192099d9f5SAlexander Hansendetermines the state of the LED.
202099d9f5SAlexander Hansen
212099d9f5SAlexander HansenFor example, Group 1 says LED1 should be "Blink", and Group 2 says it should be
222099d9f5SAlexander Hansen"On". LED1 will then have the state declared in "Priority".
232099d9f5SAlexander Hansen
24c8ce906bSAlexander Hansen## Configuration: LED Group Priority
25c8ce906bSAlexander Hansen
26c8ce906bSAlexander HansenUsing LED Priority is fine for simple configurations, but when group state needs
27c8ce906bSAlexander Hansento always be consistent, Group Priority can be used to enforce the consistent
28c8ce906bSAlexander Hansenrepresentation.
29c8ce906bSAlexander Hansen
30c8ce906bSAlexander HansenThe Group `Priority` is optional and a higher priority means that when 2 groups
31c8ce906bSAlexander Hansenare asserted, the one with highest `Priority` will be represented consistently.
32c8ce906bSAlexander HansenMeaning all its LEDs will have the state as per the configuration.
33c8ce906bSAlexander Hansen
34c8ce906bSAlexander Hansen## Configuration Example with Group Priorities (JSON)
35c8ce906bSAlexander Hansen
36c8ce906bSAlexander HansenHere we prioritize the locating group above the fault group since locating may
37c8ce906bSAlexander Hansenbe required to fix the fault.
38c8ce906bSAlexander Hansen
39c8ce906bSAlexander HansenSo independent of the order that these groups are asserted, if both are
40c8ce906bSAlexander Hansenasserted, "sys_id" should be in "Blink" state.
41c8ce906bSAlexander Hansen
42c8ce906bSAlexander HansenThe "unrelated" group will have the default group priority of 0.
43c8ce906bSAlexander Hansen
44*95da5ba5SGeorge Liu```json
45c8ce906bSAlexander Hansen{
46c8ce906bSAlexander Hansen  "leds": [
47c8ce906bSAlexander Hansen    {
48c8ce906bSAlexander Hansen      "group": "enclosure_identify",
49c8ce906bSAlexander Hansen      "Priority": 2,
50c8ce906bSAlexander Hansen      "members": [
51c8ce906bSAlexander Hansen        {
52c8ce906bSAlexander Hansen          "Name": "sys_id",
53c8ce906bSAlexander Hansen          "Action": "Blink"
54c8ce906bSAlexander Hansen        },
55c8ce906bSAlexander Hansen        {
56c8ce906bSAlexander Hansen          "Name": "rear_id",
57c8ce906bSAlexander Hansen          "Action": "Blink"
58c8ce906bSAlexander Hansen        }
59c8ce906bSAlexander Hansen      ]
60c8ce906bSAlexander Hansen    },
61c8ce906bSAlexander Hansen    {
62c8ce906bSAlexander Hansen      "group": "fault",
63c8ce906bSAlexander Hansen      "Priority": 1,
64c8ce906bSAlexander Hansen      "members": [
65c8ce906bSAlexander Hansen        {
66c8ce906bSAlexander Hansen          "Name": "sys_id",
67c8ce906bSAlexander Hansen          "Action": "On"
68c8ce906bSAlexander Hansen        },
69c8ce906bSAlexander Hansen        {
70c8ce906bSAlexander Hansen          "Name": "fault",
71c8ce906bSAlexander Hansen          "Action": "On"
72c8ce906bSAlexander Hansen        }
73c8ce906bSAlexander Hansen      ]
74c8ce906bSAlexander Hansen    },
75c8ce906bSAlexander Hansen    {
76c8ce906bSAlexander Hansen      "group": "unrelated",
77c8ce906bSAlexander Hansen      "members": [
78c8ce906bSAlexander Hansen        {
79c8ce906bSAlexander Hansen          "Name": "rear_id",
80c8ce906bSAlexander Hansen          "Action": "On"
81c8ce906bSAlexander Hansen        }
82c8ce906bSAlexander Hansen      ]
83c8ce906bSAlexander Hansen    }
84c8ce906bSAlexander Hansen  ]
85c8ce906bSAlexander Hansen}
86c8ce906bSAlexander Hansen```
87c8ce906bSAlexander Hansen
882099d9f5SAlexander Hansen### Configuration Example (JSON)
89bdbfcde1SAlexander Hansen
90bdbfcde1SAlexander HansenThis is our configuration file. It describes 2 LEDs for the
91bdbfcde1SAlexander Hansen'_enclosure_identify_' group, with their respective states and duty cycles.
92bdbfcde1SAlexander Hansen
93d30c9d37SGeorge Liu```json
94bdbfcde1SAlexander Hansen{
95bdbfcde1SAlexander Hansen  "leds": [
96bdbfcde1SAlexander Hansen    {
97bdbfcde1SAlexander Hansen      "group": "enclosure_identify",
98bdbfcde1SAlexander Hansen      "members": [
99bdbfcde1SAlexander Hansen        {
100bdbfcde1SAlexander Hansen          "Name": "pca955x_front_sys_id0",
101bdbfcde1SAlexander Hansen          "Action": "On",
102bdbfcde1SAlexander Hansen          "DutyOn": 50,
103bdbfcde1SAlexander Hansen          "Period": 0,
104bdbfcde1SAlexander Hansen          "Priority": "Blink"
105bdbfcde1SAlexander Hansen        },
106bdbfcde1SAlexander Hansen        {
107bdbfcde1SAlexander Hansen          "Name": "led_rear_enc_id0",
108bdbfcde1SAlexander Hansen          "Action": "On",
109bdbfcde1SAlexander Hansen          "DutyOn": 50,
110bdbfcde1SAlexander Hansen          "Period": 0,
111bdbfcde1SAlexander Hansen          "Priority": "Blink"
112bdbfcde1SAlexander Hansen        }
113bdbfcde1SAlexander Hansen      ]
114bdbfcde1SAlexander Hansen    }
115bdbfcde1SAlexander Hansen  ]
116bdbfcde1SAlexander Hansen}
117bdbfcde1SAlexander Hansen```
118bdbfcde1SAlexander Hansen
119bdbfcde1SAlexander HansenThen start the program with
120bdbfcde1SAlexander Hansen
121d30c9d37SGeorge Liu```text
122deab0fccSGeorge Liu~# ./phosphor-led-manager --config example.json
123bdbfcde1SAlexander Hansen```
124bdbfcde1SAlexander Hansen
125bdbfcde1SAlexander Hansen## Dbus interface
126bdbfcde1SAlexander Hansen
127bdbfcde1SAlexander HansenWhen starting the program, our LED group shows up on dbus. Usually there will be
128bdbfcde1SAlexander Hansenmany more groups.
129bdbfcde1SAlexander Hansen
130d30c9d37SGeorge Liu```text
131bdbfcde1SAlexander Hansen$ busctl tree xyz.openbmc_project.LED.GroupManager
132bdbfcde1SAlexander Hansen`- /xyz
133bdbfcde1SAlexander Hansen  `- /xyz/openbmc_project
134bdbfcde1SAlexander Hansen    `- /xyz/openbmc_project/led
135bdbfcde1SAlexander Hansen      `- /xyz/openbmc_project/led/groups
136bdbfcde1SAlexander Hansen        `- /xyz/openbmc_project/led/groups/enclosure_identify
137bdbfcde1SAlexander Hansen
138bdbfcde1SAlexander Hansen
139bdbfcde1SAlexander Hansen$ busctl introspect xyz.openbmc_project.LED.GroupManager /xyz/openbmc_project/led/groups/enclosure_identify
140bdbfcde1SAlexander HansenNAME                                TYPE      SIGNATURE RESULT/VALUE FLAGS
141bdbfcde1SAlexander Hansen...
142bdbfcde1SAlexander Hansenxyz.openbmc_project.Led.Group       interface -         -            -
143bdbfcde1SAlexander Hansen.Asserted                           property  b         false        emits-change writable
144bdbfcde1SAlexander Hansen```
145bdbfcde1SAlexander Hansen
146bdbfcde1SAlexander HansenIn the above output, the usual org.freedesktop.\* interfaces have been removed
147bdbfcde1SAlexander Hansento keep it readable.
148bdbfcde1SAlexander Hansen
149bdbfcde1SAlexander HansenWe can now drive the entire group by setting it's 'Asserted' property on dbus.
150bdbfcde1SAlexander Hansen
151d30c9d37SGeorge Liu```text
152bdbfcde1SAlexander Hansen$ busctl set-property \
153bdbfcde1SAlexander Hansenxyz.openbmc_project.LED.GroupManager \
154bdbfcde1SAlexander Hansen/xyz/openbmc_project/led/groups/enclosure_identify \
155bdbfcde1SAlexander Hansenxyz.openbmc_project.Led.Group Asserted b true
156bdbfcde1SAlexander Hansen```
157bdbfcde1SAlexander Hansen
158bdbfcde1SAlexander HansenThe program can then use the _xyz.openbmc_project.Led.Physical_ dbus interface
159bdbfcde1SAlexander Hansenexposed by _phosphor-led-sysfs_ to set each LED state.
160bdbfcde1SAlexander Hansen
161bdbfcde1SAlexander Hansen## How to Build
162bdbfcde1SAlexander Hansen
163d30c9d37SGeorge Liu```text
164bdbfcde1SAlexander Hansenmeson setup build
165bdbfcde1SAlexander Hansencd build
166bdbfcde1SAlexander Hansenninja
167bdbfcde1SAlexander Hansen```
168