linux的自定义input,linux键值到Android键值的转换与自定义

首先要确定按键输入设备是对应/dev/input目录下哪个event,根据VID PID匹配对应的kl文件,可通过如下命令 cat /proc/bus/input/devices 查看设备信息

framework层通过.kl文件将获取的键值转换成实际按键含义后,又会通过KeycodeLabel转换成相应的keycode,具体文件在:frameworks\native\include\input\KeycodeLabels.h

然后app可以通过如下方法获得对应键按下时的keyCode值,即“F11”对应获得的keyCode即为上面自定义的<546>

添加自定义的键值:

(1)Kernel层:

① include/uapi/linux/input.h 中添加: #define KEY_LXL               123

② drivers/hid/hid-input.c 中添加:                case 0x188: map_key_clear(KEY_LXL);      break;   //其中0x188是HID设备上报的原始键值

(2)Android系统层:

① bionic/libc/kernel/uapi/linux/input-event-codes.h 中添加  : #define KEY_LXL               123    //与kernel中头文件定义一致②Generic.kl或Vendor_xxxx_Product_xxxx.kl文件中添加      :  key 123 LXL;

③/frameworks/native/include/android/keycodes.h  中添加  :  AKEYCODE_LXL          = 666,

④/frameworks/native/include/input/KeycodeLabels.h 的KEYCODES[]数组中添加:{ "LXL", 666 },

⑤在frameworks/base/core/res/res/values/attrs.xml 中添加 :  

⑥在frameworks/base/core/java/android/view/KeyEvent.java添加:public static final int KEYCODE_LXL= 666;

经过如上的步骤就将Linux驱动向上层抛出的"123"键值和Android系统中的KEYCODE_LXL <666>对应起来了,然后可以在Android的framework层的键值处理函数中,捕获按键事件,并进行相应自定义处理,具体在frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 的interceptKeyBeforeQueueing()函数中实现。

(转载自: https://www.cnblogs.com/blogs-of-lxl/p/9490205.html      https://www.cnblogs.com/blogs-of-lxl/p/9490205.html)

原文:https://www.cnblogs.com/goahead--linux/p/12924941.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值