summaryrefslogtreecommitdiff
path: root/src/device/usbd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/device/usbd.c')
-rw-r--r--src/device/usbd.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 5471e132d..b77b766dd 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -1473,8 +1473,10 @@ TU_ATTR_FAST_FUNC void dcd_event_handler(dcd_event_t const* event, bool in_isr)
break;
}
- if (send) {
- queue_event(event, in_isr);
+ if (send && !queue_event(event, in_isr) && event->event_id == DCD_EVENT_SETUP_RECEIVED) {
+ // dropped by a full queue: undo the increment, else every later SETUP is skipped as
+ // "other SETUP in queue" and EP0 is deaf until re-init
+ _usbd_queued_setup--;
}
}