@@ -57,7 +57,7 @@ typedef struct {
5757 uint8_t daddr ;
5858 uint8_t bInterfaceNumber ; // interface number of MIDI streaming
5959 uint8_t iInterface ;
60- uint8_t itf_count ; // number of interface including Audio Control + MIDI streaming
60+ uint8_t itf_count ; // number of interfaces including Audio Control + MIDI streaming
6161
6262 uint8_t rx_cable_count ; // IN endpoint CS descriptor bNumEmbMIDIJack value
6363 uint8_t tx_cable_count ; // OUT endpoint CS descriptor bNumEmbMIDIJack value
@@ -249,10 +249,12 @@ uint16_t midih_open(uint8_t rhport, uint8_t dev_addr, const tusb_desc_interface_
249249 p_midi -> itf_count ++ ;
250250 desc_cb .desc_midi = desc_itf ;
251251
252- p_desc = tu_desc_next (p_desc ); // next to CS Header
253-
254252 bool found_new_interface = false;
255- while (tu_desc_in_bounds (p_desc , desc_end ) && !found_new_interface ) {
253+ do {
254+ p_desc = tu_desc_next (p_desc );
255+ if (!tu_desc_in_bounds (p_desc , desc_end )) {
256+ break ;
257+ }
256258 switch (tu_desc_type (p_desc )) {
257259 case TUSB_DESC_INTERFACE :
258260 found_new_interface = true;
@@ -314,8 +316,8 @@ uint16_t midih_open(uint8_t rhport, uint8_t dev_addr, const tusb_desc_interface_
314316
315317 default : break ; // skip unknown descriptor
316318 }
317- p_desc = tu_desc_next ( p_desc );
318- }
319+ } while (! found_new_interface );
320+
319321 desc_cb .desc_midi_total_len = (uint16_t )((uintptr_t )p_desc - (uintptr_t )desc_start );
320322
321323 p_midi -> daddr = dev_addr ;
@@ -332,7 +334,7 @@ bool midih_set_config(uint8_t dev_addr, uint8_t itf_num) {
332334
333335 const tuh_midi_mount_cb_t mount_cb_data = {
334336 .daddr = dev_addr ,
335- .bInterfaceNumber = itf_num ,
337+ .bInterfaceNumber = p_midi -> bInterfaceNumber ,
336338 .rx_cable_count = p_midi -> rx_cable_count ,
337339 .tx_cable_count = p_midi -> tx_cable_count ,
338340 };
0 commit comments