使用uinput模拟多点触控事件

时间:2016-05-24 16:36:58

标签: android linux multi-touch touchscreen

大家好,感谢您的阅读。

我正在尝试使用document.getElementById("htmlObject").something = {hi: 1}; 界面执行一些操作。最终,这些数据将通过UART从串行连接进行解释。

我可以打开,关闭等输入,它可以很好地进行单点触控。

uinput

进行触摸。滑动,双击,可与ABS_X和ABS_Y一起使用。

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

我设法进行了触摸和滑动:

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

但是......我不能使用插槽。我正在尝试捏(dezoomer)。

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

这个序列不起作用,但根据Linux Multi Touch Protocol,它应该是。我看不出那个问题来自哪里。它是时间依赖的吗?当我发送这些指令时它们之间没有任何延迟,可能需要一段时间。

有人知道如何在协议B之后模拟多点触控事件吗?什么序列应该有效?

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

1 个答案:

答案 0 :(得分:2)

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

  1. 您需要添加延迟。从我在Android上的旧三星Edge收集的序列中,每次刷新ABS_MT_POSITION_X / Y之间的时间间隔为8000微秒。
  2. 您需要发送更多活动。所以我基本上实现了一个for循环。
  3. Gautier