Вопрос:
Может кто-нибудь, пожалуйста, скажите мне, каковы свойства типов данных, используемых структурой 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
Я хотел бы декодировать значение в действительную букву, но я не понимаю смысла свойств.
Пожалуйста, помогите!
Лучший ответ:
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».