A20红外遥控器与Android功能的适配
2014-05-10 15:02
288 查看
作者: Sam (甄峰) sam_code@hotmail.com
转载自http://blog.sina.com.cn/s/blog_602f87700101he9v.html
最近需要在全志A20上添加红外遥控器。并使其中一些红外按键和例如"Home","Menu",音量增加降低等功能联系起来。
Sam之前只知道Android在 /system/usr/keylayout/ 下会有.kl文件。
其中注明了底层键值和Android上层的功能联系起来。
例如:
key 64 BACK WAKE_DROPPED
key 4 MENU WAKE_DROPPED
key 85 DPAD_CENTER WAKE_DROPPED
key 22 DPAD_DOWN WAKE_DROPPED
key 70 DPAD_UP WAKE_DROPPED
key 71 DPAD_LEFT WAKE_DROPPED
key 21 DPAD_RIGHT WAKE_DROPPED
key 20 VOLUME_UP WAKE
key 16 VOLUME_DOWN WAKE
key 92 MUTE WAKE
#key 24 POWER WAKE
key 13 MOUSE WAKE
#key 66 PROG_RED WAKE
key 66 BUTTON_16 WAKE
#key 69 PROG_GREEN WAKE
key 155 PROG_GREEN WAKE
key 104 PROG_YELLOW WAKE
key 98 PROG_BLUE WAKE
key 9 SETTINGS WAKE
key 152 HOME WAKE
key 90 0 WAKE
key 26 1 WAKE
key 1 2 WAKE
key 69 3 WAKE
key 89 4 WAKE
key 77 5 WAKE
key 197 6 WAKE
key 82 7 WAKE
key 83 8 WAKE
key 65 9 WAKE
这其中,WAKE 表示唤醒(激活屏幕)并发送请求
WAKE_DROPPED 表示唤醒(激活屏幕)而不发送请求
底层Driver应该有个列表来对应红外按键和KeyCode。
当前我们就从底层开始,一步步把红外遥控器的Firmware Key Code与 Android 底层 Input Device中读取的Code 以及 Android 上层功能联系起来。
0. 让红外遥控器被A20所识别:
红外遥控器有很多,他们针对不同的设备,设备如何知道哪个红外遥控器发送的红外码是传给它的呢?
我们知道,NEC码有客户码。 当红外信号中的客户码和设备所需的客户码相同时,则设备认为此码是发给它的。
这个地址码在:
A20-Homlet-V1.0_ss/lichee/linux-3.3/drivers/input/keyboard/ir-keymap.h
因为Sam所用遥控器用户(系统)码为:0x7F80.
所以:
#define IR_ADDR_CODE (0x7f80)
1. 红外遥控器 Firmware Key Code 与 Android Linux Input Device Key Code 的联系:
1.1: 寻找红外Driver:
#lsmod
可以看到sun7i-ir. 通过它,Sam找到 Linux Kernel 中 driver/input/keyboard/sun7i-ir.c
1.2: Firmware中的红外码:
例如:某键发送码:AC 53
1.3: Driver 中的处理:
在中端处理程序中,Driver得到码值: ir_code. 并利用ir_keycodes列表中的对应项作为发给Input 子系统的KeyCode。
input_report_key(ir_dev, ir_keycodes[(ir_code>>16)&0xff], 0);
input_sync(ir_dev);
所以:按键 AC 53. 则发送: ir_keycodes[0x53] . 这个值为83. 也就是说:它向Input 子系统中发送的KeyCode= 83。
2. Input 子系统的KeyCode与Android功能的对应:
代码稍后分析:
只需要看kl文件中:
83对应的是 8。 则说明按下这个键后。 Android认为有人按下了8 这个Key。
如需要修改,可以修改:
A20-Homlet-V1.0_ss/android/device/softwinner/sugar-xbh_bst/sun7i-ir.kl
最终,这个文件会被copy到Image中,烧入系统;
/system/usr/keylayout/sun7i-ir.kl
转载自http://blog.sina.com.cn/s/blog_602f87700101he9v.html
最近需要在全志A20上添加红外遥控器。并使其中一些红外按键和例如"Home","Menu",音量增加降低等功能联系起来。
Sam之前只知道Android在 /system/usr/keylayout/ 下会有.kl文件。
其中注明了底层键值和Android上层的功能联系起来。
例如:
key 64 BACK WAKE_DROPPED
key 4 MENU WAKE_DROPPED
key 85 DPAD_CENTER WAKE_DROPPED
key 22 DPAD_DOWN WAKE_DROPPED
key 70 DPAD_UP WAKE_DROPPED
key 71 DPAD_LEFT WAKE_DROPPED
key 21 DPAD_RIGHT WAKE_DROPPED
key 20 VOLUME_UP WAKE
key 16 VOLUME_DOWN WAKE
key 92 MUTE WAKE
#key 24 POWER WAKE
key 13 MOUSE WAKE
#key 66 PROG_RED WAKE
key 66 BUTTON_16 WAKE
#key 69 PROG_GREEN WAKE
key 155 PROG_GREEN WAKE
key 104 PROG_YELLOW WAKE
key 98 PROG_BLUE WAKE
key 9 SETTINGS WAKE
key 152 HOME WAKE
key 90 0 WAKE
key 26 1 WAKE
key 1 2 WAKE
key 69 3 WAKE
key 89 4 WAKE
key 77 5 WAKE
key 197 6 WAKE
key 82 7 WAKE
key 83 8 WAKE
key 65 9 WAKE
这其中,WAKE 表示唤醒(激活屏幕)并发送请求
WAKE_DROPPED 表示唤醒(激活屏幕)而不发送请求
底层Driver应该有个列表来对应红外按键和KeyCode。
当前我们就从底层开始,一步步把红外遥控器的Firmware Key Code与 Android 底层 Input Device中读取的Code 以及 Android 上层功能联系起来。
0. 让红外遥控器被A20所识别:
红外遥控器有很多,他们针对不同的设备,设备如何知道哪个红外遥控器发送的红外码是传给它的呢?
我们知道,NEC码有客户码。 当红外信号中的客户码和设备所需的客户码相同时,则设备认为此码是发给它的。
这个地址码在:
A20-Homlet-V1.0_ss/lichee/linux-3.3/drivers/input/keyboard/ir-keymap.h
因为Sam所用遥控器用户(系统)码为:0x7F80.
所以:
#define IR_ADDR_CODE (0x7f80)
1. 红外遥控器 Firmware Key Code 与 Android Linux Input Device Key Code 的联系:
1.1: 寻找红外Driver:
#lsmod
可以看到sun7i-ir. 通过它,Sam找到 Linux Kernel 中 driver/input/keyboard/sun7i-ir.c
1.2: Firmware中的红外码:
例如:某键发送码:AC 53
1.3: Driver 中的处理:
在中端处理程序中,Driver得到码值: ir_code. 并利用ir_keycodes列表中的对应项作为发给Input 子系统的KeyCode。
input_report_key(ir_dev, ir_keycodes[(ir_code>>16)&0xff], 0);
input_sync(ir_dev);
所以:按键 AC 53. 则发送: ir_keycodes[0x53] . 这个值为83. 也就是说:它向Input 子系统中发送的KeyCode= 83。
2. Input 子系统的KeyCode与Android功能的对应:
代码稍后分析:
只需要看kl文件中:
83对应的是 8。 则说明按下这个键后。 Android认为有人按下了8 这个Key。
如需要修改,可以修改:
A20-Homlet-V1.0_ss/android/device/softwinner/sugar-xbh_bst/sun7i-ir.kl
最终,这个文件会被copy到Image中,烧入系统;
/system/usr/keylayout/sun7i-ir.kl
相关文章推荐
- A20红外遥控器与Android功能的适配
- Android调用系统相机、相册功能,适配6.0权限获取以及7.0以后获取URI(兼容多版本)
- 【移动开发】Android中强大的适配功能----Fragment(碎片)总结 推荐
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- Android分屏功能,适配及相关问题
- Android 7.0处理系统裁剪功能异常(适配版)
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- Android屏幕适配功能源码
- Android 视频播放适配横竖屏切换功能的实现
- android studio 适配android7.0 android 6.0拍照调用系统裁剪工具实现头像上传功能
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- Unity3d 二维码功能(扫码及相册读取,适配ios与android)
- Android自定义图片选取器,类似微信样式,自带裁剪功能,适配Android7.0
- Android studio升级3.0.1遇到的坑及Android Studio 3.0 新功能解析和旧项目适配
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- Android开启手电筒功能(完美适配Android4x,5x,6x)
- android设置webview的适配比例,setInitialScale 方法神奇的功能
- 说一说 Android开启手电筒功能完美适配Android4x,5x,6x