Android USB Host API: Größe des Bulk Transfer Puffers

Ich schreibe Software anKommunikation zwischen Tablet (Motorola Xoom mit Android Version 4.0.3 und Kernel Version 2.6.39.4)und ein Peripheriegerät, das die USB-Host-API verwendet bereitgestellt von Android. Ich benutze nur zwei Arten der Kommunikation:

Steuerung: controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)Masse: bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

Steuerübertragung funktioniert gut, aber ich habeEin Problem bei der Massenübertragung. Ich kann nur 32768 als Größe des Puffers für die bulkTransfer-Funktion verwenden. Es ist nicht möglich, weniger oder mehr zu verwenden. Ich weiß, dass ich wegen der Begrenzung der Pufferpipe (Größe: 32769 Bytes) nicht mehr verwenden kann.

Dieses Peripheriegerät überträgt Daten, die von der bulkTranfer-Funktion nicht korrekt gelesen wurden. Ich nehme an, dass einige Daten verloren gehen.

Ich finde das:Unter Linux Wenn ein Prozess versucht, aus einer leeren Pipe (Puffer) zu lesen, wird read (2) blockiert, bis Daten verfügbar sind. Wenn ein Prozess versucht, in eine vollständige Pipe zu schreiben, blockiert write (2), bis genügend Daten aus der Pipe gelesen wurden, damit der Schreibvorgang abgeschlossen werden kann.

Darauf aufbauend erkläre ich das Problem damit, dass einige Daten nicht in die Pipe (Puffer) geschrieben werden, weil das von der Funktion write (2) erzeugte Blockierungsflag verwendet wird. Hab ich recht? Wenn dies zutrifft, könnte ich den Pipe-Puffer ändern.

Meine erste Lösung für dieses Problem ist ein größerer Puffer.Für Kernel> = 2.6.35 können Sie die Größe einer Pipe mit ändernfcntl(fd, F_SETPIPE_SZ, size) aber wie kann ich findenfd (Dateideskriptor) für USB-Pipes?Die zweite Option ist zu verwendenulimit -p SIZE aber Parameterp denn mein kernel ist nicht für pipe sondern für process.

Hat jemand das gleiche Problem, irgendwelche Lösungen konfrontiert?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage