Понимание результатов теста mtdev
Я пытаюсь поиграть с мультитач событиями тачпада с помощью mtdev-test, так как evtest пока недоступен для Solus os.
Итак, я нашел магическую команду tat, называемую 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
Может быть, я просто очень хочу найти отношения между тремя.
Моя цель - каким-то образом преобразовать вывод mtdev-test, используя java/python/what, в понятные человеку данные и определить 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
Так может кто-нибудь объяснить, как это работает, что означают эти данные, или кто-то знает какой-либо ресурс, который я не нашел?
1 ответ
Из mtdev-test.c мы можем видеть, как печатаются значения.
fprintf(stderr, "%012llx %02d %01d %04x %d\n",
evtime, slot, ev->type, ev->code, ev->value);
Итак, формат:
Timestamp Slot Type Code Value
Типы и коды событий можно найти в input-event-codes.h в ядре Linux:
/*
* 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
Так
3
этоEV_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
Дополнительные сведения о пакетах событий см. в документации: