Hallo Zusammen, ich würde gerne 2 Tasteneingaben einer selbstentwickleten Tastatur am Computer melden. Ist es möglich dem Computer mitzuteilen ob eine Taste gesetzt und gehalten wird und ob sie nach einer gewissen Zeit wieder losgelassen wird (set/release)?? Oder kann man nur seriel angeben, dass eine Taste gedrückt ist?? Gruß Johannes
Hallo Johannes, schau dir doch mal an wie bei Tastaturen die Daten übertragen werden bzw. wie diese aussehen. Ablaufen wird das immer seriell, aber mit einem s.g. 'Tastaturcontroller' kannst du dir 'Scancodes' erstellen und diese in einem Datenwort übertragen. Jetzt gibt es natürlich auch die Möglichkeit so ein Ding 'usb tastatur controller' fertig zu kaufen. Die 'xxx' sind auch gute Suchworte für eine Suchmaschine :) Gruß aus Berlin
Hallo, schau mal bei "Teensy" vorbei, was die so an Beispielen haben http://www.pjrc.com/teensy/usb_keyboard.html
USB Senden von 2 Tasteneingaben eines HID parallel schrieb im Beitrag
#3131350:
> (set/release)??
PC-Tastaturen arbeiten mit Make/Break-Codes, und zwar für alle Tasten,
auch Shift, Ctrl usw.
Gruss Reinhard
Ich habe keine Ahnung, wie Dein HDI funktioniert. Sollte es eine Tastatur simulieren können, so sieht der Datenfluss mit ziemlicher Sicherheit folgendermaßen aus: <Taste X gedrückt> ... <Taste X losgelassen> oder <Taste X gedrückt> ... <Taste Y gedrückt> ... <Taste X losgelassen> ... <Taste Y losgelassen> Die Reihenfolge des: "Losgelassen" hängt natürlich von der tatsächlichen Reihenfolge ab. In diese Systematik passt auch die Betätigung der Umschalt- und Sonderfunktionstasten. Mit ziemlicher Sicherheit gibt es keinen: Taste-X-und-Taste-Y-gedrückt-Befehl. Ist ja auch nach der obigen Systematik nicht notwendig - außer bei Alzheimer. Ob die Auswertung der Wiederholfunktion im Rechner (System) oder in der Tastatur geschieht, weiß ich nicht.
Reinhard Kern schrieb: > PC-Tastaturen arbeiten mit Make/Break-Codes, und zwar für alle Tasten, > auch Shift, Ctrl usw. Hallo Reinhard, so weit ich weiß, gilt das für seriell oder PS/2. Bei USB werden ganze Datenblöcke übertragen, wo der Tastaturstatus schon mit enthalten ist (shift, ctrl, caps usw.) Ich habe es noch nicht selbst implementiert, aber bin mir relativ sicher, daß es bei USB anders ist als bei PS/2. Wenn ich mich irre, sag es bitte.
Bernd S. schrieb: > Ich habe es noch nicht selbst implementiert, aber bin mir relativ > sicher, daß es bei USB anders ist als bei PS/2. > Wenn ich mich irre, sag es bitte. Du hast recht. http://www.usb.org/developers/devclass_docs/HID1_11.pdf Besonders lesenswert: Appendix C. Es gibt kein make/break bei USB keyboards.
Danke für das PDF. Ich hatte noch kein Dokument dazu. Und selbst auch noch nicht implementiert. Aber irgendwann kommt man mal in die Lage, es zu brauchen. Danke!
Gaming Tastaturen können sowas. Die guten (teuren ) haben eine Angabe wieviel Tasten gleichzeitig gedrückt werden können (Anti-Ghosting). so ca. 10-26 Tatsen kann man da gleichzeitig drücken.
Bernd S. schrieb: > Ich habe es noch nicht selbst implementiert, aber bin mir relativ > sicher, daß es bei USB anders ist als bei PS/2. Laut Lattice hast du recht, schön, wieder was gelernt, weniger schön: bisher konnte man per Treiber JEDE Taste ändern, das geht dann mit USB nicht mehr. Auch nicht schön: was ist bei Dauerdruck? Autorepeat? Ist aber auch nicht so das Wahre. Bei Embedded Geräten habe ich gern mal Tasten, die man 5 s drücken muss, z.B. zum Speichern oder Resetten. Gruss Reinhard
Reinhard Kern schrieb: > > Auch nicht schön: was ist bei Dauerdruck? Autorepeat? Ist aber auch > nicht so das Wahre. Bei Embedded Geräten habe ich gern mal Tasten, die > man 5 s drücken muss, z.B. zum Speichern oder Resetten. Hallo Reinhard, ja, weiter oben steht ein Link zu einem PDF, das werde ich mir mal bei Gelegenheit durchlesen. Aber ich denke mal, bei einer USB-Tastatur wird die Auswertung softwareseitig auf dem PC gemacht. Und die über USB empfangenen Daten müssen doch auch irgendwie ausgewertet werden. Sicher gibts kein Make und Break mehr, aber wenn man sich die Daten anschaut, kriegt man doch raus, ob eine bestimmte Taste gedrückt ist. Wenn sie im nächsten Datenpaket immer noch gedrückt ist, wurde sie festgehalten. Irgendwann taucht sie im Datenpaket nicht mehr auf, dann wurde sie losgelassen. Ist halt ein "Polling" der USB-Daten nötig. Zumindest stelle ich mir auf die Art eine Lösung vor. Aber das ist nur Spekulation. Ich muß mich erstmal mit dem PDF befassen (und es vor allem verstehen!) :-)
Reinhard Kern schrieb: > Auch nicht schön: was ist bei Dauerdruck? Autorepeat? Ist aber auch > nicht so das Wahre. Bei Embedded Geräten habe ich gern mal Tasten, die > man 5 s drücken muss, z.B. zum Speichern oder Resetten. Sollte aber gehen: > Non-modifier keys must be reported in Input (Array, Absolute) items. > Reports must contain a list of keys currently pressed and not > make/break codes (relative data). > The keyboard must support the Idle request. > The keyboard must send data reports at the Idle rate or when receiving > a Get_Report request, even when there are no new key events. Wenn ich richtig lese: das Keyboard muß mindestens in festen Abständen (Idle rate) oder auf Anfrage (Get_Report request) eine Liste aller gedrückten Tasten melden. Daraus kann man feststellen, welche Taste wielange gedrückt ist. Etwas weiter unten findet man auch: > If two or more keys are reported in one report, their order is > indeterminate. MfG Klaus
Bernd S. schrieb: > Aber ich denke mal, bei einer USB-Tastatur wird > die Auswertung softwareseitig auf dem PC gemacht. Da ich gerade den Text offen habe: > “Repeat Rate” and “Delay Before First Repeat” are implemented by the > host and not in the keyboard (this means the BIOS in legacy mode). > The host may use the device report rate and the number of reports to > determine how long a key is being held down. Alternatively, the host > may use its own clock or the idle request for the timing of these > features. MfG Klaus
Hallo Klaus, danke für deine Hinweise. Du hast also schon mehr gelesen als ich. Es scheint also schon in etwa so zu funktionieren, wie ich es mir vorgestellt habe. Aber die Einzelheiten muß man mal noch rauskriegen. Vielleicht kann der Fragesteller (der mit dem langen Namen ;-) mal versuchen, die Geschichte zu implementieren und dann im Forum über seine Erfahrungen berichten. Theoretisch müßte es eigentlich funktionieren, wenn man das in Betracht zieht, was wir jetzt schon wissen. Auch lange Tastendrücke, mehrere Tasten usw. Ist eben nur ein wenig mehr Aufwand auf der PC-Seite. Auch Tasten ersetzen müßte gehen, wenn man sich zwischen BIOS und Windows hängt und die Informationen abfängt und/oder manipuliert. Wenn es rein im Windows wäre, würde das bestimmt über Messages gemacht. Da kann man sich auf jeden Fall reinhängen. Aber ich denke, das BIOS kann bestimmt nicht mit Messages arbeiten. Muß also die Daten anders ans Windows (oder andere Betriebssysteme) übergeben. Eventuell emuliert ja das BIOS eine "normale" Tastatur?? Ich mach mich mal schlau... Wenn ich mich mit dem PDF beschäftigt habe und neue Erkenntnisse auftauchen, kann ich das gerne hier im Forum mitteilen.
Wegen Key remapping siehe hier: (Kapitel 10) http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf Zitat: A general note on Usages and languages: Due to the variation of keyboards from language to language, it is not feasible to specify exact key mappings or every language. Where this list is not specific for a key function in a language, the closest equivalent key position should be used, so that a keyboard may be modified for a different language by simply printing different keycaps. One example is the Y key on a North American keyboard. In German y this is typically Z. Rather than changing the keyboard firmware to put the Z Usage into that place in the descriptor list, the vendor should use the Y Usage on both the North American and German keyboards. This continues to be the existing practice in the industry, in order to minimize the number of changes to the electronics to accommodate other languages. In dem ersten Dokument sind die Anhänge B und E wichtig für Keyboards. Daraus geht u.A. hervor dass in der BIOS kompatiblen Version (BOOT Protocol) nur ein Key neben den Modifier-Keys (CTRL,Shift,... ) übertragen werden kann. Die Modifier-Keys (224-231) werden übrigens als bits übertragen und nicht mit ihrem Wert. Für eigene Spielereien kann man das auch für andere Tasten machen, alles eine Frage der Descriptoren.
Bernd S. schrieb: > Eventuell emuliert ja das BIOS eine "normale" Tastatur?? Das BIOS benutzt die Tastatur, ist froh wenn es sie versteht, für wen sollte das BIOS was emulieren? Windows oder Linux benutzen schon lange keine BIOS-Funktionen mehr, sondern eigene Treiber. Ausnahme wäre MSDOS auf einem modernen PC, dafür gibt es möglicherweise eine "legacy" Einstellung, aber das ist wohl nicht mehr so relevant. Eine andere interessante Frage ist, an welchem Punkt klassische und USB-Tastaturen vereinheitlicht behandelt werden, ich kann mir nicht vorstellen, dass die ganze komplexe Behandlung nationaler Besonderheiten zweimal implementiert wird. Findet man sicher im MSDN, danach habe ich ich nur noch nie gesucht. Ansonsten ist die Rückverwandlung von Status records zurück in Make/Break Events ziemlich einfach, wenn man an sie rankommt, aber wahrscheinlich muss man das garnicht - Windows generiert ja meines Wissens nach wie vor WM_Keydown und WM_Keyup Messages, sonst würde keine alte Software mehr funktionieren. Gruss Reinhard
Ich hatte den Text von Klaus gelesen und dort war eben nur vom BIOS die Rede. Deswegen dachte ich, daß im Falle von USB-Tastaturen eben das BIOS zwischengeschaltet wird, als Übersetzer sozusagen. Im Windows ist es logischerweise am einfachsten, wenn die Ereignisse als normale Messages auftauchen (was ich auch stark vermute). Dort kann man sich auf alle Fälle reinhängen und alles auswerten bzw. auch abfangen und modifizieren. Klingt doch eigentlich ganz gut bis jetzt :-) Was mir übrigens gerade auffällt: Der TO hat ganz am Anfang die Frage gestellt und sich seitdem nicht mehr gemeldet. Interessiert er sich nicht mehr für das Thema? Aber macht nichts, wir haben ja schon einige Erkenntnisse erzielt, das ist doch auch was wert, oder?
Bernd S. schrieb: > Was mir übrigens gerade auffällt: Der TO hat ganz am Anfang die Frage > gestellt und sich seitdem nicht mehr gemeldet. Interessiert er sich > nicht mehr für das Thema? Der hat das gepostete HID-Dokument gelesen und weiss jetzt bescheid.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.