www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB Keyboard falsch ausgewertet.


Autor: Christoph K. (chris28)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: muhschrott (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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();

Autor: Guido Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris28 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph K. (chris28)
Datum:

Bewertung
0 lesenswert
nicht 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_i...

grüße Christoph

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.