首先要确定按键输入设备是对应/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

linux的自定义input,linux键值到Android键值的转换与自定义相关推荐

  1. linux的自定义input,Linux Input子系统之第一篇(input_dev/input_handle/input_handler)

    Input子系统是linux kernel中与部分外围器件驱动联系比较紧密的模块,常用于Sensor,TP(touch panel),power key等器件的驱动.这类模块有个共同特点:字符设备,且 ...

  2. linux+android4.2键值关系,Android4.0 添加一个新的Android 键值

    这里添加新的键值,不是毫无凭据凭空创造的一个键值,而是根据kernel中检测到的按键值,然后转化为所需要的数值: 以添加一个linux键值为217,把它映射为android的键值Browser(这个键 ...

  3. Android4.0 添加一个新的Android 键值

    这里添加新的键值,不是毫无凭据凭空创造的一个键值,而是根据kernel中检测到的按键值,然后转化为Android所需要的数值: 以添加一个Linux键值为217,把它映射为android的键值Brow ...

  4. linux input子系统 pdf,Linux下的Input子系统.pdf

    计 算 机 系 统 应 用 ||ww.c·S-a.org.cn 2013年 第 22卷 第 l2期 Linux下的Input子系统① 朱银瑞,吴庆洪,吴华玲 (辽宁科技大学 电子与信息工程学院,鞍山) ...

  5. linux input子系统 pdf,Linux下的Input子系统①.PDF

    Linux下的Input子系统①.PDF 计 算 机 系 统 应 用 2013 年 第 22 卷 第 12 期 Linux 下的Input 子系统① 朱银瑞, 吴庆洪, 吴华玲 (辽宁科技大学 电子与 ...

  6. platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架

    platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...

  7. 使用 Yocto Project 构建自定义嵌入式 Linux 发行版

    使用 Yocto Project 构建自定义嵌入式 Linux 发行版 转自: http://zzjlzx.blog.chinaunix.net/uid-9688646-id-5175371.html ...

  8. 嵌入式linux按键扫描,嵌入式Linux驱动笔记(三十一)------SYSRQ组合键使用

    你好!这里是风筝的博客, 欢迎和我一起交流. ALT+SYSRQ组合键是Linux调试的一种手段,即使在系统死机.panic.卡住等情况,只要系统还能响应中断,那么SYSRQ就派上用场了(比如触发cr ...

  9. 【Linux驱动】input子系统与按键驱动

    input子系统架构总览 在网上能找到一些关于input子系统架构相关的示意图,大体表达的意思都差不多. linux输入子系统(linux input subsystem)从上到下由三层实现,分别为: ...

最新文章

  1. 反汇编引擎diStorm3
  2. Linux系统的进程管理
  3. 工作2年,月薪2万,我还是选择了离职
  4. cad细等线体不显示_CAD打印文字不显示?很多人不知道这个知识点!
  5. vivado链接不上开发板最有可能原因
  6. python图像识别坐标转换成g代码_python - 将坐标系导出为ESPG代码:to_epsg()或ExportToEPSG() - SO中文参考 - www.soinside.com...
  7. Git学习总结(2)——初识 GitHub
  8. jquery中的attr函数attr(name)、attr(key,value)、attr(properties)、attr(key,fn)、removeAttr
  9. 什么是:before和:after?
  10. Ansible条件测试
  11. Django自定义分页、bottle、Flask
  12. linux把profile文件删了怎么办,误删Profile后的处理
  13. MFC 序列化的理解及困惑点
  14. android 拷贝大文件,不用数据线,手机和电脑互传大文件
  15. A. One-dimensional Japanese Crossword
  16. 安装pywifi的坑
  17. RTX 3090 Ti和RX 6950 XT参数对比
  18. JavaScript 教程「2」:注释、输入输出、变量
  19. win7虚拟计算机名,电脑高手必会技能:VMware虚拟机安装win7教程
  20. 量子密钥分发技术原理

热门文章

  1. 基于.NET Standard的分布式自增ID算法--美团点评LeafSegment
  2. .NET Core微服务之路:让我们对上一个Demo通讯进行修改,完成RPC通讯
  3. 25大技术主题向您发出最后一次约【惠】邀请
  4. EF Core 插件 —— ToSql
  5. 世界上最大的搜索引擎公司 Google 宣布与 Elastic 达成战略合作协议
  6. 怎样在Redis通过StackExchange.Redis 存储集合类型List
  7. Nginx 网站定义自己的错误页面
  8. java 二分法查找数组,Java二分法查找数组元素下标
  9. C/C++笔试面试题目(2021最新版)
  10. 剑指offer之二维数组中查找