Hello Jie,
On Sunday, 14. February 2010 12:17:58 Jie Zhang wrote:
On Sun, Feb 14, 2010 at 5:58 PM, Jim Paris<jim@xxxxxxxx> wrote:
+#ifdef __linux__
+ /* We can't set readbuffer_chunksize larger than
MAX_BULK_BUFFER_LENGTH, + which is defined in libusb-1.0.
Otherwise, each USB read request will + be divided into
multiple URBs. This will cause issues on Linux kernel + older
than 2.6.32. */
+ if (chunksize> 16384)
+ chunksize = 16384;
Shouldn't this be
+ if (chunksize> MAX_BULK_BUFFER_LENGTH)
+ chunksize = MAX_BULK_BUFFER_LENGTH;
MAX_BULK_BUFFER_LENGTH is a macro defined in an internal header file
in libusb. So we can't use it here.
Hmm, here's a comment from libusb 1.0:
/* usbfs places a 16kb limit on bulk URBs. we divide up larger requests
* into smaller units to meet such restriction, then fire off all the
* units at once. it would be simpler if we just fired one unit at a
time,
* but there is a big performance gain through doing it this way. */
int num_urbs = transfer->length / MAX_BULK_BUFFER_LENGTH;
Just guess what happens if the usbfs restriction is resolved
and libusb adjusts the interface... this -will- break.
Is there some data structure we could read out?