chwhsen 发表于 2019-10-3 18:04:43

聊一聊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,并且开启呼吸效果。
以上。

shunboy 发表于 2019-10-3 18:06:12

这个论坛都是我的小号,不信我等下换个号再跟你说这句话,待会我再换一个

AC你好 发表于 2019-10-3 23:23:23

厉害了,大佬解决下x3p状态未知错误的问题呗

xiaobenysq 发表于 2019-10-3 23:53:00

看着很牛的样子,先赞再研究

skys2590 发表于 2019-10-3 23:57:11

看着很牛的样子,但是还是蒙的一B

zsyg 发表于 2019-10-4 00:57:21

利害了,学习学习

tymfl 发表于 2019-10-4 01:10:21

感谢分享 学习了

wangzhuok 发表于 2019-10-4 05:19:39

感谢,学习了!!!!

i000 发表于 2019-10-4 06:08:52

厉害 大佬
页: [1] 2 3 4 5 6 7 8
查看完整版本: 聊一聊x3p的LED控制机制