admin 管理员组

文章数量: 887021

Touch

接着前两篇的学习。来详细介绍一下getevent得到的几个参数的含义。

首先根据硬件的不同,会将Touch的协议分为类型A和类型B。两者的主要区别可以概括为如下:

(1).类型A是处理匿名的接触,并且为所有的接触传递原始数据到接收者。类型B是针对可以追踪可识别接触类型的,通过event slots为特定的接触传递更新的数据,也就是说,如果前后两个点的数据没有变化就不会有数据上报。

(2).类型A是无状态的的协议,类型B 特定接触类型的使用减少了传送到用户空间的数据的数量。并且,slot需要使用ABS_MT_TRACKING_ID。也可以简单地根据是否有这个参数来判断是哪一种类型。

(3).类型的不同是由于硬件来区分的,有些IC不支持B类型。

接下来,看看具体的参数。下图是点击一次手机屏幕得到的结果。


1.ABS_MT_TRACKING_ID

前面也提到了这个参数是类型B特有的。实际上,每个slot会和一个ID相对应,一个非负数的表示一次接触,-1表示这是一个无用的slot(或者理解为一次接触的结束)。无论在接触的类型相对应的slot发生了改变,驱动都应该通过改变这个值来使这个slot失效。并且下一次触摸的ID值会是这次的值加1。

2.EV_ABS

事件的一种类型。表示绝对坐标。

3.EV_KEY

事件的一种类型。表示是按键事件。

4.BTN_TOUCH

触碰按键。其值是DOWN或者UP。

5.BTN_TOOL_FINGER

按键的是finger,并且其值也是DOWN或者UP。

6.ABS_MT_POSITION_X,ABS_MT_POSITION_Y

相对于屏幕中心的x,y坐标。

7.ABS_MT_TOUCH_MAJOR

接触部分的长轴长度。相当于椭圆的长轴。

8.ABS_MT_TOUCH_MINOR

接触部分的短轴长度。相当于椭圆的短轴。

9.EV_SYN

事件类型的一种。在事件完成的时候更新数据。

10.SYN_REPORT

可以看到,在一次触摸中,就有好几次SYN_REPORT。是因为有很多的事件,或者是说SYN_REPORT就是一次事件的结束。我的理解是,虽然我们人是用手触摸了一次,但是实际上是有很多个微小的接触点的,这些点对于Touch来说就是事件。并且每次上报的信息可能不同,这是因为类型B的协议只传递变化的信息,没有变的参数就不会再重复出现了。

本文标签: Touch