/ Dev / formato della tastiera ingresso
-
01-10-2019 - |
Domanda
Ho giocato in giro con la cattura l'input dal dispositivo tastiera:
/dev/input/by-path/platform-i8042-serio-0-event-kbd
per me, e mi chiedevo se ci fosse qualsiasi specifica per quello che ritorna, usando
od -tx1 /dev/input/by-path/platform-i8042-serio-0-event-kbd
per ascoltare. Sono curioso soprattutto a causa del comportamento di alcuni tasti; la meta, tasti freccia, tastierino numerico barra.
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
Ogni altro tasto Ho guardato finora ha i due byte tra parentesi come valori corrispondenti, c'è qualche ragione questi sono speciali?
Soluzione
/dev/input/by-path/platform-i8042-serio-0-event-kbd
è solo un link simbolico a file di device evento /dev/input/eventX
. I dati possono essere letti dal file dei dispositivi di eventi come
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
definito /usr/include/linux/input.h
.
I valori possibili di type
hanno il prefisso EV_
.
I valori possibili di code
dipendono type
. Sono prefissati KEY_
o BTN_
o REL_
o così via.
I valori possibili di value
dipendono sia type
e code
. Per esempio per gli eventi-chiave stampa value
uguale 1
e per gli eventi di rilascio-chiave 0
.
È possibile esaminare i dati degli eventi con:
evtest /dev/input/eventX
dove X
è il numero del dispositivo caso di tastiera (o qualsiasi altro dispositivo evento). Una pressa chiave o rilasciare normalmente emette tre eventi (EV_MSC
, EV_KEY
e EV_SYN
).
Altri suggerimenti
Alcuni tasti hanno codici di scansione insoliti ...
Da: http://www.beyondlogic.org/keyboard/keybrd.htm (con modifiche):
Ora c'è 101 tasti e 8 bit fanno 256 diverse combinazioni, così avete solo bisogno di inviare un byte per chiave, giusto?
No. Purtroppo, una manciata di tasti che si trovano sulla tastiera sono tasti estesi, e quindi richiedono due codici di scansione. Queste chiavi sono preceduti da un E0 (esadecimale). Ma non si ferma alle due codici di scansione sia. Che ne dite di E1,14,77, E1, F0,14, F0,77! Ora che non può essere un codice di scansione valida? Sbagliato di nuovo. E 'sembra essere inviato quando si preme il tasto Pausa / Pausa. Non chiedetemi perché devono rendere così tanto tempo! Magari avevano un brutto giorno o qualcosa del genere?