CubieBoard博客-HomeCubieTech公司网站

cubie.cc CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 11727|回复: 30

[分享]Cubieboard自带的红外接收(IR)测试成功

[复制链接]

19

主题

9

好友

2497

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
391
金钱
1061
威望
387
买家信用
卖家信用
积分
2497
发表于 2013-2-11 00:46:57 |显示全部楼层
本帖最后由 WindLand 于 2013-5-4 01:38 编辑

首先,你要自己有编译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列的开始(前半部分)

第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, 下载次数: 236)   for kernel 3.0.57+ only
sun4i-ir for 3.0.57.zip (36.59 KB, 下载次数: 208)   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

很久没玩这个了,也没上过线了。如果有需要交流的,欢迎来邮件: leapmusic@QQ邮箱
回复

使用道具 举报

46

主题

21

好友

1万

积分

超级版主

Rank: 8Rank: 8

贡献
3574
金钱
7490
威望
3584
买家信用
卖家信用
积分
19298
发表于 2013-2-20 22:49:27 |显示全部楼层
很好,非常感谢!
回复

使用道具 举报

0

主题

0

好友

335

积分

中级会员

Rank: 3Rank: 3

贡献
54
金钱
172
威望
54
买家信用
卖家信用
积分
335
发表于 2013-3-1 09:16:24 |显示全部楼层
学习中,高手!
回复

使用道具 举报

56

主题

8

好友

5946

积分

一般会员

贡献
1089
金钱
2116
威望
1090
买家信用
卖家信用
积分
5946
发表于 2013-3-26 01:04:28 |显示全部楼层
不错的技术贴
回复

使用道具 举报

0

主题

0

好友

197

积分

注册会员

Rank: 2

贡献
42
金钱
70
威望
42
买家信用
卖家信用
积分
197
发表于 2013-5-21 09:52:22 |显示全部楼层
监听程序应该怎么写呀? 有了例子吗?
回复

使用道具 举报

24

主题

10

好友

1万

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
1921
金钱
3694
威望
1929
买家信用
卖家信用
积分
10024
发表于 2013-5-21 10:23:22 |显示全部楼层
看起来不错
回复

使用道具 举报

19

主题

9

好友

2497

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
391
金钱
1061
威望
387
买家信用
卖家信用
积分
2497
发表于 2013-5-22 10:51:24 |显示全部楼层
sunshine 发表于 2013-5-21 09:52
监听程序应该怎么写呀? 有了例子吗?

推荐使用lirc,帖子底部有链接。
很久没玩这个了,也没上过线了。如果有需要交流的,欢迎来邮件: leapmusic@QQ邮箱
回复

使用道具 举报

38

主题

2

好友

7707

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
1398
金钱
3266
威望
1398
买家信用
卖家信用
积分
7707
发表于 2013-5-22 17:58:28 |显示全部楼层
学习一下
俺的小站:点击--》http://www.heartiot.com/
欢迎来访!
不要一味的索取,饮水要思源,回报社区
回复

使用道具 举报

4

主题

0

好友

1663

积分

金牌会员

Rank: 6Rank: 6

贡献
314
金钱
698
威望
314
买家信用
卖家信用
积分
1663
发表于 2013-7-1 15:11:50 |显示全部楼层
测试了几个遥控器都没信号进来
回复

使用道具 举报

19

主题

9

好友

2497

积分

版主

Rank: 7Rank: 7Rank: 7

贡献
391
金钱
1061
威望
387
买家信用
卖家信用
积分
2497
发表于 2013-7-8 11:32:30 |显示全部楼层
yarshure 发表于 2013-7-1 15:11
测试了几个遥控器都没信号进来

确定是都是电视遥控器?
你用的什么系统?
很久没玩这个了,也没上过线了。如果有需要交流的,欢迎来邮件: leapmusic@QQ邮箱
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|Archiver|手机版|邮件群发|cubie.cc---深刻的嵌入式技术和应用讨论中文社区 ( 粤ICP备13051116号-1  

GMT+8, 2017-11-24 08:15 , Processed in 0.028432 second(s), 16 queries , Apc On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc. | Style by Coxxs

回顶部