[C] libusb Verständnisprobleme

Ich wollte mir mal eine wenig das Thema USB Ansteuerung näher bringen. Als Testobjekt wollte ich dazu einen XBOX360 Controller nehmen.

Ich hab mir die Docs angeschaut und bin bis jetzt so weit gekommen, das richtige device zu finde, zu öffnen und zu claimen.

Jetzt habe ich mir das so vorgestellt, dass man Daten von dem Controller empfangen kann und je nach dem was für Daten das sind, dafür stehen ob z.B. kein Knopf gedrückt wird, der A oder B Knopf gedrückt ist, oder losgelassen ist, etc...

Ich weiß nicht, ob ich mir das jetzt schon ganz falsch vorstelle, aber falls nicht, verstehe ich den Unterschied zwischen folgenden Funktionen nicht, und welche ich benötige, beziehungsweise welche so wirklich für was steht...

- usb_get_string
- usb_get_string_simple
- usb_get_descriptor_by_endpoint
- usb_bulk_read
- usb_interrupt_read

Es steht in einem Satz unten drunter, aber ich verstehe es einfach nicht.

Bitte um Hilfe in diesem Thema
 
Zuletzt bearbeitet:
Die Doku gibt doch ausreichend Hinweis darauf, was die Unterschiede zwischen den Funktionen sind. So liefert dir usb_get_string z.B. den String als als Unicode, während du ihn von usb_get_string_simple als ASCII bekommst.

http://libusb.sourceforge.net/doc/function.usbgetstring.html
http://libusb.sourceforge.net/doc/function.usbgetstringsimple.html
http://libusb.sourceforge.net/doc/function.usbgetdescriptorbyendpoint.html
http://libusb.sourceforge.net/doc/function.usbbulkread.html
http://libusb.sourceforge.net/doc/function.usbinterruptread.html

Wenn dir das nicht reicht, dann beschreibe bitte genauer, was du nicht verstehst. Die Unterschiede sollten aber schon anhand der in buf eingelesenen Daten und den Parametern der Funktion klar werden. Ggf. hilft es dir auch mal einen Blick in die testlibusb.c aus den Sources zu werfen. Und auch Beispiele wie http://www.hasanen.com/?p=6 oder http://www.cs.indiana.edu/~bpisupat/work/oc_usb.c könnten evtl. hilfreich für's Verständnis sein.
 
Ich verstehe 1. noch überhaupt nicht, was man unter einem endpoint versteht
2. klappt es bei mir mit bulk_read nicht, ich bekomme immer 0 zurück.
Wenn ich es richtig verstehe ist 0 ja kein error return. Aber halt 0^^
 
Den Endpoint kannst du dir als Buffer vorstellen, der oberhalb der Host-Ebene/des Bus liegt. Da eine Firmware/ein Treiber nicht direkt auf die vom Host kontrollierten Buffer/den Bus schreiben kann, schreibt sie/er in einen Endpoint. Dort bleiben die Daten solange liegen, bis der Bus sie sich durch senden eines IN-Pakets abholt.

Ich denke zum Verständnis des USB-Subsystems könnte dir http://www.beyondlogic.org/usbnutshell/ weiterhelfen.
 
Ich hab noch nicht mit der libusb gearbeitet, da ich Treiber bisher nur im Kernelspace entwickelt habe. So wie ich das in der API-Doku aber sehe, ist der Endpoint bei der libusb als Teil der interface-Struktur definiert und also auch darüber (interface->endpoint) ansprechbar.
 
Zurück
Oben