2010-09-07 6 views
5

He estado jugando con la captura de la entrada de mi dispositivo de teclado:/dev/input formato de teclado

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

para mí, y me preguntaba si había alguna especificación para lo que devuelve, utilizando

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

escuchar. Tengo curiosidad sobre todo debido al comportamiento de ciertas teclas; el meta, las teclas de flecha, la barra inclinada del teclado numérico.

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 

Cada otra tecla que he visto hasta ahora tiene las dos bytes entre paréntesis como valores a juego, ¿hay alguna razón estos son especiales?

Respuesta

12

/dev/input/by-path/platform-i8042-serio-0-event-kbd es solo un enlace simbólico al archivo de dispositivo de evento /dev/input/eventX. Los datos pueden ser leídos desde los archivos de dispositivos de eventos como

struct input_event { 
    struct timeval time; 
    __u16 type; 
    __u16 code; 
    __s32 value; 
}; 

definido en /usr/include/linux/input.h.

Los valores posibles de type llevan el prefijo EV_. Los valores posibles de code dependen de type. Están prefijados con KEY_ o BTN_ o REL_ o más. Los valores posibles de value dependen tanto de type como de code. Por ejemplo, para eventos de pulsación de tecla value es igual a 1 y para eventos de liberación de tecla 0.

Puede examinar los datos de eventos con:

evtest /dev/input/eventX 

donde X es el número de eventos del dispositivo de su teclado (o cualquier otro dispositivo de evento). Una pulsación de tecla o liberación normalmente emite tres eventos (EV_MSC, EV_KEY y EV_SYN).

3

Algunas teclas tienen códigos de exploración inusuales ...

Desde: http://www.beyondlogic.org/keyboard/keybrd.htm (con modificaciones):

Ahora hay 101 teclas y 8 bits de hacer 256 combinaciones diferentes, por lo que sólo tiene que enviar un byte por clave, ¿verdad?

Nope. Desafortunadamente, un puñado de las teclas encontradas en su teclado son teclas extendidas, y por lo tanto requieren dos códigos de exploración. Estas teclas están precedidas por un E0 (hex). Pero tampoco se detiene en dos códigos de escaneo. ¿Qué hay de E1,14,77, E1, F0,14, F0,77! ¿Ahora que no puede ser un código de exploración válido? Nuevamente incorrecto. Sucede que se envía cuando presiona la tecla Pausa/Pausa. ¡No me preguntes por qué tienen que hacerlo tanto tiempo! Tal vez estaban teniendo un mal día o algo así?