Android 9 平台Hisi352 添加系统自定义键值,linux键值到Android键值的转换与自定义

首先要确定按键输入设备是对应/dev/input目录下哪个event,可以通过getevent -v 或者dumpsys input 确认设备使用的 kl 文件,该命令显示值代表内核中的值

红外键值映射

一、自定义Linux键值

路径:device/hisilicon/bigfish/system/ir_user/key_pars/linux_key.h

二、映射到安卓的kl(KeyLayoutFile)文件

 2.1 这里最好是使用里面原来没有用到的,linux_key.h里自定义的键值一定要跟着映射.kl里面的键值走,否则可能会出现keycode无上报情况

2.2 它的作用是把底层传上来的键值映射为Android键值

2.3 注意:这里key是关键字,代表这个映射项作为键值映射,中间的数字代表Linux键值,右边代表自定义键值的名字

三、将实际键值转换成keycode

3.1 framework层通过.kl文件将获取的键值转换成实际按键含义后,又会通过KeycodeLabel转换成相应的keycode,具体文件在:frameworks/native / include/android/keycodes.h (enum枚举类中添加)

 我这里是自定义了一个ZY_BASE 3000,从3000开始走,BASE+11就代表是keycode 3011

3.2 在frameworks/base / core/res/res/values/attrs.xml下enum也添加

四、上报的安卓键值

路径:frameworks/native / include/input/InputEventLabels.h (KEYCODES[]数组中添加)

五、对应安卓系统键值

 路径:frameworks/base / core/java/android/view/KeyEvent.java

六、 在你的key.xml添加你的键值

 0xbe41ff00:ff00为遥控器头码,41为遥控器物理键值,be为校验值(反码)。

IAndroid IR实现原理可参考:android 红外遥控器实现原理_zhanxingshan007的博客-CSDN博客_android 红外遥控器

按下遥控器的一个按键后,在系统中的逻辑过程:遥控器的物理键值——>Linux的标准键值——>自定义的字符串——>定义这个字符串——>android标准键值——>android键值上报——>所有上报表中键值判断是否为全局——>(上报成功)。

到此红外遥控器映射关系就结束了,如果要添加键值,可参考此流程修改

蓝牙键值映射

一、需要通过getevent来查看到输入的具体键值是多少

比如0x6c十六进制转换为10进制就是108,这个键值可以在对呀的Generic.kl文件中找到对应的Android键名,从而在KeyEvent.java文件中找到Android键值

七、更新api/current.txt

 这里在你make update-api之后会自动生成

八、在PhoneWindowManager.java给这个键值自定义服务,根据需求来

 九、调试

1.红外遥控调试,可通过ir_user命令,运行后操作遥控器,看是否能获取到物理键值, 能够正常获取到说明驱动层功能正常。

 2.蓝牙遥控调试需要通过getevent来查看到输入的具体键值

上面已经写过了,这里不再做过多叙述

3.INPUT KEYEVENT

方式一:可以通过串口输入键值 input keyevent 3011 来测试按键激活,3011为添加的keycode,方式二:通过PhoneWindowManager.java中过滤TAG来验证

 串口输入 logcat | grep WindowManager,可以验证kecode是否上报成功

 按下按键出现这种打印证明成功,会调用你自己添加的业务逻辑代码,keycode则是你在keycodes.h里面添加的自定义keycode,可以去看看interceptKeyBeforeQueueing()这个方法

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值