led-player中创建了FIFO管道led-control ,通过select函数对led-control管道的读取检测来定时。因为没有程序对led-control进行写入,所以led-control是没数据可以读取的,因此在select函数超时后进入ret < 0 的处理中,也即进入push_leds函数。如果一直没有程序对led-control写入,则每隔period(秒)就会执行一次push_leds函数。
注意:1. push_leds函数中,static step是一个静态变量,在push_leds函数返回后,step的空间还是没有释放的,其值还保存着。
2. type = 0-----跑马灯; type = 1----二进制加法; type为其他值则LED全灭。
3. 当有程序对led-control管道写入时,进入 ret > 0 的处理,从FIFO管道读取数据,每次读取一个字符,存放在buffer[]字符数组中。当读取到 '\n' 字符时,将buffer中第一段字符串(buffer中从第一个字符开始遇到第一个空格为止)转换为整数并赋给type,将第二段字符串转换为 long float类型,并赋给period。 也就是我们可以通过对led-control管道的写入来实现对led-player模式的控制。
就说这么多吧,对于新手来说初看led-player也许会头大的,多百度几下就好了。这里我上传我稍微修改的led-player程序和一个led-typechoose程序,led-typechoose程序能对led-control管道进行写入,如输入命令:led-typechoose type 0 period 0.66 ,则LED将执行跑马灯,时间间隔为0.66s。