2010-09-07 5 views
5

j'ai joué avec la capture de l'entrée de mon appareil de clavier:/dev/input format clavier

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

pour moi, et je me demandais s'il y avait un cahier des charges pour ce qu'elle retourne, en utilisant

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

pour écouter. Je suis curieux surtout à cause du comportement de certaines touches; la méta, les touches fléchées, la barre oblique du pavé numérique.

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 

Chaque autre touche, je l'ai regardé a jusqu'à présent les deux octets entre parenthèses que les valeurs correspondantes, est-il une raison particulière ce sont?

Répondre

12

/dev/input/by-path/platform-i8042-serio-0-event-kbd est juste un lien symbolique vers le fichier de périphérique d'événement /dev/input/eventX. Les données peuvent être lues à partir des fichiers de périphériques d'événements comme

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

défini dans /usr/include/linux/input.h. Les valeurs possibles type sont préfixées par EV_. Les valeurs possibles de code dépendent de type. Ils sont préfixés avec KEY_ ou BTN_ ou REL_ ou ainsi de suite. Les valeurs possibles de value dépendent à la fois de type et de code. Par exemple, pour les événements de touche-clé value est égal à 1 et pour les événements de libération de clé 0.

Vous pouvez examiner les données d'événement avec:

evtest /dev/input/eventX 

X est le numéro de périphérique d'événement de votre clavier (ou tout autre appareil de l'événement). Une pression ou une libération de touche émet normalement trois événements (EV_MSC, EV_KEY et EV_SYN).

3

Certaines touches ont des codes de balayage inhabituels ...

De: http://www.beyondlogic.org/keyboard/keybrd.htm (avec modifications):

Maintenant, il y a 101 touches et 8 bits font 256 combinaisons différentes, donc il vous suffit d'envoyer un octet par clé, non?

Non. Malheureusement, une poignée des touches trouvées sur votre clavier sont des touches étendues, et nécessitent donc deux codes de balayage. Ces clés sont précédées d'un E0 (hex). Mais il ne s'arrête pas à deux codes de balayage non plus. Que diriez-vous E1,14,77, E1, F0,14, F0,77! Maintenant, cela ne peut pas être un code de balayage valide? Encore faux. Il arrive d'être envoyé lorsque vous appuyez sur la touche pause/pause. Ne me demandez pas pourquoi ils doivent le faire si longtemps! Peut-être qu'ils avaient une mauvaise journée ou quelque chose?