Make USB MIDI device code allow a device with no Audio Control interface

This commit is contained in:
rppicomidi
2022-08-25 15:09:27 -07:00
committed by atoktoto
parent 70eefcb849
commit 3325e2613d
2 changed files with 25 additions and 11 deletions

View File

@@ -406,19 +406,25 @@ void midid_reset(uint8_t rhport)
uint16_t midid_open(uint8_t rhport, tusb_desc_interface_t const * desc_itf, uint16_t max_len)
{
uint16_t drv_len = 0;
uint8_t const * p_desc = (uint8_t const *)desc_itf;
// 1st Interface is Audio Control v1
TU_VERIFY(TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass &&
if (TUSB_CLASS_AUDIO == desc_itf->bInterfaceClass &&
AUDIO_SUBCLASS_CONTROL == desc_itf->bInterfaceSubClass &&
AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol, 0);
uint16_t drv_len = tu_desc_len(desc_itf);
uint8_t const * p_desc = tu_desc_next(desc_itf);
// Skip Class Specific descriptors
while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len )
AUDIO_FUNC_PROTOCOL_CODE_UNDEF == desc_itf->bInterfaceProtocol)
{
drv_len += tu_desc_len(p_desc);
p_desc = tu_desc_next(p_desc);
drv_len = tu_desc_len(desc_itf);
p_desc = tu_desc_next(desc_itf);
// Skip Class Specific descriptors
while ( TUSB_DESC_CS_INTERFACE == tu_desc_type(p_desc) && drv_len <= max_len )
{
drv_len += tu_desc_len(p_desc);
p_desc = tu_desc_next(p_desc);
}
}
else
{
TU_LOG1("Warning: MIDI Device has no Audio Control Interface");
}
// 2nd Interface is MIDI Streaming