android 新增 key按键(framework层适配和调试)

android 新增 key按键(framework层适配和调试)

// 查看input设备用的是哪个kl文件
dumpsys input | grep kl -C 10

例如:
设备里的:/system/usr/keylayout/Generic.kl
对应的是代码里的:frameworks/base/data/keyboards/Generioc.kl

// 查看input设备支持报哪些key事件
getevent -p
getevent -lp
adb device 1: /dev/input/event1
  name:    "adc-keys"
  events:
    KEY(001): KEY_VOLUEDOWN  KEY_VOLUMEUP  KEY_BACK  KEY_HOMEPAGE
 
// 查看input上报的input事件
getevent -l
getevent 

sendevent命令模拟按下音量减键:
例如,通过getevent -lp查看到/dev/input/event1支持上报KEY_VOLUEDOWN 
0x72(十六进展) = 114(十进制)
adb shell sendevent /dev/input/event1 0001 0114 00000001 && \
adb shell sendevent /dev/input/event1 0000 0000 00000000 && \
adb shell sendevent /dev/input/event1 0001 0114 00000000 && \
adb shell sendevent /dev/input/event1 0000 0000 00000000

adb shell // 进入手机中
$ getevent
$ getevent -l
$ getevent -ilp

$ dumpsys input

$ input keyevent 3 // KeyEvent.KEYCODE_HOME
$ input keyevent KEYCODE_POWER


**新增按键MY_KEY1:**
Input模块的两个映射表
1,android中的两个按键映射表
kl文件映射表: 
用于从linux扫描码映射到根据按键功能命名的字符串标签。
frameworks/base/data/keyboards/xxx.kl
如:Generic.kl
...
key 113   VOLUME_MUTE
key 114   VOLUME_DOWN
key 115   VOLUME_UP
key 116   POWER
+ key 600   MY_KEY1
...
在手机的/system/usr/keylayout中

InputEventLabels.h中的KEYCODES[]映射表:
static const InputEventLabel KEYCODES[] = {
   ...
   DEFINE_KEYCODE(VOLUME_UP),
   DEFINE_KEYCODE(VOLUME_DOWN),
   DEFINE_KEYCODE(POWER),
   ...
+  DEFINE_KEYCODE(MY_KEY1),
   ...
}
用于字符串标签映射到Android Keycode

frameworks/native/include/android/keycodes.h
  ...
  AKEYCODE_VOLUME_UP       = 24,
  AKEYCODE_VOLUME_DOWN     = 25,
  AKEYCODE_POWER           = 26,
  ...
  AKEYCODE_SYSRQ           = 120,
+ AKEYCODE_MY_KEY1           = 300,
  ...


调试:
例如通过:getevent -lp 查看到/dev/input/eventX 上报600   MY_KEY1
adb shell sendevent /dev/input/eventX 0001 0600 00000001 && \
adb shell sendevent /dev/input/eventX 0000 0000 00000000 && \
adb shell sendevent /dev/input/eventX 0001 0600 00000000 && \
adb shell sendevent /dev/input/eventX 0000 0000 00000000

在PhoneWindowManager.java中
打开DEBUG_INPUT = true;
// 查看MY_KEY1是否上传到framework层,通过设置 ACTION_PASS_TO_USER 决定是否传达给APP层
adb logcat | grep -i -E "interceptKeyTi|interceptKeyTq"

linux inpu驱动adc-keys.c添加新增key的调试代码,验证framework层是否正常适配
例如:在设备树dtsi文件adc-keys添加
http://aospxref.com/kernel-android13-5.10-lts/xref/drivers/input/keyboard/adc-keys.c
http://aospxref.com/kernel-android13-5.10-lts/xref/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts


 	adc-keys {
 		compatible = "adc-keys";
 		io-channels = <&saradc 1>;
 		io-channel-names = "buttons";
 		keyup-threshold-microvolt = <1800000>;
 		poll-interval = <100>;
        ...
 		back {
 			label = "Back";
 			linux,code = <KEY_BACK>;
 			press-threshold-microvolt = <985000>;
 		};
 
+ 		my_key1 {
+ 			label = "my_key1";
+ 			linux,code = <600>;
+ 			press-threshold-microvolt = <1314000>;
+ 		};
 	};
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于4位key按键乐透程序设计调试项目传感器电路图,首先需要明确传感器的种类和作用。一般来说,可以使用数字压力传感器或触摸传感器来实现按键的检测。在电路中,传感器与微控制器相连接,通过读取传感器的电压或电流信号来判断按键是否被按下。 在电路图中,首先需要将按键与传感器连接。按键的一端连接到传感器的输入端,另一端通过电阻连接到地。这样,当按键被按下时,电流会通过按键并流入地,形成一个低电平信号。接下来,传感器的输出端与微控制器的输入引脚相连接,以便将按键信号发送给微控制器进行处理。 为了避免按键的抖动现象,可以在按键与传感器之间添加一个去抖动电路。去抖动电路一般由电容和电阻组成,能够消除按键接触时产生的电压波动。 在微控制器端,需要编写相应的程序来实现按键的检测和响应。一种常见的方法是采用轮询方式,通过不断读取微控制器的输入引脚状态来检测按键是否被按下。当检测到按键按下时,可以触发相应的操作或事件,比如控制LED灯的亮灭或输出数字结果。 最后,为了确保按键的准确性和可靠性,还可以考虑加入硬件消抖电路、滤波电路或者使用更高精度的传感器模块。 总之,该项目的传感器电路图需要包括按键连接、去抖动电路设计和微控制器的输入引脚连接等要素,配合合适的程序设计,能够实现按键乐透的检测和响应功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值