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
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.
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.
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
- 1. USB HID-Protokoll Frage
- 2. USB HID-Enumeration mit BLED112
- 3. USB-Tastatur-Protokoll
- 4. HID USB-Zugriff vs libusb
- 5. Understanding "driverless" USB HID
- 6. .NET API für HID (USB)?
- 7. Programm für HID USB Scale
- 8. Python: Lesen von einem USB-HID-Gerät
- 9. Set USB-Tastatur-Status in C#
- 10. Liste des Hex-Tastatur-Scan-Codes und USB-HID-Tastatur Dokumentation
- 11. Ermitteln der HID-Schnittstelle zu POS oder Tastatur in C++
- 12. USB HID hängt an Read() in C#
- 13. Abrufen der Seriennummer einer USB-Tastatur unter Windows
- 14. Verhindern, dass das USB-HID-Gerät automatisch geladen wird
- 15. LPc11u68 Als USB-Massenspeicher erkannt entweder in HID-Klasse programmiert
- 16. USB HID Unterschied zwischen „Input-Meldung“ und „Input-Bericht“
- 17. durch eine HID-Handshake Reverse-Engineering-Bytes über USB
- 18. Welche Daten kann ein HID-Gerät empfangen?
- 19. Sind STM32 HID USB-Treiber wirklich so langsam?
- 20. Ein USB-HID-Gerät in Windows CE 6.0 mit C#
- 21. Bild von benutzerdefinierter Tastatur senden
- 22. usb hid: warum sollte ich schreiben "Null" auf die Steuerleitung in der Out-Endpunkt Interrupt
- 23. Wie erhalten Sie ein USB-Linux-Verbundgerät mit HID, um einen gesperrten Host zu aktivieren?
- 24. stm32cube, USB-Host, versteckte Maus/Tastatur
- 25. Senden von Daten vom ios-Gerät an Windows-PC über einen Bluetooth-HID-Dongle
- 26. Multi-Top-Level-HID-Sammlung in USB ... Ist es möglich, 2 Berichte gleichzeitig an den Host zu liefern?
- 27. Wie fängt man USB-Interrput von nicht-HID-Gerät in Windows 7?
- 28. Wie LUKS Passphrase von USB zu laden, zurückfallen auf Tastatur?
- 29. USB-Gerät senden/empfangen Daten
- 30. Im Gespräch mit einem HID
Sie meinen so etwas wie einen Hardware-Schalter? Hab noch nicht darüber nachgedacht ... –
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