/ dev / формат ввода клавиатуры - PullRequest
6 голосов
/ 08 сентября 2010

Я поиграл с захватом ввода с моего клавиатурного устройства:

/dev/input/by-path/platform-i8042-serio-0-event-kbd 

для меня, и мне было интересно, есть ли какая-либо спецификация для того, что он возвращает, используя

od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd 

слушать.Мне любопытно в основном из-за поведения определенных клавиш;мета, клавиши со стрелками, косая черта numpad.

0520300 ac 9d 86 4c 6b 0f 04 00 04 00  04  00 (db) 00 00 00
0520320 ac 9d 86 4c 8c 0f 04 00 01 00 (7d) 00  00 00 00 00
0520340 ac 9d 86 4c 95 0f 04 00 00 00  00  00  00 00 00 00

Каждый другой ключ, на который я смотрел до сих пор, имеет два байта в скобках как совпадающие значения, есть ли какая-либо причина, по которой они являются специальными?

Ответы [ 2 ]

13 голосов
/ 07 октября 2010

/dev/input/by-path/platform-i8042-serio-0-event-kbd - это просто символическая ссылка на файл устройства события /dev/input/eventX.Данные могут быть прочитаны из файлов устройств событий как

struct input_event {
    struct timeval time;
    __u16 type;
    __u16 code;
    __s32 value;
};

, определенный в /usr/include/linux/input.h.

Возможные значения type начинаются с префикса EV_.Возможные значения code зависят от type.Они имеют префикс KEY_ или BTN_ или REL_ или так далее.Возможные значения value зависят от type и code.Например, для событий нажатия клавиши value равно 1 и для событий отпускания клавиши 0.

Вы можете просмотреть данные события с помощью:

evtest /dev/input/eventX

где Xномер устройства событий вашей клавиатуры (или любого другого устройства событий).Одно нажатие или отпускание клавиши обычно генерирует три события (EV_MSC, EV_KEY и EV_SYN).

3 голосов
/ 08 сентября 2010

Некоторые клавиши имеют необычные коды сканирования ...

От: http://www.beyondlogic.org/keyboard/keybrd.htm (с правками):

Теперь 101 клавиша и 8 бит составляют 256 различных комбинаций, таким образомВам нужно всего лишь отправить один байт на ключ, верно?

Нет.К сожалению, несколько клавиш, найденных на вашей клавиатуре, являются расширенными клавишами и поэтому требуют двух кодов сканирования.Этим ключам предшествует E0 (hex).Но это не останавливается на двух кодах сканирования.Как насчет E1,14,77, E1, F0,14, F0,77!Теперь это не может быть действительным кодом сканирования?Опять не так.Это происходит, когда вы нажимаете клавишу Pause / Break.Не спрашивайте меня, почему они должны делать это так долго!Может быть, у них был плохой день или что-то?

...