pub enum TransferError {
Stall,
TransactionError,
Babble,
Nak,
NakTimeout,
FrameOverrun,
DataToggleError,
Halted,
Timeout,
}bcm2712 only.Expand description
Why a single-packet channel transfer didn’t complete successfully.
Variants§
Stall
The device returned STALL — it doesn’t support/recognize the request.
TransactionError
HCINT.TXERR — a transaction error (no response, bad CRC,
etc.).
Babble
HCINT.BBERR — babble (the device sent more than expected).
Nak
The device NAK’d this attempt — normal USB flow control (“not
ready yet, ask again”), not a real error. Left for the caller
to retry; see crate::usb::control’s retry wrapper.
NakTimeout
A caller-level retry budget was exhausted while the device
kept NAKing — distinct from a single Self::Nak.
FrameOverrun
HCINT.FRMOR — frame overrun. A periodic (interrupt or
isochronous) transaction was still in progress when the
microframe it was scheduled in ran out, and the core abandoned
it.
This is about when the transaction was started, not about the
device: a periodic transfer armed late in a microframe has too
little of it left to finish. Retrying on the next interval is
the normal response, which is why callers should treat this much
as they treat Self::Nak rather than as a hard failure.
DataToggleError
HCINT.DTERR — the packet arrived carrying the opposite data
toggle to the one expected, so it was discarded as a
retransmission of one already received. Means host and device
have lost toggle synchronisation.
Halted
The channel halted (HCINT.CHH) without HCINT.XFRC (transfer
complete) and without any specific error/status bit set — an
unexplained halt. Not expected in normal operation now that
completion is detected via CHH; a defensive branch rather than
a condition seen in practice.
Timeout
The channel never halted (HCINT.CHH never set) within this
driver’s timeout — the transaction appears stuck rather than
having reached any terminal condition.