13859024 发表于 2016-5-2 13:46:41

给安卓添加红外遥控器

本帖最后由 13859024 于 2017-8-18 10:56 编辑

我们都知道OrangePI有红外接收,但是没有一个指导的文档来教我们怎么去使用它,这个帖子将教你怎么去使用它。
首先你需要一个已经root了的安卓系统,我用的是这个:http://www.orangepi.cn/orangepibbscn/forum.php?mod=viewthread&tid=57&extra=page%3D1
然后需要一个终端模拟器例如安卓终端、ssh客户端等,以及最好有一个支持挂载系统文件夹为读写的文件管理器例如MT管理器、RE管理器等,或者你使用如下的命令挂载文件系统。
mount -o remount,rw /system现在打开终端模拟器并输入以下代码:
su这个将使终端模拟器得到root。首先我们来修改遥控器的配置文件。打开你的文件管理器并进入/system/usr/keylayout挂载成读写,更改此目录下的sunxi-ir.kl成sunxi-ir.kl.bak以做备用及参照。你也可以在终端里执行如下命令实现上面的步骤:
mount -o remount,rw /system
mv /system/usr/keylayout/sunxi-ir.kl /system/usr/keylayout/sunxi-ir.kl.bak然后在文件管理器里创建一个新的配置文件并命名为sunxi-ir.kl或执行如下命令:
mount -o remount,rw /system
echo new > /system/usr/keylayout/sunxi-ir.kl接下来要重新加载红外驱动以便更改配置。终端下执行如下命令:注: 建议重启,似乎这样能正常点。重启后记得做前两步。
rmmod sunxi_ir_rx
insmod /vendor/modules/sunxi-ir-rx.ko然后需要为遥控器添加配置文件,现在配置文件是空的。先执行如下命令获取键代码:
getevent出现如下信息:root@dolphin-fvd-p1:/ # getevent
add device 1: /dev/input/event6
name:   "sunxi-ir"
add device 2: /dev/input/event7
name:   "Virtual.Acc"
could not get driver version for /dev/input/js0, Invalid argument
add device 3: /dev/input/event5
name:   "Logitech USB Optical Mouse"
could not get driver version for /dev/input/mouse1, Not a typewriter
add device 4: /dev/input/event4
name:   "USB USB Keykoard"
add device 5: /dev/input/event3
name:   "USB USB Keykoard"
add device 6: /dev/input/event2
name:   "sunxi-ths"
add device 7: /dev/input/event1
name:   "sunxi-gpiokey"
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 8: /dev/input/event0
name:   "vmouse"
could not get driver version for /dev/input/mice, Not a typewriter
/dev/input/event3: 0004 0004 00070028
/dev/input/event3: 0001 001c 00000000
/dev/input/event3: 0000 0000 00000000
/dev/input/event6: 0001 0012 00000001
/dev/input/event6: 0000 0000 00000000
^@/dev/input/event6: 0001 0012 00000000
/dev/input/event6: 0000 0000 00000000
/dev/input/event6: 0001 000b 00000001可以看到开始两行有“add device 1: /dev/input/event6”和名字“sunxi-ir”,这告诉我们红外接收是event6,接下来不要对鼠标键盘进行操作,否则会数次调试信息干扰获取红外的键代码。如果按下遥控器上某个按键就会有调试输出像如下代码那样:
/dev/input/event6: 0001 0012 00000001
/dev/input/event6: 0000 0000 00000000
需要的键代码是第一行的第二组数字0012但是这组数字是十六进制的,要把它需要转换成十进制,我使用的是这个在线转换16进制到10进制的工具 0012转换成十进制就是18,然后你要把他们记下来继续调试,调试结束按Ctrl-C来停止getevent。调试完毕后在文件管理器里打开之前创建的 /system/usr/keylayout/sunxi-ir.kl (记得先确认是否挂载成读写再去编辑它)以及添加遥控器配置进去。配置文件格式是:key "键代码" “安卓命令” (可参照之前备份的sunxi-ir.kl.bak)。
key    18POWER WAKE
key    19MUTE
key    14MEDIA_STOP
key    31MEDIA_PLAY
key    30MEDIA_PAUSE
key    15MEDIA_PREVIOUS
key    26MEDIA_NEXT
key    11DPAD_UP
key    21DPAD_DOWN
key    24DPAD_LEFT
key    12DPAD_RIGHT
key    22ENTER
key    13BACK
key    25VOLUME_UP
key    29VOLUME_DOWN上面列出的是我用的键代码。然后保存这个配置文件并重新加载驱动来应用新的配置文件即可。不过建议重启。
rmmod sunxi_ir_rx
insmod /vendor/modules/sunxi-ir-rx.ko如果没什么错误你的遥控器已经开始工作了。
下面说说我遇到的一个小问题:
我在添加配置文件并修改好重新配置加载驱动后发现遥控器并未工作,研究一番后发现键代码格式不对,对比/system/usr/keylayout下其他配置文件发现key与键代码与安卓命令之间的空格数目不一样,结果把几个空格对应加上并重新加载驱动遥控器才正常工作。


chovan 发表于 2016-6-22 05:39:45

感谢教程。

prince 发表于 2017-3-3 15:33:00

是NEC的编码吗 还是其他的 我这获取不了遥控输入事件
页: [1]
查看完整版本: 给安卓添加红外遥控器