2016-09-08 1 views
1

Ich arbeite gerade an einer USB HID Tastatur mit einem Atmel Mikrocontroller. Alles funktioniert gut, aber ich verwende normalerweise verschiedene Tastaturlayouts auf verschiedenen Rechnern. Jetzt begann ich mich zu fragen, ob es möglich wäre, dem Host mitzuteilen, welches Tastaturlayout zu verwenden ist, d. H. EN-US, so dass Schlüsselcodes immer auf dem richtigen Zeichen auf jeder Maschine abgebildet werden. Irgendwelche Ideen?Sprachlayout von der USB HID Tastatur senden

Antwort

1

Eine USB-Tastatur hat normalerweise keine Ahnung von "Tastaturbelegung". Tasten an der gleichen Stelle auf allen Tastaturen senden die gleichen Markencodes, unabhängig vom Layout (EN, DE usw.). Es ist die Aufgabe eines Tastaturtreibers innerhalb des Hosts, korrekte Übersetzungstabellen (-> Tastaturtreiber) von Scan-Code zu Char/Funktion zur Verfügung zu stellen.

Sie benötigen also möglicherweise zwei oder mehr Übersetzungstabellen in Ihrem Mikro und überlegen sich, wie Sie Ihr Mikro steuern können, um das richtige auszuwählen.

further reading

+0

Sie meinen so etwas wie einen Hardware-Schalter? Hab noch nicht darüber nachgedacht ... –

+0

einen Hardware-Switch (zB Dip-Switch mit 2-3 Ports) wo 2/4/8 Layouts codiert werden können, oder eine spezielle Tastenkombination (Windows benutzt {Left-ALT} + { Shift}, die Ihre Software interpretiert und darauf reagiert ... – MikeD

3

USB-Tastaturen senden keycodes, die physische Position der Taste auf der Tastatur darstellen, nicht die ascii/Unicode-Schlüsseldaten. Dies ist wahrscheinlich eine schlechte Sache in Bezug auf die Lokalisierung, aber dies ist ein Protokoll aus den 90er Jahren, sie wollten die Dinge einfach halten und die Denkweise des PC/AT-Standards der Zeit beibehalten.

Problem bei diesem Ansatz ist, Hardware kann das Layout nicht erzwingen, das auf seinen physischen Schaltflächen gedruckt wird. Alles, was es tun kann, ist, den Fahrer auf seine Zuordnung hinzuweisen. USB HID definiert eine bCountryCode Feld in den USB-Descriptor Daten (§ 6.2.1, p. 22) in diesem Ausmaß:

Numerischer Ausdruck Ländercode des lokalisierten Hardware zu identifizieren.

Leider ist diese underspecified ist (keine Unterscheidung zwischen Varianten von Tastaturen für die gleiche Sprache, etc.), so Hardware-Hersteller nie dieses Feld viel verwendet, sie fast immer setzen 0x00, das heißt NotSupported. Da die Hardware nie so oft verwendet wurde, wurde die Betriebssystemunterstützung nie entwickelt.

+0

Eine Ausnahme stellt Solaris mit Sun/Oracle-Tastaturen dar, die Dip-Schalter haben, um ihr Layout an den Treiber zu senden (siehe https://deskthority.net/wiki/Sun_Type_7#Dip_switches) – jlliagre

Verwandte Themen