一直以来都没有一个好的习惯,学过的东西用过之后不久就忘记了,最近决定开始把之前遇到的一些问题写到这里,一方面是自己备忘,另一方面也希望能够帮助到大家,起码给各位有一点参考的价值,吾心足矣,废话少说今天就从前段时间添加红外遥控器说起吧。
今天先说说驱动层的添加流程,正好前段时间写了一个技术分享的文档直接贴过来了。
一,说明:
通常遥控器都会用唯一的一个客户码来区分不同的客户,但是当一个遥控器的键不够用或者客户更换客户码的时候就需要添加客户码或者同时支持两个或更多客户码。
二,红外按键编码格式
遥控发射器的按键信息,一般采用红外光传输,其编码一般采用东芝TC9012编码规范:
载波:37.9KHz 占空比:1/3
头码(引导码):4.5ms(H)+ 4.5ms(L)
码0:0.56ms(H)+ 0.565ms(L)
码1:0.56ms(H)+ 1.69ms(L)
结束位:0.56ms(H)
单键码:引导码+8位客户码+8位客户码+8位数据码+8位数据码反码+结束位,长度:108ms
连续键码(发简码):4.5ms(H)+4.5ms(L)+ C0(码1反码)+结束位,简码重复周期:108ms。详见下图示:
三,添加驱动层
当遥控器的红外信号发出后,首先接到信号的是ir的驱动程序,ir设备对应的驱动程序\kernel\linux\linux-3.10.0\arch\arm\bsp-realtek\mach-rtd294x\ir\irrc.c
在这个文件的examine_ir_avail方法中检测收到的ir信号是否有效,这里会判断ir的协议和客户码是否支持,如果不是支持的协议和客户码就会直接将ir信号忽略。因此添加新的客户码时要在这里添加else if(ir_protocol == RAW_C03 && (*regValue