Android多点触摸协议改进

以两点为例,Linux多点触摸协议上报次序为

ABS_MT_TOUCH_MAJOR ABS_MT_WIDTH_MAJOR ABS_MT_POSITION_X ABS_MT_POSITION_Y SYN_MT_REPORT //手指1 ABS_MT_TOUCH_MAJOR ABS_MT_WIDTH_MAJOR ABS_MT_POSITION_X ABS_MT_POSITION_Y SYN_MT_REPORT //手指2 SYN_REPORT

即采样一次需上报11个事件,利用率太低,很容易出现丢包的现象。因此我们决定encode data.格式见下表。

Bit 31 30~27 26~20 19~10 9~0
Data Reserved Size Press Y X

  可以看出这种编码格式可以支持分辨率1024×1024以下的LCD。完全满足当前及未来很长一段时间内项目的需求。我们将这种上报格式命名为ABS_BYD_MT_DATA,既然是打包上传,SYN_MT_REPORT也可以省略了。修改后的上报次序为

ABS_BYD_MT_DATA //手指1 ABS_BYD_MT_DATA //手指2 SYN_REPORT

为了便于支持2个手指以上的触摸项目,这里我们保留SYN_REPORT。如果修改下android,便可以支持256个手指。扩展起来非常方便

ABS_BYD_MT_DATA //手指1 ABS_BYD_MT_DATA //手指2 … ABS_BYD_MT_DATA //手指256 SYN_REPORT

当然这样修改,android恐怕是无法识别的,修改上层就行了。在EventHub.cpp中定义下 device class,然后在KeyInputQueue.java识别出class,将包解析出来。万事大吉。

你可能感兴趣的:(android)