| Previous | Next |
| kIOUSBInterfaceNotFound | kIOUSBTransactionReturned |
kIOUSBPipeStalled
A stall belongs to the endpoint, not necessarily the whole device
kIOUSBPipeStalled reports that the requested pipe is halted. A stall is different from a timeout: it is a defined endpoint condition, and another transfer on the same pipe is not a valid recovery strategy by itself. Other interfaces and endpoints on the device can remain usable, so diagnosing only the device name is usually too coarse.
Apple's USB documentation distinguishes controller-side pipe clearing from restoring the device endpoint state. A correct recovery may need a protocol-specific control request, data-toggle resynchronization, and explicit handling of requests that were outstanding when the halt was noticed. The safe sequence depends on the transfer type and device class.
Before resubmitting work
- Capture the endpoint address, transfer type, direction, command or protocol operation, and all queued request identifiers.
- Determine whether the device protocol defines a required recovery command in addition to host-side pipe clearing.
- Account for returned or cancelled asynchronous requests and verify data-toggle handling before reopening normal traffic.
- Do not replay a non-idempotent command until the device protocol confirms whether it was accepted before the stall.
References
- Apple: IOUSBHostPipe clearStall
- Apple: stalls, halts, and data-toggle resynchronization
- USB-IF: Open USB Driver Interface specification
Looking for a different code? Search another status or error code.
