0
点赞
收藏
分享

微信扫一扫

主机端适配遥控器的蓝牙HID键值


主机端的某些功能,例如信号源,由于没有标准的HID蓝牙键值,这时主机端需要适配该键值,将其映射到对应的功能,遥控器发出的蓝牙键值请参考“遥控器说明文档”。下面以信号源SOURCE为例,适配流程如下:

(1)Kernel层:

① include/uapi/linux/input.h 中添加: #define KEY_SOURCE    250               

上面数值250不要与Android现有的重复

 ② drivers/hid/hid-input.c 中添加:

case  0x0dc: map_key_clear(KEY_SOURCE);      break;   

//其中0x0dc是HID设备上报的原始键值,即遥控器键值

完成上述操作之后,将遥控器通过蓝牙连接到主机端,可通过getevent 指令查看上报的键值,键值为十六进制显示:

主机端适配遥控器的蓝牙HID键值_BLE蓝牙


(2)Android系统层:

 ① bionic/libc/kernel/uapi/linux/input.h 中添加 :

#define KEY_SOURCE       250    //与kernel中头文件定义一致

 ② Generic.kl或Vendor_xxxx_Product_xxxx.kl文件中添加 :

key 250 SOURCE;

若遥控器红外有信号源这个功能,这里的SOURCE替换成红外键值对应的功能(红外对应的功能在本kl里寻找),这样该蓝牙键值就映射到原来红外对应的功能,后面步骤就可以忽略。如果遥控器红外原先没有这个功能,则需要自行往Android上层报告键值,需要进行后续步骤。

 ③ /frameworks/native/include/android/keycodes.h  中添加  :  AKEYCODE_SOURCE          = 666,

 ④ /frameworks/native/include/input/KeycodeLabels.h 的KEYCODES[]数组中添加: { "SOURCE", 666 },

 ⑤ 在frameworks/base/core/res/res/values/attrs.xml 中添加 :  <enum name="KEYCODE_SOURCE" value="666" />

 ⑥ 在frameworks/base/core/java/android/view/KeyEvent.java添加: public static final int KEYCODE_SOURCE= 666;


  编译Android时会报错,需要在android 目录下make update-api

经过如上的步骤就将Linux驱动向上层抛出的"250"键值和Android系统中的KEYCODE_SOURCE <666>对应起来了,然后可以在Android的framework层的键值处理函数中,捕获按键事件,并进行相应自定义处理,具体在frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 的interceptKeyBeforeQueueing()函数中实现。

应用APP也可以监听到666这个键值,进而执行相应的操作。

举报

相关推荐

0 条评论