A20红外遥控器与Android功能的适配
http://blog.sina.com.cn/s/blog_602f87700101he9v.html
(2013-11-26 10:11:09) 转载▼ 标签: klkeylayouta20it | 分类:Android |
最近需要在全志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 底层 InputDevice中读取的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
更多相关文章
- android input子系统--InputReader EventHub::getevents之mNeedT
- 调用C++底层 Thread & Mutex 的注意事项
- 分享:用 NDK C++做底层开发的Android 浏览器,纯免费,无广告
- Google应用在Android上的Push机制以及C2DM框架的底层实现
- Android:图文解析带你快速了解RxJava的底层原理
- FirefoxOS 系统进程初步分析 底层系统继承自 android
- Android 开机底层优化
- android 遥控器配置
- Linux/Android——输入子系统input_event传递 (二)