I have multiple WinUsb_ReadIsochPipeAsap
in flight at a time and always queue the next one as soon as WinUsb_GetOverlappedResult
succeeds for the first. According to the documentation:
WinUsb_ReadIsochPipeAsap allows the USB driver stack to choose the starting frame number for the transfer. If one or more transfers are already pending on the endpoint, the transfer will be scheduled for the frame number immediately following the last frame number of the last currently pending transfer.
(emphasis added)
When I measure the data rate on the host (rate of read completion), I am only seeing a polling rate of 6ms (every 6th frame), even though the descriptor bInterval
is 1
, and 6ms isn't even a possible polling interval for isochronous endpoints. The documentation makes me think I should see a transfer on every frame, because I always have multiple pending transfers.
If I look at the bus with a USB analyzer, I don't see any IN-NAK
from the device, so I suspect Windows is not even making the request.
Why don't I see the full 1000Hz transfer rate?