diff options
| author | HiFiPhile <[email protected]> | 2025-03-24 21:09:17 +0100 |
|---|---|---|
| committer | HiFiPhile <[email protected]> | 2025-03-24 21:09:17 +0100 |
| commit | 3caff80c8ec5ba06be799d00dd1ff8ac9b58a5bc (patch) | |
| tree | be64d4af522196ee43b80510131e0b7ac9c0723a /src/device/usbd.c | |
| parent | abfbcf5ccca88017dfb50e237a4981e47057b3a8 (diff) | |
| parent | cf76af1056e9a3019d9b08503b783a86602374f0 (diff) | |
Merge remote-tracking branch 'upstream/master' into h7rs
Signed-off-by: HiFiPhile <[email protected]>
Diffstat (limited to 'src/device/usbd.c')
| -rw-r--r-- | src/device/usbd.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index 2a6081673..fb5cec49d 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -1032,7 +1032,14 @@ static bool process_set_config(uint8_t rhport, uint8_t cfg_num) #endif #if CFG_TUD_MIDI - if ( driver->open == midid_open ) assoc_itf_count = 2; + if (driver->open == midid_open) { + // If there is a class-compliant Audio Control Class, then 2 interfaces. Otherwise, only one + if (TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass && + AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass && + AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol) { + assoc_itf_count = 2; + } + } #endif #if CFG_TUD_BTH && CFG_TUD_BTH_ISO_ALT_COUNT @@ -1289,7 +1296,7 @@ bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) { rhport = _usbd_rhport; TU_ASSERT(tu_edpt_number(desc_ep->bEndpointAddress) < CFG_TUD_ENDPPOINT_MAX); - TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); + TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed, false)); return dcd_edpt_open(rhport, desc_ep); } @@ -1490,7 +1497,7 @@ bool usbd_edpt_iso_activate(uint8_t rhport, tusb_desc_endpoint_t const* desc_ep) uint8_t const dir = tu_edpt_dir(desc_ep->bEndpointAddress); TU_ASSERT(epnum < CFG_TUD_ENDPPOINT_MAX); - TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed)); + TU_ASSERT(tu_edpt_validate(desc_ep, (tusb_speed_t) _usbd_dev.speed, false)); _usbd_dev.ep_status[epnum][dir].stalled = 0; _usbd_dev.ep_status[epnum][dir].busy = 0; |
