Forum: Mikrocontroller und Digitale Elektronik USB Keyboard falsch ausgewertet.


von Christoph K. (chris28)


Lesenswert?

Hallo Leute,

wir haben eine USB Tastatur angebaut (mit AT90USB162), es funktioniert 
auch alles soweit einwandfrei! Nun wie Tastenauswertung wird nicht vom 
Treiber übernommen was heißen soll, dass der Tasten-Repeat, Tasten-Delay 
etc. nicht von MS-HID Treiber übernommen wird. Die Tastatur wird zwar 
einwandfrei erkannt und funktioniert auch, jedoch wenn ich eine Taste 
drücke kommt gleich ein ganzer Haufen von Tasten. Das Pollingtime vom 
USB passt aber ...

Hat hier jemand eine Idee, woran das liegen könnte, vielleicht Hr. 
Sauter??
Hab auch im Wiki eine Info gefunden, dass im BIOS ein Keyboardemulator 
drin ist, der die Umsetzung von USBKey in Scancodes (make/break) 
durchführt ... vielleicht ist ja hier ein Zusammenhang??

Reportdescriptor und HID_Descriptor wurde bereits kontrolliert, kann 
aber keinen Fehler finden ...

Weiß hier jemand bescheid?

grüße
Christoph

von muhschrott (Gast)


Lesenswert?

gibst du in deinem code nach dem senden der taste die taste auch wieder 
frei?

das war bei mir damals das problem gewesen

also pseusocode maessig:

usb_send( key_a );
wait_until_send_ok();
usb_send( no_key );
wait_until_send_ok();

von Guido Körber (Gast)


Lesenswert?

Fragt sich ob da nicht eine fertige Lösung günstiger wäre, anscheinend 
ist ja noch eine ziemliche Lernkurve zu bewältigen. Windows hält 
übrigens einige "nette" Überraschungen für den USB Keyboard-Entwickler 
bereit.

Falls es also schneller gehen soll mit dem Projekt: www.codemercs.com
KeyWarrior anschauen.

von Chris28 (Gast)


Lesenswert?

Hallo Leute,


hab das Problem schon gefunden! Hab mal einen USB Keyboard ausgelesen 
und bin dann auf den Fehler draufgekommen:

Hab immer eine Taste geschickt und dann wieder "no key". Also wenn ich 
ein "a" gedrückt habe, habe ich
0x04 und dann 0x00 geschickt!

Windows HID Treiber möchte aber nur die Taste (0x04 zb für "a") einmal, 
solange die Taste gedrückt ist, erst wenn die Taste wieder losgelassen 
wird den 7 Byte Frame mit nur 0x00 schicken! ... den Rest macht wirklich 
der Treiber von selbst! ;-) .... also das Problem hat sich erledigt ...

Jetzt wird auch Keydelay und Keyrepeat von Windows übernommen! Derzeit 
ist der read_frame vm USB noch auszuwerten ....

grüße Christoph

von spess53 (Gast)


Lesenswert?

Hi

>Windows HID Treiber möchte aber nur die Taste (0x04 zb für "a") einmal,
>solange die Taste gedrückt ist, erst wenn die Taste wieder losgelassen

Bist du dir da wirklich sicher? Normalerweise besitzt jede Tast einen 
'Make-Code' für Taste drücken, und einen 'Break-Code' für Taste 
loslassen. Im allgemeinen entspricht der Break-Code dem Make-Code+$80. 
Das dient dazu, bei mehreren gedrückten Tasten, das Loslassen einer 
Taste eindeutig zu registrieren.

MfG Spess

von Christoph K. (chris28)


Lesenswert?

Hi Spess53,

ja, bin mir sicher! ... das mit Make und Break gibts nur bei PS/2! USB 
HIDs schicken und den Tastencode und den Rest macht der HID Treiber von 
Windows! Wie gesagt, haben auch eine "Standard" USB Tastatur ausgelesen 
und diese "nachgebildet" ....

Ist auch in der USB HID Spec. nachzulesen ... nur eben zum Tastenrepeat 
etc. findet man dort nichts! ....

http://www.usb.org/developers/hidpage/epoz_blank_iframe.html?charset=utf-8&css=&customcss=&pageurl=http://www.usb.org/developers/hidpage#Microsoft

grüße Christoph

von spess53 (Gast)


Lesenswert?

Hi

OK. Ich hatte nur die alte Tastaturverwaltung im Kopf. Die war vor 
USB-Zeiten.

MfG Spess

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.