2016-09-08 1 views
1

Je travaille actuellement sur un clavier USB HID utilisant un microcontrôleur Atmel. Tout fonctionne bien, mais j'utilise généralement différentes dispositions de clavier sur différentes machines. Maintenant, j'ai commencé à me demander s'il serait possible de dire à l'hôte quelle disposition de clavier utiliser, c'est-à-dire EN-US, afin que les codes de touches soient toujours mappés sur le bon caractère sur chaque machine. Des idées?Envoi de la disposition de la langue à partir du clavier USB HID

Répondre

1

Un clavier USB n'a généralement pas la notion de «disposition du clavier». Les touches au même endroit sur tous les claviers enverront les mêmes codes make/break quelle que soit la disposition (EN, DE, etc.). C'est la tâche d'un pilote de clavier au sein de l'hôte de fournir des tables de traduction correctes (-> pilote de clavier) du code de balayage à char/fuction.

Vous aurez peut-être besoin de 2 tables de traduction ou plus dans votre micro et d'un moyen de commander votre micro pour sélectionner le bon.

further reading

+0

Vous voulez dire quelque chose comme un commutateur matériel? N'a pas encore pensé à cela ... –

+0

un commutateur matériel (par exemple un commutateur DIP utilisant 2-3 ports) où les dispositions 2/4/8 peuvent être codées, ou une combinaison de touches spéciale (Windows utilise {Left-ALT} + { Shift} que votre logiciel interprète et réagit sur ... – MikeD

3

claviers USB envoient keycodes qui représentent la position physique de touche du clavier, et non pas les données clés ascii/unicode. C'est probablement une mauvaise chose en terme de localisation, mais c'est un protocole des années 90, ils voulaient garder les choses simples, et garder l'état d'esprit de la norme PC/AT de l'époque.

Problème avec cette approche, le matériel ne peut pas appliquer la mise en page imprimée sur ses boutons physiques. Tout ce qu'il peut faire, c'est suggérer au conducteur son mapping. USB HID définit un champ bCountryCode dans les données de descripteurs USB (§ 6.2.1, p 22). Dans cette mesure:

expression numérique qui identifie le code de pays du matériel localisé.

Malheureusement, cela est sous-spécifié (aucune distinction entre les variantes de claviers pour la même langue, etc.), de sorte que les fabricants de matériel n'a jamais utilisé beaucoup ce domaine, ils ont mis presque toujours 0x00, à savoir NotSupported. Parce que le matériel n'a jamais utilisé autant, le support du système d'exploitation n'a jamais été développé.

+0

Une exception est Solaris avec les claviers Sun/Oracle qui ont des commutateurs DIP pour indiquer leur mise en page au pilote.Voir https://deskthority.net/wiki/Sun_Type_7#Dip_switches – jlliagre