summaryrefslogtreecommitdiff
path: root/src/device/usbd.c
diff options
context:
space:
mode:
authorHiFiPhile <[email protected]>2024-05-08 14:07:32 +0200
committerhathach <[email protected]>2024-07-19 17:02:56 +0700
commita1fd43ebaf0a36683c0437ea258e2a024341ef6d (patch)
treeb654c2e848f8b52a78266fc96e1ba2fa5ead6871 /src/device/usbd.c
parent60b3d14d1979b4a281f999e3a1861b44477f57b1 (diff)
Clear _usbd_dev prior to driver reset.
Diffstat (limited to 'src/device/usbd.c')
-rw-r--r--src/device/usbd.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 4105a71a4..b2fd54575 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -495,15 +495,16 @@ bool tud_deinit(uint8_t rhport) {
}
static void configuration_reset(uint8_t rhport) {
+ // Clear mounted status first to ensure tud_ready() return false before driver clean up.
+ tu_varclr(&_usbd_dev);
+ memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping
+ memset(_usbd_dev.ep2drv, DRVID_INVALID, sizeof(_usbd_dev.ep2drv)); // invalid mapping
+
for (uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++) {
usbd_class_driver_t const* driver = get_driver(i);
TU_ASSERT(driver,);
driver->reset(rhport);
}
-
- tu_varclr(&_usbd_dev);
- memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping
- memset(_usbd_dev.ep2drv, DRVID_INVALID, sizeof(_usbd_dev.ep2drv)); // invalid mapping
}
static void usbd_reset(uint8_t rhport) {