android层的键值定义在哪里,Android 添加键值并上报从驱动到上层

Android 添加键值并上报从驱动到上层

平台 :RK3288

OS:Android7.1

kernel部分添加键值:

1.在dts中(kernel/arch/arm/boot/dts/rk3288-android.dtsi)添加键值属性,可以仿照power按键配置

8e2ba9a752413ac1b319545b0ccfa4df.png

因我们使用的键值操作是通过gpio触发的,则配置成gpio-key。

linux,code 键码可以查看内核自定义键码来选择。定义在kernel/include/uapi/linux/input-event-codes.h下。

dfe1d74ca45a3d7c141dd211f83d1704.png

因键值较多,就只列一部分出来,在定义键码的时候,注意不要与现正在使用的键码重复。如不确认哪些键码是已经使用的,可以在该文件中添加自定义键码。

在dts中添加键值属性后,需要在驱动(我的是在/kernel/drivers/input/keyboard/rk_reys.c)里,做dts解析:

8b865b53dc529edf1dbf2c5b3fc9295a.png

如该按键需要以中断的方式触发,则可以为这个按键申请中断:

c185e6bd511730cea9dc0eda8c044dd3.png

键值上报:

1.注册input事件:

通过input_register_device()函数来向内核注册input事件。

2.input事件上报:

input事件上报是通过input_event()或input_report_key()函数上报。

input_event()函数简介:

函数原型:

6ac5a2c1221bc70feb561b79c87a9577.png

参数介绍:

struct input_dev *dev:需要上报的事件

unsigned int type:上报的事件类型(在前面的input-event-codes.h文件中有定义)

unsigned int code:上报的键码

int value :上报的键值

使用实例:

af0420ba0494af52e86df780b19334d9.png

注意:input_event()上报按键事件必须先上报1(意为按下),再上报0(意为弹起),不能单独上报1,或者上报0。

kernel部分添加完成后,可通过getevent命令来确认事件有无上报成功。

内核部分确认调试成功后,需要将键值上报至上层:

1.修改按键布局映射文件,都是以.kl结尾的文件,可通过

cat bus/input/devices 命令来查看我们系统目前正在使用的布局文件是哪个。

我使用的是/device/rockchip/common/rk29-keypad.kl布局文件

8f98dd4d777bd2d8f4c194ef7fbd1a71.png

在这后面添加key 117 F1 则表示内核上报的117键值映射到系统的键值为F1

系统的键值定义在frameworks/base/core/java/android/view/KeyEvent.java下。

添加完成后可以在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java里添加打印信息,查看键值是否上报成功。

d90f4894b9b142974a1aeef22774d571.png

上层APK可通过调用frameworks/base/core/java/android/view/KeyEvent.java中的接口去拦截键值

8b3138fce3675c94e88202c26ad1aaf9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值