Описание структуры input_event (из linux/input.h)
Может кто-нибудь, пожалуйста, скажите мне, каковы свойства типов данных, используемых структурой input_event?
В файле input.h он определяется следующим образом:
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
но нет других описаний! Даже гуглинг не дал мне ничего интересного.
Единственное, что я знаю, это то, что time
дает секунды или миллисекунды с эпохи, а value
дает код нажатой кнопки. Но даже ценность свойства value
для меня не совсем понятна. В моей программе каждое нажатие клавиши генерирует шесть событий. Следующими событиями являются ответ на нажатие клавиши ENTER:
type=4,code=4,value=458792
type=1,code=28,value=1
type=0,code=0,value=0
type=4,code=4,value=458792
type=1,code=28,value=0
type=0,code=0,value=0
а для буквы a
:
type=4,code=4,value=458756
type=1,code=30,value=1
type=0,code=0,value=0
atype=4,code=4,value=458756
type=1,code=30,value=0
type=0,code=0,value=0
Я хотел бы декодировать значение в действительную букву, но я не понимаю смысла свойств.
Пожалуйста, помогите!
Ответы
Ответ 1
struct input_event
, среди прочих, определен в include/linux/input.h.
От 5. Интерфейс событий в ядре Linux Documentation/input/input.txt (и изменен для предоставления правильных имен файлов заголовков):
-
time
- это метка времени, она возвращает время, в которое произошло событие.
-
type
- это, например, EV_REL
для относительного момента, EV_KEY
для нажатия клавиши или
выпуск. Другие типы определены в include/linux/input-event-codes.h.
-
code
- это код события, например REL_X
или KEY_BACKSPACE
, снова полный
Список находится в include/linux/input-event-codes.h.
-
value
- это значение, которое несет событие. Либо относительное изменение для
EV_REL
, абсолютное новое значение для EV_ABS
(джойстики...) или 0
для EV_KEY
для
релиз, 1
для нажатия клавиши и 2
для автоповтора.
Для руководств и примера кода выполните веб-поиск "linux kernel" "input subsystem"
.