Linux 下多色 LED 处理

描述

多色类别将单色 LED 分组,并允许控制最终组合颜色的两个方面:色调和亮度。前者通过 multi_intensity 数组文件控制,后者通过 brightness 文件控制。

多色类别控制

多色类别提供将颜色作为数组索引进行分组的文件。这些文件是 led_class 框架创建的 LED 父节点下的子文件。led_class 框架在此文档目录下的 led-class.rst 中有详细说明。

每个彩色 LED 都将索引在 multi_* 文件下。颜色的顺序可以是任意的。可以读取 multi_index 文件以确定颜色名称到索引值的映射。

multi_index 文件是一个数组,它包含在每个 multi_* 数组文件中定义的颜色字符串列表。

multi_intensity 是一个可读写的数组,用于控制各个颜色的强度。必须写入此数组中的所有元素才能更新彩色 LED 强度。

目录布局示例

root:/sys/class/leds/multicolor:status# ls -lR
-rw-r--r--    1 root     root          4096 Oct 19 16:16 brightness
-r--r--r--    1 root     root          4096 Oct 19 16:16 max_brightness
-r--r--r--    1 root     root          4096 Oct 19 16:16 multi_index
-rw-r--r--    1 root     root          4096 Oct 19 16:16 multi_intensity

多色类别亮度控制

每个 LED 的亮度级别是根据彩色 LED 强度设置除以全局 max_brightness 设置,再乘以请求的亮度来计算的。

led_brightness = brightness * multi_intensity/max_brightness

示例:用户首先将每个 LED 的亮度级别写入 multi_intensity 文件,这些级别是多色 LED 组产生特定颜色输出所必需的。

# cat /sys/class/leds/multicolor:status/multi_index
green blue red

# echo 43 226 138 > /sys/class/leds/multicolor:status/multi_intensity

red -
    intensity = 138
    max_brightness = 255
green -
    intensity = 43
    max_brightness = 255
blue -
    intensity = 226
    max_brightness = 255

用户可以通过写入全局 'brightness' 控制来控制该多色 LED 组的亮度。假设 max_brightness 为 255,用户可能希望将 LED 颜色组调暗一半。用户会将值 128 写入全局 brightness 文件,然后写入每个 LED 的值将根据此值进行调整。

# cat /sys/class/leds/multicolor:status/max_brightness
255
# echo 128 > /sys/class/leds/multicolor:status/brightness
adjusted_red_value = 128 * 138/255 = 69
adjusted_green_value = 128 * 43/255 = 21
adjusted_blue_value = 128 * 226/255 = 113

读取全局 brightness 文件将返回彩色 LED 组的当前亮度值。

# cat /sys/class/leds/multicolor:status/brightness
128