Application to manage BMC-owned LEDs using Linux sysfs interfaces

Clone this repo:

Branches

  1. d825f56 clang-format: re-format for clang-19 by Patrick Williams · 3 days ago master
  2. db82c0f clang-format: re-format for clang-18 by Patrick Williams · 4 months ago
  3. 0e157e9 Fix MD040 warnings by George Liu · 5 months ago
  4. a16bef7 meson: remove boost by Alexander Hansen · 5 months ago
  5. 673b981 interfaces: use old dbus encoding by Alexander Hansen · 5 months ago

phosphor-led-sysfs

This project exposes physical LEDs on dbus.

Example

Say we have 'identify' LED in our system, which may be declared in devicetree.

leds {
    compatible = "gpio-leds";

    identify {
        gpios = <&gpio ASPEED_GPIO(S, 6) GPIO_ACTIVE_HIGH>;
    };
};

We can add an LED via the helper program. The main service is then started via dbus-activation.

./add-led-action --path /sys/class/leds/identify

which will expose following dbus objects:

busctl tree xyz.openbmc_project.LED.Controller
`- /xyz
  `- /xyz/openbmc_project
    `- /xyz/openbmc_project/led
      `- /xyz/openbmc_project/led/physical
        `- /xyz/openbmc_project/led/physical/identify

busctl introspect  xyz.openbmc_project.LED.Controller /xyz/openbmc_project/led/physical/identify
NAME                                TYPE      SIGNATURE  RESULT/VALUE                             FLAGS
...
xyz.openbmc_project.Led.Physical    interface -          -                                        -
.Color                              property  s          "xyz.openbmc_project.Led.Physical.Pal... emits-change writable
.DutyOn                             property  y          50                                       emits-change writable
.Period                             property  q          1000                                     emits-change writable
.State                              property  s          "xyz.openbmc_project.Led.Physical.Act... emits-change writable

In the above output, the usual org.freedesktop.* interfaces have been removed to keep it readable.

Example: using the dbus interface

Query the LED State

busctl get-property  xyz.openbmc_project.LED.Controller \
/xyz/openbmc_project/led/physical/identify \
xyz.openbmc_project.Led.Physical State \
s "xyz.openbmc_project.Led.Physical.Action.Off"

Set the LED State

busctl set-property  xyz.openbmc_project.LED.Controller \
/xyz/openbmc_project/led/physical/identify \
xyz.openbmc_project.Led.Physical State s \
"xyz.openbmc_project.Led.Physical.Action.Off"

How to Build

meson setup build
cd build
ninja