diff options
| author | hathach <[email protected]> | 2026-08-17 01:02:07 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2026-08-18 22:07:49 +0700 |
| commit | a85a6afc6d98726f5edfb2d7606527c87c963dba (patch) | |
| tree | 9dfea7e09f90b56e7fc9445edeb05299fa75cf8e /tests/test/support | |
| parent | 2fda873fa5f6ef0c893f4f138b5c54e49c24e0a9 (diff) | |
usbd: handle a refused transfer without halting, and report it
A refused transfer is a recoverable condition - a new setup superseding a
control response, for instance - rather than a bug, but every failure path
treated it as one. TU_ASSERT carries TU_BREAKPOINT, which is gated on a debugger
being attached rather than on CFG_TUSB_DEBUG, so on a rig where a probe is
always attached it halted the CPU even in release builds. Use TU_VERIFY on the
control transfer paths, including the multi-packet data stage continuation, and
drop the breakpoint from the endpoint transfer failure arm, which already marks
the endpoint ready again so the next transfer can proceed.
The result of usbd_control_xfer_cb() was separately dropped on the floor,
leaving EP0 neither armed nor stalled and nothing recorded. It is logged now,
and deliberately not stalled: a DCD refuses an EP0 prime when a newer setup is
already latched, and EP0 stalls are cleared by hardware when that setup arrives,
so a stall issued here would land after the auto-clear and stall the transfer
that superseded this one. The pending setup re-drives EP0 by itself.
Diffstat (limited to 'tests/test/support')
0 files changed, 0 insertions, 0 deletions
