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
1. 红外遥控器 Firmware Key Code 与 Android Linux Input Device Key Code 的联系:
#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