c - 使用 libevdev 跟踪多次触地/向上

标签 c linux evdev

我正在使用 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_TOOL_<DEVICE>事件工具。对于您的情况,它将是 BTN_TOOL_DOUBLETAP .您可以在此处查看更多信息 https://www.kernel.org/doc/Documentation/input/event-codes.txt

关于c - 使用 libevdev 跟踪多次触地/向上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55635713/

相关文章:

c - 返回头文件中的多个值

linux - 有人使用 netlink 进行 IPC 吗?

linux - 测试 tar 存档中的文件

c - Linux Evdev 投票滞后

c - 四舍五入甚至没有始终如一地应用?

使用代码生成将 simulink 模型转换为 C 代码

C指针: *ptr vs &ptr vs ptr

linux - 如何从 lib .so 文件中查找函数?

c - 在 Linux 上用 C 读取游戏 handle 输入的现代方法

python - [Python][evdev] 获取鼠标点击后光标位置