Android 增加适配HID设备按键-蓝牙手柄

***增加新的按键,包括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" />
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值