Forum: Mikrocontroller und Digitale Elektronik USB: Ist es möglich 2 Tasteneingaben eines HID parallel über USB zu senden


von USB Senden von 2 Tasteneingaben eines HID parallel (Gast)


Lesenswert?

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

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

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

von Karlheinz (Gast)


Lesenswert?

Hallo,

schau mal bei "Teensy" vorbei, was die so an Beispielen haben
http://www.pjrc.com/teensy/usb_keyboard.html

von Reinhard Kern (Gast)


Lesenswert?

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

von amateur (Gast)


Lesenswert?

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.

von Bernd S. (bernds1)


Lesenswert?

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.

von Lattice User (Gast)


Lesenswert?

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.

von Bernd S. (bernds1)


Lesenswert?

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!

von Uwe (Gast)


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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

von Bernd S. (bernds1)


Lesenswert?

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!) :-)

von Klaus (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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

von Bernd S. (bernds1)


Lesenswert?

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.

von Lattice User (Gast)


Lesenswert?

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.

von Reinhard Kern (Gast)


Lesenswert?

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

von Bernd S. (bernds1)


Lesenswert?

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?

von Pit (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.