c - 使用 libevdev 跟踪多个着陆/上升
问题描述
我正在使用 libevdev 并且无法理解如何检测多个触地/触地。如本 libevdev教程所示,您可以看到在页面的最后一个示例中,发生了两次触摸。但是,只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
推荐阅读
- sql-server - 更新或删除的行值要么不使行唯一,要么改变多行
- reactjs - 从多个反应孩子获取数据并发送到一个 API
- ios - 当集合视图最初占据屏幕的下半部分时,如何拉动集合视图以占据整个屏幕?
- python - 如何过滤带有转义字符'\'的字符串
- mysql - 为什么 MySQL 中的 Modulo(负数)会给出意想不到的结果?
- sql-server - 如何使用 Azure Active Directory 凭据连接到 SQL Server?
- android - 实例化 onCreateView(...) 的参数?
- docker - 从 docker 调试笑话
- awk - AWK打印字符串+bash变量+字符串的组合
- node-modules - 接收“未找到模块”和“字段'浏览器'不包含有效的别名配置”将我的站点部署到 Netlify