/dev/ формат ввода клавиатуры
Я играл с захватом ввода с моего клавиатурного устройства:
/dev/input/by-path/platform-i8042-serio-0-event-kbd
для меня, и мне было интересно, есть ли какая-либо спецификация для того, что он возвращает, используя
od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd
слушать. Мне любопытно в основном из-за поведения определенных клавиш; мета, клавиши со стрелками, цифровая косая черта.
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 ответа
/dev/input/by-path/platform-i8042-serio-0-event-kbd
is just a symlink to /dev/input/eventX
event device file. Data can be read from event device files as
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
определяется в /usr/include/linux/input.h
,
Возможные значения type
имеют префикс EV_
, Возможные значения code
зависит от type
, They are prefixed with KEY_
или же BTN_
или же REL_
или так далее. Возможные значения value
depend on both type
а также code
, For example for key-press events value
равняется 1
and for key-release events 0
,
You can examine event data with:
evtest /dev/input/eventX
где X
is the event device number of your keyboard (or any other event device). One key press or release normally emits three events (EV_MSC
, EV_KEY
а также EV_SYN
).
Некоторые ключи имеют необычные коды сканирования...
От: http://www.beyondlogic.org/keyboard/keybrd.htm (с правками):
Теперь 101 ключ и 8 бит составляют 256 различных комбинаций, поэтому вам нужно всего лишь отправить один байт на ключ, верно?
Нету. К сожалению, несколько клавиш, найденных на вашей клавиатуре, являются расширенными клавишами и поэтому требуют двух кодов сканирования. Этим ключам предшествует E0 (hex). Но это не останавливается на двух кодах сканирования. Как насчет E1,14,77,E1,F0,14,F0,77! Теперь это не может быть действительным кодом сканирования? Опять не так. Это происходит, когда вы нажимаете клавишу Pause/Break. Не спрашивайте меня, почему они должны делать это так долго! Может быть, у них был плохой день или что-то?