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
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.