最近换了新工作,接触了一些framework。记录一下学习笔记
Android 平台遥控器需要物理按键,把1-9-0的键改成a,b,c,d,e,f,g,h,i,j功能。
思考 点击了一个按钮后究竟发生了什么!先附上网上的一张流程图
首先是Linux内核层上报按键码,我在这里引用简书作者天空汁橙在《Android物理按键输入事件(一)》中所写来描述Linux内核层的操作:
① linux内核通过扫码,将硬件上按键按下电压变换为数字电压并映射到数组下标;
② 通过数组关系转化将按键映射到内核中预定义的键值;
③ 最终linux内核上报给上层的就是这个整型值。
其中,这些上报的值反映在内核\linux-3.10\include\uapi\linux/input.h中。
input.h 部分遥控器按钮
#define KEY_HOME 102
#define KEY_UP 103
#define KEY_PAGEUP 104
#define KEY_LEFT 105
#define KEY_RIGHT 106
#define KEY_END 107
#define KEY_DOWN 108
#define KEY_PAGEDOWN 109
#define KEY_INSERT 110
#define KEY_DELETE 111
#define KEY_MACRO 112
#define KEY_MUTE 113
#define KEY_VOLUMEDOWN 114
如上图所示键扫描码后会在按键布局转换也就是
kl配置文件对应*
把kl文件造找出来,因为我这边已经是编译好的固件 地址如下 仅供参考
workspace\Android7.1\android\device\softwinner\固件名\custom_diff\固件分辨率类型名\sunxi_ir_recv.kl
kl配置文件内存如下(ps:1-9-0按键已经改为a,b,c,d、、)
key 103 DPAD_UP
key 108 DPAD_DOWN
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 28 DPAD_CENTER
key 113 VOLUME_MUTE
key 114 VOLUME_DOWN
key 115 VOLUME_UP
key 102 HOME
key 139 MENU
key 158 BACK
key 141 LYCOO_SETUP
key 2 A
key 3 B
key 4 C
key 5 D
key 6 E
key 7 F
key 8 G
key 9 H
key 10 I
key 11 J
kl文件中,key后面的数字就是kernel上报的按键码,后面的字符标签就是该按键码对应的android中的按键标签,我们可以看到上面“103”对应的是物理按键中的“上”,“108”对应物理按键中的“下”。当用户按下按键后,kernel会上报对应按键的按键码,例如我们按下音量+键,kernel就会上报按键码115,然后上层根据正确的kl文件中的对应关系,将按键对应到上层的VOLUME_UP标签上来。
其实,这些标签也都对应一个按键码,与kernel上报的按键码不同,按键标签所对应的按键码就是我们在上层代码逻辑中使用的按键码。我们可以在frameworks/native/include/input/InputEventLabels.h中看到:这里通过宏定义将标签字符与上层按键码对应起来,其中上层按键码又是通过frameworks/native/include/android/Keycodes.h中枚举的。我们在上层所使用的按键码就是这个枚举类型中所列出的整型值。
这样就将物理按键、kernel、上层之间的映射关系确定了,点击某个物理按键,上层就知道哪个按键被点击了。
完了把1-9-0的键改成a,b,c,d,e,f,g,h,i,j功能。整编后将系统烧到手机,重新开机就可以了。
感谢原作者 参考链接