Cubieboard自带的红外接收(IR)测试成功

首先,你要本身有编译sun4i-ir.ko驱动,不过好像默认编译就带了这个驱动,因此,大家用的各个版本的内核应该都已经有驱动了,不过不必定自动加载了的。本身lsmod查看一下有木有,若是木有,就去驱动目录下insmod一下(insmod /lib/modules/3.0.57+(换3.0.57+为你的内核版本)/kernel/drivers/input/keyboard/sun4i-ir.ko)

先看看驱动信息,和被加载的位置:
未命名1.jpg 

未命名2.jpg 

若是无误,那就能够直接使用了~
要强调的是:请使用家里的电视机遥控器来测试,由于我试过空调遥控器,由于频率不对,接收不到,彻底没反应。
未命名3.jpg 
先看看红外接收设备被加载在哪一个位置,它实际上是被当作键盘设备来加载的,当接收到信息的时候就会产生系统事件,因此咱们只要查看这个设备产生的事件就行了。嗯,是input1,经测试,该事件的系统路径应该在/dev/input/event1

如今咱们直接来在命令行里查看接收到的信息被解码后的数据,由于直接查看的话,一堆二进制0101在命令行里展现出来就是乱码,因此我使用hexdump将其转换为16进制查看。
未命名4.jpg 
看到了吧,收到的信息就是这些,你买个遥控器,把每个键的信息记录下来以后,就能够写程序监听这些信号,实现遥控板操控CB了,哈哈

最后解释一下我猜想的 信号解读,好比:
00003f0 0b7f 0000 312b 0007 0000 0000 0000 0000
0000400 0b7f 0000 861b 000a 0001 005b 0001 0000
0000410 0b7f 0000 8621 000a 0000 0000 0000 0000
0000420 0b80 0000 a199 0000 0001 005b 0000 0000
0000430 0b80 0000 a19e 0000 0000 0000 0000 0000
0000440 0b80 0000 d641 0005 0001 005b 0001 0000
0000450 0b80 0000 d646 0005 0000 0000 0000 0000
0000460 0b80 0000 502c 000b 0001 005b 0000 0000
0000470 0b80 0000 5031 000b 0000 0000 0000 0000
0000480 0b81 0000 6b30 000b 0001 005b 0001 0000
0000490 0b81 0000 6b36 000b 0000 0000 0000 0000
00004a0 0b82 0000 8c76 0001 0001 005b 0000 0000
00004b0 0b82 0000 8c7b 0001 0000 0000 0000 0000
00004c0 0b82 0000 6927 0009 0001 005b 0001 0000
00004d0 0b82 0000 692c 0009 0000 0000 0000 0000
00004e0 0b82 0000 d320 000e 0001 005b 0000 0000
00004f0 0b82 0000 d325 000e 0000 0000 0000 0000
0000500 0b84 0000 6dc5 0005 0001 005b 0001 0000
0000510 0b84 0000 6dcb 0005 0000 0000 0000 0000
0000520 0b84 0000 dbd7 000a 0001 005b 0000 0000
0000530 0b84 0000 dbdc 000a 0000 0000 0000 0000

这是我反复按下和放开同一个键获得的信息,首先,能够确认的是,当你按下一个键,会产生一组信号,当你的红外移出IR的接收范围或者放开按键,又会产生一组信号。
我来截取其中4组信号来分析:
00004c0 0b82 0000 6927 0009 0001 005b 0001 0000  #这两行是第1次按下时产生的
00004d0 0b82 0000 692c 0009 0000 0000 0000 0000
00004e0 0b82 0000 d320 000e 0001 005b 0000 0000  
#这两行是第1次放开时产生的
00004f0 0b82 0000 d325 000e 0000 0000 0000 0000
0000500 0b84 0000 6dc5 0005 0001 005b 0001 0000
  #这两行是第2次按下时产生的
0000510 0b84 0000 6dcb 0005 0000 0000 0000 0000
0000520 0b84 0000 dbd7 000a 0001 005b 0000 0000
  #这两行是第2次放开时产生的
0000530 0b84 0000 dbdc 000a 0000 0000 0000 0000

首先抛开第一列(红色部分),那是hexdump打印出的解码后的信号的内存地址。

第二列,应该是每次按下和放开是相同的值,第二次按下就会+2,那咱们能够理解为每一次按键产生信号的自增ID,若是多个遥控器在给他发信号,你接收信号能够不会乱,由于某次按下和放开的值始终相同。

第3列,不清楚,多是第二列的扩展,或者是第4列的开始(前半部分)

第四、5列,看不懂了。。都是同一个键。。这些变化的数据确定和键的值无关

每次按下同一个键的时候,不变的部分,就是后面4列了。并且我按完全部的键,每一组(两行)的第二行后4列始终是0.
那么是否是能够理解为,每一组第一行的数据后4列:

0001 005b 0001 0000  表示我遥控器上的xx键被按下  
0001 005b 0000 0000  表示我遥控器上的xx被按放开
0001 005b表明个人键的标示符,0001 0000 表示被按下 0000 0000 表示被放开
再进一步想,0x10000换成十进制就是65536 。应该没有人会用65536 表示按下 而后 0表示放开吧?
因此后面4个0应该也不用管,可能有其余用途把,那么0001就应该表示被按下, 0000表示放开。

猜解完毕!

2013-5-4更新:键的标示符也是只用1列数据表示,好比上面的005b ,而前面的0001是无关数据也就是说,005b 0001表示5b这个键按下 005b 0000表示它被放开

若有疑问请参考hipboi大神的答复(for Android):
http://cn.cubieboard.org/forum.p ... ad&tid=100#post_415


同时,我也上传两个驱动,以防万一有人没有这个驱动:
 sun4i-ir for 3.0.57 .zip (3.63 KB, 下载次数: 114)   for kernel 3.0.57+ only
 sun4i-ir for 3.0.57.zip (36.59 KB, 下载次数: 107)   for kernel 3.0.57 only
提示:版本不符的就不要下了,版本符合的,下了也不必定行,哈哈(由于module的全版本号是:vermagic:       3.0.57+ mod_unload modversions ARMv7 ,若是你查看系统其余驱动信息带了 PREEMPT或是其余字眼,反正只要与这串字符有差别,你就无法用,即便相同,也有可能报一些莫名其妙的错,不过不是驱动的问题,仍是版本的问题)
因此,若是你的系统没有自带,仍是本身编译吧。


后续步骤就是安装lirc,但我装了没配置成功。
这里只是抛砖引玉,但愿各位有所发展,但愿有能人能把 lirc 搞定就,而后给你们参考~

2013-5-4更新:lirc已经有人测试成功了,我也测过,可行,只是貌似仍是不太完美。
地址见此处:http://cn.cubieboard.org/forum.php?mod=viewthread&tid=281


原文做者:WindLand
原文连接:http://forum.cubietech.com/forum.php?mod=viewthread&tid=133&extra=page%3D9php

相关文章
相关标签/搜索