【问题标题】:Track multiple touch down's / up's with libevdev使用 libevdev 跟踪多个着陆/上升
【发布时间】:2019-04-11 15:04:50
【问题描述】:

我正在使用 libevdev,但无法理解如何检测多个触地/触地。如此 libevdev tutorial 所示,您可以看到在页面的最后一个示例中,发生了两次触摸。但是,只接收到两个BTN_TOUCH事件,一个用于第一根手指向下,然后是最后一根手指向上。第二次/中间触摸不会发生BTN_TOUCH。那么我如何知道第二次触摸何时上升和下降(即从双指手势转换为单指手势)?

这是我的两根手指向下和向后的日志:

EV_KEY  BTN_TOOL_FINGER ), value 1
EV_KEY  BTN_TOUCH ), value 1
EV_ABS  ABS_MT_TRACKING_ID ), value 0
EV_ABS  ABS_MT_POSITION_X ), value 1718
EV_ABS  ABS_MT_POSITION_Y ), value 1161
EV_ABS  ABS_MT_PRESSURE ), value 51
EV_ABS  ABS_MT_TOUCH_MAJOR ), value 1
EV_ABS  ABS_MT_TOUCH_MINOR ), value 1
EV_ABS  ABS_MT_ORIENTATION ), value 0
EV_SYN  SYN_MT_REPORT ), value 0
EV_SYN  SYN_REPORT ), value 0
EV_ABS  ABS_MT_TRACKING_ID ), value 0
EV_ABS  ABS_MT_POSITION_X ), value 1718
EV_ABS  ABS_MT_POSITION_Y ), value 1161
EV_ABS  ABS_MT_PRESSURE ), value 51
EV_ABS  ABS_MT_TOUCH_MAJOR ), value 1
EV_ABS  ABS_MT_TOUCH_MINOR ), value 1
EV_ABS  ABS_MT_ORIENTATION ), value 0
EV_SYN  SYN_MT_REPORT ), value 0
EV_SYN  SYN_REPORT ), value 0
EV_ABS  ABS_MT_TRACKING_ID ), value 0
EV_ABS  ABS_MT_POSITION_X ), value 1717
EV_ABS  ABS_MT_POSITION_Y ), value 1159
EV_ABS  ABS_MT_PRESSURE ), value 43
EV_ABS  ABS_MT_TOUCH_MAJOR ), value 1
EV_ABS  ABS_MT_TOUCH_MINOR ), value 1
EV_ABS  ABS_MT_ORIENTATION ), value 0
EV_SYN  SYN_MT_REPORT ), value 0
EV_ABS  ABS_MT_TRACKING_ID ), value 1
EV_ABS  ABS_MT_POSITION_X ), value 2148
EV_ABS  ABS_MT_POSITION_Y ), value 1066
EV_ABS  ABS_MT_PRESSURE ), value 18
EV_ABS  ABS_MT_TOUCH_MAJOR ), value 1
EV_ABS  ABS_MT_TOUCH_MINOR ), value 1
EV_ABS  ABS_MT_ORIENTATION ), value 0
EV_SYN  SYN_MT_REPORT ), value 0
EV_SYN  SYN_REPORT ), value 0
EV_KEY  BTN_TOUCH ), value 0
EV_KEY  BTN_TOOL_FINGER ), value 0
EV_SYN  SYN_REPORT ), value 0

当一根手指向上又向下,而另一根手指仍留在屏幕上时,我得到的只是重复部分内容:

(EV_ABS), code 57( 57 -> 32, 32 == ABS_MT_TRACKING_ID ), value 0
(EV_ABS), code 53( 53 -> 47, 47 == ABS_MT_POSITION_X ), value 1395
(EV_ABS), code 54( 54 -> 0, 65506 == ABS_MT_POSITION_Y ), value 2086
(EV_ABS), code 58( 58 -> 0, 65509 == ABS_MT_PRESSURE ), value 127
(EV_ABS), code 48( 48 -> 98, 98 == ABS_MT_TOUCH_MAJOR ), value 1
(EV_ABS), code 49( 49 -> 110, 110 == ABS_MT_TOUCH_MINOR ), value 1
(EV_ABS), code 52( 52 -> 46, 46 == ABS_MT_ORIENTATION ), value 0
(EV_SYN), code 2( 2 -> 49, 49 == SYN_MT_REPORT ), value 0
(EV_SYN), code 0( 0 -> 0, 0 == SYN_REPORT ), value 0

【问题讨论】:

  • 您能否将显示 btn_touch 事件及其周围其他事件的事件日志粘贴到一起?
  • 我已经添加了日志,谢谢。
  • 我看到您的设备没有记录 BTN_TOOL_DOUBLETAP 但您可以看到 BTN_TOUCH 和 BTN_TOOL_FINGER 因为您的设备似乎认为第一个 TOUCH 不是手指,您是否尝试用三个手指触摸并检查记录?

标签: c linux evdev


【解决方案1】:

使用BTN_TOOL_<DEVICE> 事件工具。对于您的情况,它将是BTN_TOOL_DOUBLETAP。你可以在这里查看更多信息https://www.kernel.org/doc/Documentation/input/event-codes.txt

【讨论】:

  • 我的输入中根本没有任何BTN_TOOL_DOUBLETAP 事件代码。那就是说我的司机有问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2014-08-09
  • 2013-01-10
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
相关资源
最近更新 更多