Skip to content

Commit 95403ed

Browse files
committed
fix host issue when mounting an CDC device without IAD
1 parent b03a688 commit 95403ed

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/host/usbh.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,7 +1522,7 @@ static bool _parse_configuration_descriptor(uint8_t dev_addr, tusb_desc_configur
15221522

15231523
#if CFG_TUH_MIDI
15241524
// MIDI has 2 interfaces (Audio Control v1 + MIDIStreaming) but does not have IAD
1525-
// manually increase the associated count
1525+
// manually force associated count = 2
15261526
if (1 == assoc_itf_count &&
15271527
TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass &&
15281528
AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass &&
@@ -1532,6 +1532,17 @@ static bool _parse_configuration_descriptor(uint8_t dev_addr, tusb_desc_configur
15321532
}
15331533
#endif
15341534

1535+
#if CFG_TUH_CDC
1536+
// Some legacy CDC device does not use IAD but rather use device class as hint to combine 2 interfaces
1537+
// manually force associated count = 2
1538+
if (1 == assoc_itf_count &&
1539+
TUSB_CLASS_CDC == desc_itf->bInterfaceClass &&
1540+
CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL == desc_itf->bInterfaceSubClass)
1541+
{
1542+
assoc_itf_count = 2;
1543+
}
1544+
#endif
1545+
15351546
uint16_t const drv_len = tu_desc_get_interface_total_len(desc_itf, assoc_itf_count, (uint16_t) (desc_end-p_desc));
15361547
TU_ASSERT(drv_len >= sizeof(tusb_desc_interface_t));
15371548

0 commit comments

Comments
 (0)