了解mtdev测试的输出



我正在尝试使用mtdev测试来处理触摸板多点触摸事件,因为evtest还不能用于Solus操作系统。

所以我找到了一个名为mtdev-test的神奇命令,但我真的不知道这个输出意味着什么。我发现第二列可能代表手指数(00=1,01=2,02=3,…),但我不知道其他列的意思。

我尝试在以下位置查找一些信息:https://github.com/torvalds/linux/blob/master/drivers/input/mouse/elantech.c

https://www.kernel.org/doc/Documentation/input/elantech.txt

以及

https://www.kernel.org/doc/Documentation/input/event-codes.txt

也许我真的很想找到三人之间的关系。

我的目标是以某种方式将使用java/python/athing的mtdev测试的输出转换为人类可以理解的数据,并检测X&每个手指的Y

unicornponny@unicornponny ~ $ sudo mtdev-test /dev/input/event14
supported mt events:
ABS_MT_SLOT
ABS_MT_TOUCH_MAJOR
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
ABS_MT_TRACKING_ID
ABS_MT_PRESSURE
0159b6c31962 00 3 0039 3588
0159b6c31962 00 3 0035 2049
0159b6c31962 00 3 0036 690
0159b6c31962 00 3 003a 25
0159b6c31962 00 3 0030 624
0159b6c31962 00 3 001c 4
0159b6c31962 00 1 014a 1
0159b6c31962 00 1 0145 1
0159b6c31962 00 3 0000 2049
0159b6c31962 00 3 0001 690
0159b6c31962 00 3 0018 25
0159b6c31962 00 0 0000 0
0159b6c31969 00 3 003a 21
0159b6c31969 00 3 0018 21
0159b6c31969 00 0 0000 0
0159b6c3196f 00 3 0030 156
0159b6c3196f 00 3 001c 1
0159b6c3196f 00 0 0000 0
0159b6c31979 00 3 0039 -1
0159b6c31979 00 1 014a 0
0159b6c31979 00 1 0145 0
0159b6c31979 00 3 0018 0
0159b6c31979 00 0 0000 0

那么,有人能解释它是如何工作的吗?这些数据意味着什么?或者有人知道我没有发现的任何资源吗?

从mtdev-test.c我们可以看到值是如何打印的

fprintf(stderr, "%012llx %02d %01d %04x %dn",
evtime, slot, ev->type, ev->code, ev->value);

所以格式是:

Timestamp Slot Type Code Value

事件类型和代码可以在Linux内核中的输入事件代码.h中找到:

/*
* Event types
*/
#define EV_SYN          0x00
#define EV_KEY          0x01
#define EV_REL          0x02
#define EV_ABS          0x03
#define EV_MSC          0x04
#define EV_SW           0x05
#define EV_LED          0x11
#define EV_SND          0x12
#define EV_REP          0x14
#define EV_FF           0x15
#define EV_PWR          0x16
#define EV_FF_STATUS    0x17
#define EV_MAX          0x1f

因此,3EV_ABS事件类型,我们有其事件代码(为简洁起见,已编辑):

#define ABS_X               0x00
#define ABS_Y               0x01
#define ABS_Z               0x02
// <snip>
#define ABS_PRESSURE        0x18
#define ABS_DISTANCE        0x19
// <snip>
#define ABS_MT_SLOT         0x2f    /* MT slot being modified */
#define ABS_MT_TOUCH_MAJOR  0x30    /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR  0x31    /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR  0x32    /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR  0x33    /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION  0x34    /* Ellipse orientation */
#define ABS_MT_POSITION_X   0x35    /* Center X touch position */
#define ABS_MT_POSITION_Y   0x36    /* Center Y touch position */
#define ABS_MT_TOOL_TYPE    0x37    /* Type of touching device */
#define ABS_MT_BLOB_ID      0x38    /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID  0x39    /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE     0x3a    /* Pressure on contact area */
#define ABS_MT_DISTANCE     0x3b    /* Contact hover distance */
#define ABS_MT_TOOL_X       0x3c    /* Center X tool position */
#define ABS_MT_TOOL_Y       0x3d    /* Center Y tool position */

现在,给定输出

0159b6c31962 00 3 0039 3588
0159b6c31962 00 3 0035 2049
0159b6c31962 00 3 0036 690
0159b6c31962 00 3 003a 25
0159b6c31962 00 3 0030 624
0159b6c31962 00 3 001c 4
0159b6c31962 00 1 014a 1
0159b6c31962 00 1 0145 1
0159b6c31962 00 3 0000 2049
0159b6c31962 00 3 0001 690
0159b6c31962 00 3 0018 25
0159b6c31962 00 0 0000 0

我们得到

1484829956450 ms, Slot 0, 3 (EV_ABS) 0039 (ABS_MT_TRACKING_ID) 3588
1484829956450 ms, Slot 0, 3 (EV_ABS) 0035 (ABS_MT_POSITION_X) 2049
1484829956450 ms, Slot 0, 3 (EV_ABS) 0036 (ABS_MT_POSITION_Y) 690
1484829956450 ms, Slot 0, 3 (EV_ABS) 003a (ABS_MT_PRESSURE) 25
1484829956450 ms, Slot 0, 3 (EV_ABS) 0030 (ABS_MT_TOUCH_MAJOR) 624
1484829956450 ms, Slot 0, 3 (EV_ABS) 001c (ABS_TOOL_WIDTH) 4
1484829956450 ms, Slot 0, 1 (EV_KEY) 014a (BTN_TOUCH) 1
1484829956450 ms, Slot 0, 1 (EV_KEY) 0145 (BTN_TOOL_FINGER) 1
1484829956450 ms, Slot 0, 3 (EV_ABS) 0000 (ABS_X) 2049
1484829956450 ms, Slot 0, 3 (EV_ABS) 0001 (ABS_Y) 690
1484829956450 ms, Slot 0, 3 (EV_ABS) 0018 (ABS_PRESSURE) 25
1484829956450 ms, Slot 0, 0 (EV_SYN) 0000 0

有关事件包的更多详细信息,请参阅文档:

  • https://www.kernel.org/doc/Documentation/input/event-codes.txt
  • https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt

相关内容

  • 没有找到相关文章

最新更新