记录一下:Android 问题:蓝牙遥控器getevent 接受 kernal 传过来的值相同

记录一下:Android 问题:蓝牙遥控器getevent 接受 kernal 传过来的值相同_第1张图片
流程上可以发现,遥控器的码值被转化了几次: HID码值–→Linux event–→ 根据Vendor、Product 所对应的kl文件,最终转化为 Android 事件

通过 getevent 可以拿到其中按键值的详细信息
记录一下:Android 问题:蓝牙遥控器getevent 接受 kernal 传过来的值相同_第2张图片
这次的问题就出现在遥控器按两个不同的按键,发送过来也确实是两个不同的值,但kernel上报 的键值都是 f0 (这个值后面可以知道是KEY_UNKNOWN ),问题就出现在HDI码值映射成 linux input event 的步骤
代码位置:\kernel\机器名称\drivers\hid\hid-input.c 不同的机器可能位置不同,但都在kernal下搜索一下即可
上图所示,改遥控器的协议为 0C ,0C协议对应的地方是 HID_UP_CONSUMER 去做事件发上报
记录一下:Android 问题:蓝牙遥控器getevent 接受 kernal 传过来的值相同_第3张图片
而 DE 和 DF两个都没有在这个switch中定义,走的 default 方法,上报的键值是:map_key_clear(KEY_UNKNOWN); 所以两个按键上层打印的值都是 0f ,即在这个switch中加入这两个按键即可

by the way 如果协议是07,则对应转换的是 hid_keyboard 这个数组,转换的值为:键值十进制对应这个数组的下标的值
记录一下:Android 问题:蓝牙遥控器getevent 接受 kernal 传过来的值相同_第4张图片

轻松解决

你可能感兴趣的:(android)