我的NPI项目之Touch (一) - Android input subsystem .kl and .kcm 文件使用

重要定义:

1. scan code,key code

所谓scan code就是linux scan code,event 上报的那个值,不同硬件driver可能会有不同的scan code上报,与硬件息息相关;

所谓key code就是android framework和app能够认识的key code,一般也可以自定义,例如touch下沿中心可以定义一个特殊功能key,就可以定义为SPECIFICKEY,那么想要被正常的映射到anroid framework(例如PhoneWindowManager)里面,就需要你根据scan code值来映射对应的android keycode,需要自行定义一份.kl文件,例如在.kl文件中加入如下一行:

key 555 SPECIFICKEY VIRTUAL  //

那么需要在./res/res/values/attrs.xml 中添加 <enum name="KEYCODE_SPECIFICKEY" value="555 " />,attrs.xml文件会被EventHub来加载解析,从而完成key的remap;那么就可以在android framework通过KEYCODE_SPECIFICKEY来对应scan code了;


2.virtual key

Touch设备经常会被用来实现虚拟按键功能,例如我们的设备display分辨率是1280*800;但是touch的高度可能是1750,那么多出来的这一块touch,就可以用来实现虚拟按键功能;

目前主流用两种实现虚拟按键的方法:

  1. 可以理解为硬件实现,touch的控制器通过寄存器设定直接实现虚拟按键功能。
  2. 通过软件实现,将特定位置(范围)的touch坐标映射成所定义key的key codes。这个一般是在touch的driver实现,在固定位置上报事件时候,上报key code。

当通过方法2实现虚拟按键的时候,通常会需要kernel导出(提供)一个名为virtualkeys.<devicename>映射文件,这个文件是以板级属性的形式存在,假设touch的driver上报该设备名称是touchfreely,那么这个虚拟按键的映射文件必定存在与/sys/board_properties/virtualkeys.touchfreely.

虚拟按键的按键映射文件描述了touch上的坐标和对应的key codes;另外,除了现在提到的按键映射文件,必定还相应的存在一个按键布局文件.kl文件用来将linux key codes 映射成android key codes和按键字符映射文件用来说明键盘的特定类型,一般会是SPECIAL_FUNCITON.


3. 语法

通常虚拟按键映射文件内容很简单,一般如下格式:0x01:256:360:1525:720:376

0x01: 版本信息,必须是0x01.

<Linux key code>: the linux key code of the virtual key,通常在touch driver(dts)中定义和使用;

<centerX>:virtual key的中心X坐标

<centorY>:virtual key的中心Y坐标

<width>:虚拟按键的宽度(以像素为单位)

<height>:虚拟按键的高度


4. 问题

目前发现一个问提,PhoneWindowManger可以快速的检测到虚拟按键的按下和松开(up/down),并可以通过key code来做出相应的操作。但是另外单独的开一个进程来模仿EventHub的行为,监听/dev/input/下面的设备输出情况,发现容易丢失up event;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值