On 02/15/2010 05:36 PM, Thomas Jarosch wrote:
Hello Jie,
On Sunday, 14. February 2010 12:17:58 Jie Zhang wrote:
On Sun, Feb 14, 2010 at 5:58 PM, Jim Paris<[email protected]> 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?
AFAIK, no.
Or include the internal header file during the build
stage of libftdi to determine the value?
But the internal header file is not installed. We can't require source
code of libusb is available when building libftdi. But I think we can
ask on libusb mailing list if it's OK to move the macro definition out
to libusb.h. I will do that.
Jie
--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to [email protected]