On Wed, 14 Sep 2005, Giridhar Pemmasani wrote: > I haven't been able to understand why the transfers fail under Linux whereas > it works fine under Windows (note that I am using the same Windows driver > in Linux, albeit with ndiswrapper). All URBs exchanged until the failed URB > seem to be identical. The URB that fails is 2400 bytes long bulk IN URB. I > am wondering if the timeout is due to large(?) buffer, considering it is > running as full speed device and not high speed device (see earlier post > about initialization issues). That is, if Windows driver asks to read 2400 > bytes, would it help to split it as two URB requests, each of length 1200 > bytes and when second URB is completed, copy both buffers back into Windows > driver's buffer.
That doesn't sound like a good idea. At full speed, the device will transfer a 2400-byte blk-IN URB using 37 64-byte packets plus a short 32-byte packet at the end. If you try to split it up into two 1200-byte URBs, the host will expect to receive 18 64-byte packets followed by a short 48-byte packet for each URB. When the 19th packet arrives and is 64 bytes long instead of 48, you'll get an EOVERFLOW error. > This makes ndiswrapper more complicated, especially with > error processing, but I will try at least as a first cut to see if this > helps. Please let me know if you have any suggestions/ideas to fix this > issue. If all the URBs really are identical then the device ought to behave in the same way. You should doublecheck all those previous URBs. Alan Stern ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel