web-dev-qa-db-fra.com

Liste des codes de numérisation de clavier hexadécimal et documentation du clavier USB HID

Où puis-je trouver une liste des codes de numérisation de clavier hexadécimaux pour différentes dispositions de clavier?

J'envoie les codes clés sur un (faux) clavier USB HID avec la commande bash echo -ne suivi du code de balayage de clé hexadécimale échappé et du périphérique HID:

echo -ne "\x00\x00\x00\x38\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00"  > /dev/hidg0

pour une barre oblique (/) sur la disposition du clavier américain.

Sur ma disposition de clavier (CH) c'est

echo -ne "\x00\x00\x00\x24\x00\x00\x00\x00" > /dev/hidg0
echo -ne "\x00\x00\x00\x00\x00\x00\x00\x00"  > /dev/hidg0

pour une barre oblique. Je suppose donc qu'il doit exister une liste pour tous ces éléments. Pourtant, j'ai pu trouver une liste pour la disposition américaine mais pas pour toute autre disposition de clavier.

Je sais que la deuxième ligne arrête la frappe de la clé mais je ne comprends pas très bien la syntaxe de ces séquences d'échappement. Je sais que si je change le premier \x00 à un x02 il "décale" la touche saisie. Mais pourquoi y a-t-il 6 autres modificateurs? Représentent-ils ctrl, alt, ...? Et qui signifie quoi?

Une documentation de cette syntaxe serait vraiment cool. Je n'ai pas encore pu en trouver un.

(J'utilise Kali Nethunter sur un Nexus 7 2012)

14
Nico Hauser

Les "codes de balayage" (ce sont en fait des index des codes d'utilisation) sont publiés sur usb.org dans la spécification SB HID Usage Tables du chapitre 10 "Page clavier/clavier (0x07)". Une disposition de rapport de clavier typique peut être trouvée dans le SB Device Class Specification for HID dans l'annexe B "Descripteurs d'interface de démarrage", section "B.1 Protocole 1 (clavier)".

Cela décrit le format de rapport du clavier comme suit:

Byte 0: Keyboard modifier bits (SHIFT, ALT, CTRL etc)
Byte 1: reserved
Byte 2-7: Up to six keyboard usage indexes representing the keys that are 
          currently "pressed". 
          Order is not important, a key is either pressed (present in the 
          buffer) or not pressed.

Notez que la spécification USB ne définit pas les dispositions de clavier. Il répertorie simplement les codes d'utilisation attribués à des fonctions clés particulières. La lettre "a" est le code d'utilisation 0x04 par exemple. Si vous voulez un "A" majuscule, vous devrez également définir les bits de modification de l'octet 0 pour sélectionner "Left Shift" (ou "Right Shift").

Le format exact du tampon de rapport dépend du descripteur de rapport envoyé à l'ordinateur hôte lorsque le clavier a été branché sur un port USB, donc ce qui précède n'est qu'un exemple (assez typique).

35
aja