| Robert,
If you receive an immediate error, then I would not expect a transaction to be queued on the controller. By connecting a full-speed device to a high-speed hub, you are forcing the request to go over the high-speed EHCI controller (which is one difference than when directly connected).
Can you provide a few more details...
- What machine/OS you are using. - What is the size of the request? - Perhaps a dump of the configuration descriptor (or at least a description of Pipe[1]). - The exact value of "result" in your code shown below.
David Ferguson USB Software Team Apple Computer On Oct 30, 2006, at 11:00 AM, Robert Bell wrote:
(slight grammar correction)
Yes, I understand that. I'll put it in a list. :-)
1) I make the request.
2) I receive an immediate error (which as I was assuming is not from the actual transfer).
Note: The error appears to be an overrun error for unknown reasons. It only occurs when the device is connected through an external hub, not directly into the mac's controller.
3) My question is the following: Is the request still floating around? And if it is not, will re-sending another request cause me to miss data in any way from the device? Basically, does the error in sending the request cause a request to be generated anyway, or does this error return indicate that no request was sent, and I should do it again.
Thanks for the quick response!
Robert.
Le 30 oct. 06 à 10:32, Fernando Urbina a écrit : On Oct 30, 2006, at 10:15 AM, Robert Bell wrote:
Hi guys,
So, I have finally gotten round to implementing a fix for a 0xe00002e8 in a call to ReadPipeAsync (mentioned in earlier emails). I have a question though. The code used is as follows:
result = (*interface)->ReadPipeAsync(interface, 1, asynchRequest->rawDataBuffer, sizeOfRequest, returnHandler, asynchRequest);
if(result != kIOReturnSuccess){ //Handle error. }
The error is caught in the if block. Given that this is an async request, am I correct in assuming that the return from this function cannot know about errors generated during the actual obtaining of the data? So, if I re-send the request, can I trust that the device is still waiting to receive a read request? If this were a synchronous call, I would naturally assume that some error had occurred that would more than likely mean that I would loose the data, but in this case, it is not clear to me as the call above returns immediately.
Your if block above is catching immediate errors, such as the pipe being stalled or a bad argument being passed. Actual errors from the transfer will be reported in your returnHandler. If you queue another request, it will be queued behind that first one. An async request has to return immediately without waiting for the actual transfer. That's the whole point of it.
-- Fernando Urbina USB Technology Team Apple Computer, Inc.
_______________________________________________ Do not post admin requests to the list. They will be ignored. Help/Unsubscribe/Update your Subscription:
|