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