Hallo! Ich bastel gerade an einem USB-Joystick und habe das Problem,
dass das Gerät nicht erkannt wird...
Testweise lese ich ein Poti am ADC1-Eingang aus und möchte dieses als
eine Joystick-Achse von Windows erkennen lassen. Ich vermute mal der
Report-Descriptor ist falsch:
Habe mal mit dem "USB Device Tree Viewer" nachgeguckt, das USB-Gerät
wird zwar als HID erkannt, aber mit dem "Problem-Code: 10
(CM_PROB_FAILED_START)"...
Schau dir mal andere Joystick Projekte an:
http://www.obdev.at/products/vusb/prjhid.html
Hast du in usbconfig.h die richtige Länge des Descriptors auch
eingestellt?
Hier ist mal der Descriptor für eine Maus mit absoluten Koordinaten (HID
Adapter für ein serielles Tablett mit 3 von 4 Buttons, mehr gehen
nicht), vllt. hilft das ja auch - zumindest für die absoluten
Koordinaten:
Hast du schon einmal mit anderem Report Descriptor herumprobiert? Wenn
ich mich richtig erinnere, merkt sich Windows leider den Report
Descriptor anhand von VID/PID. Also wenn du den änderst, bringt das
erstmal nichts. Du musst den Report Descriptor aus der Registry löschen.
Google mal danach. Alternativ kannst du einfach die PID hochzählen o.ä.
Hallo! Habe das ganze mal getestet, leider wird das USB-Gerät nicht
erkannt... Habe die C-sourcen auf meinen Aufbau angepasst und
kompiliert, das USB-Gerät wird auch enumeriert, aber trotzdem nicht
unter den "USB-Gamecontrollern" in Windows angezeigt...
Reicht es grundsätzlich, bei einem V-USB-Tastaturprojekt (zB der
"EasyLogger") den Report Descriptor auf einen 1-Achsen-Joystick zu
ändern und anstatt des Tastatur-Keys eine 8-Bit-Zahl (die den Achsenwert
darstellen soll) zu übergeben?
CC schrieb:> Reicht es grundsätzlich, bei einem V-USB-Tastaturprojekt (zB der> "EasyLogger") den Report Descriptor auf einen 1-Achsen-Joystick zu> ändern und anstatt des Tastatur-Keys eine 8-Bit-Zahl (die den Achsenwert> darstellen soll) zu übergeben?
Nein. GameController sind eine andere Klasse und z.B. einer Maus
ähnlicher als einem Keyboard. Der Descriptor muss dazu u.a. (und
deswegen habe ich dir oben den Descriptor gepostet) den Wertebereich des
'analogen' Signals angeben, in PHYSICAL_MINIMUM und PHYSICAL_MAXIMUM.
Versuche mal das USB Descriptor Tool (
http://www.usb.org/developers/hidpage/dt2_4.zip )
Da sind auch Beispiele dabei, incl. Joystick.
Hat mir damals auch geholfen, als ich einen einfachen USB-Touchopanel
Descriptor brauchte.
Wenn Du dann verinnerlicht hast, wie so ein Descriptor aufgebaut ist,
klappt das auch besser mit dem eigenen Descriptor.
So erging es mir jedenfalls.
Ach noch was, wie sieht eigentlich die Hardware aus?
Hatte mal ein Problem mit einem Chinamodul (ATMega32), wo man erst eine
Brücke reinmachen musste, damit USB lief. Wenn ich das nicht zufällig
gefunden hätte, wäre das Board in die Tonne gewandert.
Das Board hat 5 Taster und 8 LEDs und es steht JY-MCU JY-MEGA16/32 Demo
V1.3 auf der Unterseite. Hatte das mal geholt, weil die auch 'nen JTAG
Connector haben.
Hallo!
Das mit dem Descriptor habe ich nun soweit verstanden, habe zum testen
einen Descriptor (von hier:
http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/) für
ein Gamepad genommen, mit dem Descriptor-Tool geschrieben und einfach
damit den Descriptor des "Easyloggers" ersetzt (und natürlich die
DESCRITPTOR_LENGTH und andere Werte in der usbconfig.h angepasst).
Das Gerät müsste nun ja zumindest von Windows als Gamecontroller erkannt
werden, es wird aber merkwürdigerweise immer noch als HID-Tastatur
erkannt...
Reicht es also aus, nur den Report Descriptor zu ändern um ein anderen
Gerätetyp zu erhalten oder muss ich noch mehr ändern (zB die
usbFunctionSetup()-Funktion oder das ReportBuffer[]-Array)?
CC schrieb:> Das mit dem Descriptor habe ich nun soweit verstanden,
Ich glaub nicht. Du sprichst immer allgemein vom Descriptor, meinst aber
den Report bzw. HID Descriptor. Wahrscheinlich musst du mindestens noch
den Interface Descriptor anpassen... InterfaceClass, InterfaceSubClass &
InterfaceProtocol
http://www.beyondlogic.org/usbnutshell/usb5.shtml#InterfaceDescriptors
Also ich würde jetzt erstmal eine funktionierende/existierende Software
(z.B. von dem o.g. USB-Joystick) versuchen, um herauszufinden, ob die
Hardware USB-seitig funktioniert und erkannt wird.
In der V-USB Projektsammlung wird es ja wohl was geben, was auf Deiner
Hardware, zu der Du noch immer kein Wort verraten hast, läuft oder
leicht angepasst werden kann.
Moin,
wie gesagt, die Software von dem o.g. Joystick funktioniert soweit,
umfasst aber erheblich mehr als ich brauche, ein einfaches Ändern ist
aber nicht möglich, schon wegen der Datenstruktur, Report Descriptor
usw.
@Putin: Das mit dem Interface Descriptor klingt gut, leider hat Google
da nichts brauchbares zu gefunden... An die V-USB Experten: Ist so ein
Descriptor (zusätzlich zum Report-Descr.) nötig, wenn ja wo kann ich ihn
in der V-USB-Bibliothek ändern?
Gruß,CC