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

示例:用户首先写入 multi_intensity 文件,其中包含实现多色 LED 组特定颜色输出所需的每个 LED 的亮度级别。

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

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

红色 -

强度 = 138 最大亮度 = 255

绿色 -

强度 = 43 最大亮度 = 255

蓝色 -

强度 = 226 最大亮度 = 255

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

cat /sys/class/leds/multicolor:status/max_brightness 255 echo 128 > /sys/class/leds/multicolor:status/brightness

调整后的红色值 = 128 * 138/255 = 69 调整后的绿色值 = 128 * 43/255 = 21 调整后的蓝色值 = 128 * 226/255 = 113

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

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