Forum: Mikrocontroller und Digitale Elektronik USB-Maus am AVR auslesen (Bedeutung der Daten)


von Ralf (Gast)


Lesenswert?

Hallo,

ich versuche eine USB-Maus auszulesen. Dabei bekomme ich letztlich vier 
Bytes uebertragen.

1. Byte: 0: keine Taste gedruckt, 1: linke Taste gedrueckt, 2: rechte 
Taste gedruckt, 4: Mausrad gedrueckt

4. Byte: 0: Mausrad bewegt sich nicht, 1: Mausrad wird nach oben 
gedreht, FF: Mausrad wird nach unten gedreht

2. Byte: meistens FE, wenn die Maus nach links bewegt wird und meistens 
02, wenn die Maus nach rechts bewegt wird.

3. Byte: meistens FE, wenn die Maus nach oben bewegt wird und meistens 
02, wenn die Maus nach unten bewegt wird.

Daran stoert mich das "meistens". Manchmal bekomme ich eben auch andere 
Daten angezeigt. Vorallem wenn ich die Maus schnell bewege.

Gibt es irgendwo eine Beschreibung, was in den 4 Bytes letztlich 
drinsteckt? Die muss es doch eigentlich geben, ich suche aber schon 
ueber eine Stunde und habe nichts gefunden.

Besonders haeufig tauchen andere Werte bei schnellen Bewegungen und beim 
drehen der Maus auf.

Viele Gruesse
Ralf

von Achim (Gast)


Lesenswert?

Womit liest du ne USB Maus aus?
Aber das sieht sehr ähnlich aus wie das Protokoll bei PS/2 Mäusen und 
dazu liefert Google z.B. das: 
http://www.computer-engineering.org/ps2mouse/
Die XY Bewegungen werden als relativer Wert in 2er Komplementdarstellung 
übertragen. Wenn du die gesendeten Werte aufaddierst bekommst du eine 
absolute Position, die mehr Sinn ergeben sollte.

von Schwurbl (Gast)


Lesenswert?

Wenn Du es schaffst, eine USB-Maus auszulesen, hast Du demnach mit dem 
AVR einen USB-Host aufgebaut, die Maus enumeriert und bekommst bereits 
die Reports von der Maus. Das ist respektabel. Da frage ich mich, wieso 
Du noch so eine einache Frage stellst :-)

Die Bedeutung der Bits ist im HID Descriptor verzeichnet, den Du 
theoretisch beim Enumerieren dekodieren müßtest. Anhand dieser Info 
musst Du dann die entsprechenden HID Usages abklappern:

http://www.usb.org/developers/devclass_docs/Hut1_12.pdf

Vielleicht steht im Dokument schon ein fertiger dokumentierter Maus 
Descriptor.

Andererseits siehst Du die Bytes eh schon: Im Endeffekt wird es so sein, 
dass die Maus die Daten so schnell übertragen kann, dass jede Bewegung 
um ein Pixel einen Report zur Folge hat. Immerhin kann die Maus im 
Millisekundentakt Daten senden. Je nach Geschwindigkeit ändert sich 
jedoch die Häufigkeit der Sendung. Wenn's noch schneller wird, werden 
dann auch größere positive oder negative Werte übertragen.

von Ralf (Gast)


Lesenswert?

Danke fuer die Links. Und ich gebe zu ich habe einen 
USB/RS232-Converter.

Ich will erst wissen, ob alles so funktioniert wie ich es mir vorstelle 
bevor ich auf den Converter verzichte.

(Der Converter ist derzeit mein Laptop ;))

von Florian H. (trapperjohn)


Lesenswert?

Das "Verzichten auf den Converter" dürfte ein viel größeres Problem 
sein, da die Kommunikation zu USB-Geräten sehr aufwändig ist.

Du könntest einen Vinculum Chip nutzen, der sollte auch HID Geräte 
auslesen können (sagt zumindest das Firmware Manual), aber das müsstest 
du wohl erst noch selbst ausprobieren.

von Matthias (Gast)


Lesenswert?

>Du könntest einen Vinculum Chip nutzen, der sollte auch HID Geräte
>auslesen können (sagt zumindest das Firmware Manual), aber das müsstest
>du wohl erst noch selbst ausprobieren.
Er kann zumindest den USB Raketenwerfer bedienen, und der ist wohl ein 
HID ;-)

von Florian H. (trapperjohn)


Lesenswert?

Hehe, okay :D

von Guido Körber (Gast)


Lesenswert?

USB zu seriell Adapter???

Was die Daten angeht: Die Achsendaten enthalten jeweils die Impulse seit 
dem letzten Datenpaket als vorzeichenbehafteter Wert. Also sollte da 
tunlichst was anderes rauskommen wenn sich die Maus schneller bewegt.

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.