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

相關文章
相關標籤/搜索