t972在蓝牙配对后,自带的LatinIME 输入法会出现弹不出来的现象。
经过分析,主要为蓝牙的kl 文件适配存在问题。解决如下:
1.新建 kl文件 这个需要结合选用的遥控器来设定名称,我这边的遥控器是按照如下配置的 Vendor_2b54_Product_1600.kl 放到 /vendor/usr/keylayout/下
内容:
#for bl remote add by jason 20240709
key 113 VOLUME_MUTE 0x71
key 103 DPAD_UP 0x67
key 108 DPAD_DOWN 0x6C
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 28 DPAD_CENTER
key 158 BACK
key 139 MENU
key 172 HOME
key 114 VOLUME_DOWN
key 115 VOLUME_UP
key 402 CHANNEL_UP
key 403 CHANNEL_DOWN
key 60 F2
2. 修改 vim common/drivers/hid/hid-input.c 中的键 对调下
修改后 :
--------知识点说明
从以上流程上可以发现,遥控器的码值被转化了几次: HID码值–→Linux event–→ 根据Vendor、Product 所对应的kl文件,最终转化为 Android 事件
通过 getevent 可以拿到其中按键值的详细信息:
参考kernel下的hid.h,此处只列举几个
协议分两种:
一种是 0007类型,根据蓝牙键值(物理键值),纵向横向(0~F)数hid_keyboard[256],找到位置即为Linux键值,搜索Linux键值在input.h中对应的按键名称,然后修改kl文件
一种是 000c类型,在hid-input.c文件的HID_UP_CONSUMER中寻找,case后面的值为对应的蓝牙键值,map_key_clear内的值为对应的按键名称,如果没有就添加映射,如果有,根据按键名称找到input.h中对应的Linux键值,然后用计算器算出对应的十进制数,添加到kl文件
按下ok键
使用 dumpsys input结合【vendor id : product id】找到对应的kl文件
kl 文件对应关系
key 后面为linux的键值,没加0x的 就是10进制显示数值,, 再后面为安卓的部分,这部分 直接参考 Generic.kl中的
比如enter键 用getevent 查看 Linux键值为 0x1c 换算为10进制 即28 ,对应上面这个kl文件。