/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. Не спрашивайте меня, почему они должны делать это так долго! Может быть, у них был плохой день или что-то?

Другие вопросы по тегам