Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : USB GadgetFS + FunctionFS: read() von Endpoint 1 bündelt Packete



Mowlwurf
02-07-2019, 08:52
Hallo zusammen,

ich versuche mich in letzter Zeit daran, ein SOM mit einem iMX7 als USB-Device an einem Windows 10-Rechner mit den WinUSB-Treibern anzumelden.
Betrieben wird das SOM mit einem Yocto-Linux (Angstrom) mit Kernelversion 4.9.166. ConfigFS ist im Kernel aktiviert und libcomposite wurde geladen.

Bein bisheriger Stand ist, dass ich mit libusbgx das Gadget einrichten, das FunctionFS mounten und schlussendlich Endpoint 0 mit den USB-Deskriptoren beschreiben kann. Das SOM meldet sich erfolgreich unter Windows mit den Endpoints 0 und 1 an und der WinUSB-Treiber wird draufgeschaltet.

So weit so schön.

Mein Problem ist nun das Lesen von Endpoint 1.
Ich öffne ihn mit


int ep_fd = open("/ffs/ep1", O_RDWR);

und lese von ihm mit


unsigned char buffer[65535];

int ret = read(ep_fd, buffer, sizeof(buffer));


Die read()-Funktion kommt aber nur aller 4 empfangener USB-Pakete zurück. Dabei ist es unerheblich, ob ich 4 Datenpakete oder 1 Daten- und 3 Zero-Pakete schicke. Auch die Größe der Pakete spielt keine Rolle.

Ein anderes SOM mit einem Snapdragon 410 von Qualcomm zeigt dasselbe Verhalten.

Weiß jemand, wie ich den Endpoint so konfigurieren kann, dass ich auch ein einzeln empfangenes USB-Paket aus dem Endpoint auslesen kann? Nach jedem Paket 3 Zero-Pakete schicken zu müssen fände ich jetzt nicht so elegant ...

Viele Grüße,
Mowlwurf