附:代码实例
多点触摸协议有两种,A协议和B协议。
首先来看A协议,协议上说了报点格式是这样的,以两点为例:ABS_MT_POSITION_X x[0] ABS_MT_POSITION_Y y[0] SYN_MT_REPORT ABS_MT_POSITION_X x[1] ABS_MT_POSITION_Y y[1] SYN_MT_REPORT SYN_REPORT
如果第一个触点离开(抬起),这里的意思是说还有一个触点,需要继续上报这个触点。
ABS_MT_POSITION_X x[1] ABS_MT_POSITION_Y y[1] SYN_MT_REPORT SYN_REPORT
如果两个触点都离开了,那么只需要报告一个同步事件就可以了。
SYN_MT_REPORT
SYN_REPORT
对于B协议就稍微显得有点复杂。B协议需要硬件支持,和A协议主要区别在哪里呢?B协议可以使用一个ID来标识触点,可以减少上报到用户空间的数据量,这个ID(ABS_MT_TRACKING_ID)可以有硬件提供或者从原始数据计算而得。那>么下面我们就来看B协议怎么上报数据的。
ABS_MT_SLOT 0 ABS_MT_TRACKING_ID 45 ABS_MT_POSITION_X x[0] ABS_MT_POSITION_Y y[0] ABS_MT_SLOT 1 ABS_MT_TRACKING_ID 46 ABS_MT_POSITION_X x[1] ABS_MT_POSITION_Y y[1] SYN_REPORT
如果触点45只是在x方向做了移动,那么应该怎么报告这个事件呢?
ABS_MT_SLOT 0 ABS_MT_POSITION_X x[0] SYN_REPORT
可以看到减少了很多数据的上报,这就是同A协议最大的区别。
如果同slot 0相关的触点离