summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2024-09-26 21:23:27 +0800
committersakumisu <[email protected]>2024-09-27 19:02:28 +0800
commit0d65bbc6ba7b8f62ecc57b0036bea220ddadad58 (patch)
treed126c800b0542672bd19acdf22e16fa7299aa8f4
parent76bbd09fed8d8781e50c23df273af5e9abe01434 (diff)
fix(core/usbd_core): reset endpoint only for altsetting 0, refs:#258
-rw-r--r--core/usbd_core.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/core/usbd_core.c b/core/usbd_core.c
index 4cdd87cf..ea471e54 100644
--- a/core/usbd_core.c
+++ b/core/usbd_core.c
@@ -489,10 +489,13 @@ static bool usbd_set_interface(uint8_t busid, uint8_t iface, uint8_t alt_setting
if (cur_iface == iface) {
ep_desc = (struct usb_endpoint_descriptor *)p;
- if (cur_alt_setting != alt_setting) {
+ if (alt_setting == 0) {
ret = usbd_reset_endpoint(busid, ep_desc);
- } else {
+ goto find_end;
+ } else if (cur_alt_setting == alt_setting) {
ret = usbd_set_endpoint(busid, ep_desc);
+ goto find_end;
+ } else {
}
}
@@ -510,6 +513,7 @@ static bool usbd_set_interface(uint8_t busid, uint8_t iface, uint8_t alt_setting
}
}
+find_end:
usbd_class_event_notify_handler(busid, USBD_EVENT_SET_INTERFACE, (void *)if_desc);
return ret;