***增加新的按键,包括HID设备按键:
1,HID设备:
1.通过getevent -l获取键值设备节点;
2.hid-input.c中添加或修改你的键值;114,115两个键值。
3.通过设备节点找到对应的kl文件; 蓝牙手柄的两个按键值定义为:
key 114 CAMERA
key 115 MENU
4.添加或修改映射关系;
2,调试方法:查看设备号:
方式一:dumpsys input
首先使用手动配对,连接上蓝牙遥控器
console:/ # dumpsys input
INPUT MANAGER (dumpsys input)
…… 略 ……
Event Hub State:
BuiltInKeyboardId: -2
Devices:
…… 略 ……
9: 语音助手 Keyboard
Classes: 0x800000a1
Path: /dev/input/event8
Enabled: true
Descriptor: 64be8d24c5c36a9695b6e91253242e7413e8d0d8
Location:
ControllerNumber: 0
UniqueId: 67:35:d9:5f:90:7b
Identifier: bus=0x0005, vendor=0x568a, product=0x9869, version=0x0001
KeyLayoutFile: /system/usr/keylayout/Generic.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
VideoDevice: <none>
//caoyong 这是测试蓝牙手柄的:
8: AB Shutter3
Classes: 0x80000001
Path: /dev/input/event7
Enabled: true
Descriptor: 9c1756e3b55fb8e7e10db2e62e4ee10bab7ce9f4
Location:
ControllerNumber: 0
UniqueId: 6E:48:46:11:FF:FF
Identifier: bus=0x0005, vendor=0x0504, product=0x0000, version=0x0111
KeyLayoutFile: /system/usr/keylayout/Generic.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
VideoDevice: <none>
Unattached video devices:
<none>
KeyLayoutFile: /system/usr/keylayout/Generic.kl这句打印,以及第一章的遥控器规格书,可以得知方案商的默认配置
遥控器方案商将自己的蓝牙按键映射为标准的蓝牙键盘按键
Generic.kl 文件
此文件是keyboard输入设备的默认keylayout
我们需要从此文件提取键值,也就是kl文件的第2列,这个键值方案商并未给出
举个例子,此处拿出四个按键,请比对遥控器规格书和kl文件
key 60 F2 //备注:对应遥控器 Settings按键
根据我们的需要,我们把蓝牙按键映射为相同的红外按键的Android键值码,也就是第3列
如SETTINGS,对应到Andoird KeyEvent.java的按键,就是 KEYCODE_SETTINGS
3,实例:
hid-input.c:
static const unsigned char hid_keyboard[256] = {
114,115 ......
}
Kernel底层定义的ScanCode,通过getevent读出来的值是这个:
Generic.kl:
key 115 MENU
native 层 keycodes 重映射(十进制)》》》》》映射:
InputEventLabels.h:
#define DEFINE_KEYCODE(key) { #key, AKEYCODE_##key }
static const InputEventLabel KEYCODES[] = {
DEFINE_KEYCODE(MENU)
}
keycode.h:
enum {
AKEYCODE_MENU = 82,
}
Android上层定义的Keycode:
keyevent.java:
public static final int KEYCODE_MENU = 82;
keycode.h:
AKEYCODE_MENU = 82,
framework/base/core/res/values/attrs.xml:
<enum name="KEYCODE_MENU" value="82" />