聊一聊x3p的LED控制机制
本帖最后由 xiaobaikeji 于 2019-10-6 10:43 编辑之前已经有大佬给出了通过修改寄存器来控制Led灯效的方案(猫盘群晖&&&猫盘x3p LED彩色呼吸灯都搞定了),但是脚本过于硬核,恕本人接受不能,所以我今天想来聊一聊一种比较亲民的Led控制方案。
首先X3p本身是通过以下三个文件和一个文件夹来控制led灯效的,分别是
/opt/bin/led_recv我们一个一个说
/opt/bin/led_recv这是一个led恢复脚本,不管你把led修改的多么花里胡哨,执行这个脚本都会恢复到常绿最高亮度的状态。
/opt/bin/ledstatus.sh这个脚本会开机自启,然后每秒检测一次系统联网状态,但是无论如何,他都会调用之前的led_recv脚本,把led恢复到初始状态,让你的努力付之一炬。
这个文件内容如下
#!/bin/sh
while [ 1 ];do
ifconfig eth0 | grep RUNNING
if [ $? -eq 0 ] ; then
rm -rf /tmp/noeth.flag
else
touch /tmp/noeth.flag
fi
#/opt/bin/led_recv <----------
sleep 1
done
其中带箭头的一行已经被我注释掉了,哈哈哈哈哈哈。
/sys/class/leds/这是一个文件夹,下面是四个文件夹,分别控制的R(红);G(绿);B(蓝);三灯的状态但是他们不以rgb或者红绿蓝来命名,而是分别为C1(R),C2(G),C3(B)。
在每个文件下下面,还有几个文件控制他们的状态,它们分别是
blink 是否开启呼吸灯,以及设定呼吸灯模式也就是说当blink为0时,就会以brightness设定的亮度常量
当blink值为1时,就会以led_time规定的循环时间来呼吸,最亮依然是brightness设定的亮度。
/opt/conf/gpio.ini这里是所有gpio的控制中心,自然也把led包括进来了,这个文件里向我们规定和解释了一些东西,我们一点一点来看
第一部分:
errorled=c1 报错灯:红灯
normalled=c2 正常状态:绿灯
upgradeled=c3 升级状态:蓝色的灯(平时没遇到过)
bootingled=c3 不知道是个啥,也是蓝色的灯
接着是两个函数,分别是设定亮度,和是否循环呼吸的。
set_led()
{
echo $2 > /sys/class/leds/$1/brightness
echo $3 > /sys/class/leds/$1/blink
}
set_ledstep()
{
if [ "$2"x = "0"x ] ; then
echo 2 1 2 1 > /sys/class/leds/$1/led_time
else
echo 0 0 0 0 > /sys/class/leds/$1/led_time
fi
}
这两个函数都有三个参数,
$1 颜色(C1/C2/C3)
$2 亮度(0-255)
$3 循环(0/1)最后是几组预设方案
bootingled_off() #熄灭蓝色的灯
{
$(set_led"$bootingled" "0" "0")
}
normalled_off() #熄灭绿灯
{
$(set_led"$normalled" "0" "0")
}
errorled_off() #熄灭红灯
{
$(set_led"$errorled" "0" "0")
}
real_ledswitch_close() #熄灭所有的灯
{
bootingled_off
normalled_off
errorled_off
}
bootingled_blink() #只亮蓝色的灯
{
normalled_off
errorled_off
$(set_led"$bootingled" "8" "1")
$(set_ledstep"$bootingled" "0")
}
networkerror_blink() #网络故障灯
{
bootingled_off
normalled_off
$(set_led"$errorled" "8" "1")
}
diskerror_light() #硬盘故障灯
{
bootingled_off
normalled_off
$(set_led"$errorled" "8" "0")
}
normalled_light() #正常模式亮绿灯
{
bootingled_off
errorled_off
$(set_led"$normalled" "8" "0")
}
writeled_blink() #数据读写,绿色呼吸灯
{
bootingled_off
errorled_off
$(set_led"$normalled" "8" "1")
$(set_ledstep"$normalled" "0")
}
default_led_blink() #默认绿灯循环
{
bootingled_off
errorled_off
$(set_ledstep"$normalled" "1")
$(set_led"$normalled" "8" "1")
}
我的文件有所改动,将亮度调成了8,原来的256晚上能把眼睛闪瞎咯
我们选一个来解释,其他的都大致差不多
networkerror_blink()
{
bootingled_off
normalled_off
$(set_led"$errorled" "8" "1")从名字能看出来应该是网络故障灯,这时他会关闭另外两种效果灯,只留下报错灯亮着,同时调用上面的函数,酱红灯设置为亮度==8,并且开启呼吸效果。
以上。
这个论坛都是我的小号,不信我等下换个号再跟你说这句话,待会我再换一个 厉害了,大佬解决下x3p状态未知错误的问题呗 看着很牛的样子,先赞再研究 看着很牛的样子,但是还是蒙的一B 利害了,学习学习 感谢分享 学习了 感谢,学习了!!!! 厉害 大佬