2010-09-07 6 views
5

Ho giocato in giro con la cattura l'input dal dispositivo tastiera:/dev/input formato della 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, utilizzando

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

da ascoltare. Sono curioso soprattutto per il comportamento di alcune chiavi; la meta, i tasti freccia, la barra numpad in avanti.

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?

risposta

12

/dev/input/by-path/platform-i8042-serio-0-event-kbd è solo un collegamento simbolico al file di dispositivo 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 sono prefissati con EV_. I valori possibili di code dipendono da type. Hanno il prefisso KEY_ o BTN_ o REL_ o così via. I valori possibili di value dipendono da entrambi type e code. Ad esempio per eventi di pressoflessione value uguale a 1 e per eventi di rilascio chiave 0.

È possibile esaminare i dati degli eventi con:

evtest /dev/input/eventX 

dove X è il numero evento dispositivo della tastiera (o qualsiasi altro dispositivo evento). Un tasto stampa o rilascio normalmente emette tre eventi (EV_MSC, EV_KEY e EV_SYN).

3

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 combinazioni diverse, quindi avete solo bisogno di inviare un byte per chiave, giusto?

No. Sfortunatamente, una manciata di tasti trovati sulla tastiera sono tasti estesi, e quindi richiedono due codici di scansione. Queste chiavi sono precedute da una E0 (esadecimale). Ma non si ferma a due codici di scansione. Che ne dici di E1,14,77, E1, F0,14, F0,77! Ora che non può essere un codice di scansione valido? Sbagliato di nuovo. Viene inviato quando si preme il tasto Pausa/Pausa. Non chiedermi perché devono farlo così tanto tempo! Forse stavano avendo una brutta giornata o qualcosa del genere?