Hi
I have written a USB driver, that manages 2 bulk pipes (In/Out) It works
great for all transfers that are less than 0x4000.
It basically handles Bulk I/O requests over USB for 2 pipes (IN/OUT). It
does this by taking the initial request, checking if it is >
MaximumTransferSize. If it is >, It does the I/O in stages by sending a
MaximumTransferSize IN request to the lower USB layers. When Its callback
routines (OnReadWriteComlete()) gets called it updates some buffer pointers
and counters and re-submits the request down for each request. Once the
overall I/O request is complete it returns.
Now:
When my app attempts to read data from my device that is > than 0x4000, the
OnReadWrite Callback successfully transfers the first 0x4000 bytes, but
never returns after that.
So For Example:
For a 50 K transfer
If I set my MaximumTransferSize on the Pipe to PAGE_SIZE (0x1000)
I will get 4 Successful calls into the USB Class Driver, Which calls my
OnReadWriteComplete() callback and returns me 0x1000 bytes each time. When I
attempt the 5th 0x1000 byte request my OnReadWriteComplete() call never gets
called, and the driver just locks up waiting to be called by the lower USB
class driver. and the only way I can cancel the IRP is by removing the
device. (Then OnReadWrite gets called, but with a status canceled)
If I set my MaximumTransferSize on the Pipe to 0x4000
I will get one successful call into the USB class driver returning 0x4000
bytes, but again on the next 0x4000 byte request I never hear back from the
class driver
If I set my MaximumTransferSize on the Pipe to 0x4001 I get a buffer overrun
(As I would expect since it has to read 64 byte packets)
**BUT**
By setting the MaximumTransferSize to 1Meg, which is much greater than any
data I would ever receive from the device, the transfer works great. The
only reason I say this is the device IS sending all the data to me.
Anyone know what the USB class driver is doing under the hood with my
request? Any ideas as to what would cause it to just not return ? My
hardware guy hooked it up to his bus analyzer and says the host just stops
requesting data from him. From what I can tell the USB class driver is
locking up or something because I am not the one who stopped the transfer
Any Suggestions anyone could offer would be greatly appreciated.
Thanks !
-Chris