Rohdaten eines "USB Human Interface Device" auslesen/verarbeiten
Posted: 07. Jul 2009 21:39
Hallo Forum,
ich stehe vor einem kleinen Problem, bei dem ich hier ein paar Anregungen erfragen wollte. Kurz gesagt: Ich würde gerne von einem USB-HID (eine 6-Achsen "Space Maus") die Eingabedaten direkt in einem (Userspace)-Programm auswerten können. Mit so einem Ding ist es möglich, alle 6 Freiheitsgrade in einem Eingabegerät zu nutzen. Es gibt Linux Treiber, wenn ich die Space Maus einstecke funktioniert sie direkt als Eingabegerät.
Auf welchem Weg komme ich nun aber an die direkten "Rohdatenpakete"? Mich interessiert statt der jeweiligen Mauszeigergeschwindigkeit in der Richtung eines Freiheitsgrades eher dessen Ableitung/Position -- aber das ist eigentlich nur ein "verrechnen" der Rohdaten. Als normale Maus soll das Ding gar nicht arbeiten, sondern voll meinem Programm gehören. Zu beachten ist, das das Gerät an einem embedded-System betrieben wird, sprich an Infrastruktur so gut wie nichts vorhanden ist (kein X-Server!).
Welche Schnittstelle im System könnte man am besten anzapfen? Wenn das ganze mit möglichst wenig Anpassungen am Kernel möglich ist, umso besser -- spricht im Userspace würd ich gerne bleiben, mit C komme ich halbwegs zurecht. Mit einem USB-Sniffer (usbmon/whireshark) konnte ich schon mal ein bisschen mithorchen, ist natürlich unpraktisch auf Dauer...
Könnte mir jemand Hinweise geben, in welche Richtung, bei welchen Werkzeuge und bei welchen Schnittstellen ich mich am ehesten umgucken könnte?
Um das Bild abzurunden, hier nochmal kurz die Syslogmeldungen für das ein/ausstecken:
Vielen Dank und mit allerbesten Grüßen
Der Bunnyman
ich stehe vor einem kleinen Problem, bei dem ich hier ein paar Anregungen erfragen wollte. Kurz gesagt: Ich würde gerne von einem USB-HID (eine 6-Achsen "Space Maus") die Eingabedaten direkt in einem (Userspace)-Programm auswerten können. Mit so einem Ding ist es möglich, alle 6 Freiheitsgrade in einem Eingabegerät zu nutzen. Es gibt Linux Treiber, wenn ich die Space Maus einstecke funktioniert sie direkt als Eingabegerät.
Auf welchem Weg komme ich nun aber an die direkten "Rohdatenpakete"? Mich interessiert statt der jeweiligen Mauszeigergeschwindigkeit in der Richtung eines Freiheitsgrades eher dessen Ableitung/Position -- aber das ist eigentlich nur ein "verrechnen" der Rohdaten. Als normale Maus soll das Ding gar nicht arbeiten, sondern voll meinem Programm gehören. Zu beachten ist, das das Gerät an einem embedded-System betrieben wird, sprich an Infrastruktur so gut wie nichts vorhanden ist (kein X-Server!).
Welche Schnittstelle im System könnte man am besten anzapfen? Wenn das ganze mit möglichst wenig Anpassungen am Kernel möglich ist, umso besser -- spricht im Userspace würd ich gerne bleiben, mit C komme ich halbwegs zurecht. Mit einem USB-Sniffer (usbmon/whireshark) konnte ich schon mal ein bisschen mithorchen, ist natürlich unpraktisch auf Dauer...
Könnte mir jemand Hinweise geben, in welche Richtung, bei welchen Werkzeuge und bei welchen Schnittstellen ich mich am ehesten umgucken könnte?
Um das Bild abzurunden, hier nochmal kurz die Syslogmeldungen für das ein/ausstecken:
Code: Select all
Jun 12 10:30:24 my kernel: [ 3136.177077] usb 1-2: new low speed USB device using uhci_hcd and address 2
Jun 12 10:30:25 my kernel: [ 3136.407889] usb 1-2: configuration #1 chosen from 1 choice
Jun 12 10:30:25 my kernel: [ 3136.561319] usbcore: registered new interface driver hiddev
Jun 12 10:30:25 my kernel: [ 3136.761357] input: 3Dconnexion SpaceNavigator as /devices/pci0000:00/0000:00:1d.0/usb1/1-2/1-2:1.0/input/input9
Jun 12 10:30:25 my kernel: [ 3136.763306] generic-usb 0003:046D:C626.0001: input,hidraw0: USB HID v1.10 Multi-Axis Controller [3Dconnexion SpaceNavigator] on usb-0000:00:1d.0-2/input0
Jun 12 10:30:25 my kernel: [ 3136.763358] usbcore: registered new interface driver usbhid
Jun 12 10:30:25 my kernel: [ 3136.763365] usbhid: v2.6:USB HID core driver
Jun 12 10:31:00 my kernel: [ 3171.594255] usb 1-2: USB disconnect, address 2
Der Bunnyman