Linux内核红外遥控子系统-LIRC

Linux内核红外遥控子系统-LIRC

ID:38581458

大小:173.50 KB

页数:13页

时间:2019-06-15

Linux内核红外遥控子系统-LIRC_第1页
Linux内核红外遥控子系统-LIRC_第2页
Linux内核红外遥控子系统-LIRC_第3页
Linux内核红外遥控子系统-LIRC_第4页
Linux内核红外遥控子系统-LIRC_第5页
资源描述:

《Linux内核红外遥控子系统-LIRC》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、LinuxInfraredRemoteControlSystem修订历史版本日期作者描述0.12011-10-12杜昌彬初稿1.红外遥控基础知识1.1红外遥控简介红外遥控协议有有很多,比如RC-5,RC-6,NEC,SIRC等,不过协议都比较简单,基本上都是以脉冲宽度或脉冲间隔来编码。当遥控器上按下按键时,遥控器逻辑单元会产生一个完整的逻辑脉冲波形,这个波形上包含了遥控命令的信息,他是红外传输的基带信号。这个波形被送到遥控器的调制单元,经调制单元调制成高频的红外电磁波信号,并由发光二极管发射出去

2、。如下图的左边模块。基带信号红外遥控的信号的产生和接收红外电磁波信号现在一般使用一体化接收头接收,接收头同时完成了信号的解调和放大,其输出信号就是红外的基带脉冲信号。解调后的信号可直接送入信号处理器中由处理器对脉冲波形进行解码,也就是将经编码的脉冲信号翻译成逻辑数字。根据不同的控制协议,解码方式不同。红外接收头,一跟线用于输出脉冲信号,其他两根是电源线和地线1.2红外遥控协议下面已sony的SIRC协议为列说明。编码SIRC协议使用脉冲宽度对每一比特位进行编码,编码规则如下:SIRC协议编码首先

3、,每一个脉冲后跟一个固定宽为600微秒的间隔,而每一个脉冲便是一个逻辑数字,并由脉冲的宽度决定是0还是1:脉冲宽度1200微秒表示逻辑1,宽度600微秒表示逻辑0.幀格式当按下遥控器上的按键时,遥控器会发送一个命令信号,这个信号就是一个幀,它包含了命令字段和地址(设备)字段,以及扩展字段。当按住按键不放时,遥控器会不断的发送这一命令信号,直到松开。SIRC协议的幀格式有12位、15位、20位三种,如下所示:一个幀以一个起始标志(图中的红色)开始,它是一个2400微秒的脉冲并跟一个间隔。之后是7字

4、节的命令字段(图中的橙色),这个字段用于识别按下了遥控器上的哪个按键;然后是地址字段(图中的蓝色),用于识别控制的是什么类型的设备;对于20位宽格式,还有一个扩展字段,用于传输其他信息。址值和设备类型映射表一种命令值和具体按键的映射表示例:Sony电视遥控器上“音量-”按键对应的脉冲波形对于脉冲波形的解码,一般用一个专门的硬件单元完成,也可以在CPU中利用如GPIO等检测接收器输出的波形然后使用软件的方式解码,但这种方式效率显然很低。1.Linux对红外遥控的支持Linux上通过LIRC子系统对

5、红外控制提供支持,它包含几个部分:lirc核心、协议原始脉冲解码器、按键映射表、红外输入设备驱动。LIRC代码在:drivers/media/IRLinuxinput系统原始脉冲解码器按键映射表LIRC核心红外输入设备驱动2.1.协议原始脉冲解码器模块解码器模块实现用软件的方法对原始脉冲进行解码。解码器用一个ir_raw_handler结构表示。structir_raw_handler{structlist_headlist;int(*decode)(structinput_devinput_d

6、ev,structir_raw_eventevent);/*解码函数*/int(*raw_register)(structinput_devinput_dev);/*注册函数*/int(*raw_unregister)(structinput_devinput_dev);/*卸载函数*/};解码器通过注册和卸载函数:intir_raw_handler_register(structir_raw_handler*ir_raw_handler)voidir_raw_handler_unregiste

7、r(structir_raw_handler*ir_raw_handler)当注册解码器时,ir_raw_handler的raw_register函数被调用,所以可在其进行一些解码器初始化工作。相应的,卸载时raw_unregister函数被调用。所有注册的解码器放在一个全局链表ir_raw_handler_list中,lirc会便利每个解码器对报告的波形进行解码,注意,此时当任何一个解码器返回一个错误,后面的解码器不会被执行,所以不要将不使用的解码器模块同时加载到内核中。解码器的主体就是dec

8、ode函数,lirc核心会将驱动报告的每个脉冲一次一次的传递到decode函数,而decode函数的实现就是一个状态机,每一次输入导致进入下一状态,直到一次解码完成,然后返回起始状态进行下次解码。再LIRC中,每个脉冲(包括脉冲间隔)用一个ir_raw_event结构表示:structir_raw_event{unsignedpulse:1;/*是脉冲还是间隔*/unsignedduration:31;/*宽度,以ns为单位,一个0ns的脉冲表示重新开始解码*/};lirc中对于脉冲宽度的比较使

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。