/ Dev / input format clavier
-
01-10-2019 - |
Question
Je joue autour avec la capture de l'entrée de mon appareil du 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 principalement en raison du comportement de certaines touches; les touches meta, flèche, numpad barre oblique.
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
Toutes les autres clé que je l'ai regardé a jusqu'à présent les deux octets entre parenthèses comme valeurs correspondantes, est-il une raison particulière sont ceux-ci?
La solution
/dev/input/by-path/platform-i8042-serio-0-event-kbd
est juste un lien symbolique vers le fichier de périphérique é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 de type
sont préfixées avec EV_
.
Les valeurs possibles de code
dépendent type
. Ils sont préfixées avec KEY_
ou BTN_
ou REL_
ou ainsi de suite.
Les valeurs possibles de value
dépendent à la fois type
et code
. Par exemple pour les événements presse touche value
est égale à 1
et pour des événements à libération touche 0
.
Vous pouvez examiner les données d'événement avec:
evtest /dev/input/eventX
où 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 sur la touche ou la libération émet normalement trois événements (EV_MSC
, EV_KEY
et EV_SYN
).
Autres conseils
Certaines touches ont des codes d'analyse inhabituels ...
De: http://www.beyondlogic.org/keyboard/keybrd.htm (avec des 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é, à droite?
Non. Malheureusement, une poignée de touches sur votre clavier sont des touches longues et nécessitent donc deux codes de balayage. Ces clés sont précédées d'un E0 (hex). Mais il ne se limite pas à deux codes de balayage soit. Que diriez-vous E1,14,77, E1, F0,14, F0,77! Maintenant que ne peut pas être un code valide scan? Encore faux. Il est arrive à envoyer lorsque vous appuyez sur la 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?