用input模拟多点触摸事件

大家好,感谢您的阅读。

我正在尝试使用uinput接口来执行一些操作。 最终,这些数据将通过UART串行连接进行解释。

我可以打开,closures等input,它可以很好地为单点触摸。

 EV_KEY BTN_TOUCH 1 EV_ABS ABS_X 400 EV_ABS ABS_Y 400 EV_SYN SYN_REPORT 0 

执行触摸。 滑动,双击,与ABS_X和ABS_Y正常工作。

然后,我想实现多点触控支持,所以我实现了ABS_MT_POSITION_X,ABS_MT_POSITION_Y,ABS_MT_TRACKING_ID,ABS_MT_SLOT。

我设法做了一个触摸和滑动:

 EV_ABS ABS_MT_TRACKING_ID 20 EV_KEY BTN_TOUCH 1 EV_ABS ABS_MT_POSITION_X 425 EV_ABS ABS_MT_POSITION_Y 400 EV_SYN SYN_REPORT 0 

但是…我不能使用插槽。 我试图执行捏(dezoomer)。

 EV_ABS ABS_MT_SLOT 0 EV_ABS ABS_MT_TRACKING_ID 20 EV_KEY BTN_TOUCH 1 EV_ABS ABS_MT_POSITION_X 425 EV_ABS ABS_MT_POSITION_Y 400 EV_ABS ABS_MT_SLOT 1 EV_ABS ABS_MT_TRACKING_ID 21 EV_ABS ABS_MT_POSITION_X 650 EV_ABS ABS_MT_POSITION_Y 400 EV_SYN SYN_REPORT 0 EV_ABS ABS_MT_SLOT 0 EV_ABS ABS_MT_POSITION_X 450 EV_ABS ABS_MT_POSITION_Y 400 EV_ABS ABS_MT_SLOT 1 EV_ABS ABS_MT_POSITION_X 550 EV_ABS ABS_MT_POSITION_Y 400 EV_ABS ABS_MT_SLOT 0 EV_ABS ABS_MT_TRACKING_ID -1 EV_ABS ABS_MT_SLOT 1 EV_ABS ABS_MT_TRACKING_ID -1 EV_KEY BTN_TOUCH 0 EV_SYN SYN_REPORT 0 

这个序列不起作用,但根据Linux多点触摸协议 ,它应该是。 我看不出问题来自哪里。 是时间依赖性的吗? 当我发送这些指示时,他们之间没有任何延迟,可能需要一段时间。

有谁知道如何模拟协议B之后的多点触摸事件? 什么序列应该工作?

注意:这些触摸是在Android设备上执行的,使用Android NDK制作的C可执行文件。

所以我终于找到了答案。 上面的顺序是正确的,但是:

  1. 你需要添加一个延迟。 从我可以从Android上的旧三星Edge获得的序列中,每次刷新ABS_MT_POSITION_X / Y之间的时间为8000微秒。
  2. 你需要发送更多的事件。 所以我基本上实现了一个for循环。

戈蒂埃