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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top