@@ -56,6 +56,7 @@ TU_ATTR_WEAK void tuh_midi_tx_cb(uint8_t idx, uint32_t xferred_bytes) { (void) i
5656typedef struct {
5757 uint8_t daddr ;
5858 uint8_t bInterfaceNumber ; // interface number of MIDI streaming
59+ uint8_t iInterface ;
5960 uint8_t itf_count ; // number of interface including Audio Control + MIDI streaming
6061
6162 uint8_t ep_in ; // IN endpoint address
@@ -228,6 +229,7 @@ bool midih_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *d
228229
229230 TU_LOG_DRV ("MIDI opening Interface %u (addr = %u)\r\n" , desc_itf -> bInterfaceNumber , dev_addr );
230231 p_midi -> bInterfaceNumber = desc_itf -> bInterfaceNumber ;
232+ p_midi -> iInterface = desc_itf -> iInterface ;
231233 p_midi -> itf_count ++ ;
232234 desc_cb .desc_midi = desc_itf ;
233235
@@ -346,6 +348,28 @@ uint8_t tuh_midi_itf_get_index(uint8_t daddr, uint8_t itf_num) {
346348 return TUSB_INDEX_INVALID_8 ;
347349}
348350
351+ bool tuh_midi_itf_get_info (uint8_t idx , tuh_itf_info_t * info ) {
352+ midih_interface_t * p_midi = & _midi_host [idx ];
353+ TU_VERIFY (p_midi && info );
354+
355+ info -> daddr = p_midi -> daddr ;
356+
357+ // re-construct descriptor
358+ tusb_desc_interface_t * desc = & info -> desc ;
359+ desc -> bLength = sizeof (tusb_desc_interface_t );
360+ desc -> bDescriptorType = TUSB_DESC_INTERFACE ;
361+
362+ desc -> bInterfaceNumber = p_midi -> bInterfaceNumber ;
363+ desc -> bAlternateSetting = 0 ;
364+ desc -> bNumEndpoints = (uint8_t )((p_midi -> ep_in != 0 ? 1 :0 ) + (p_midi -> ep_out != 0 ? 1 :0 ));
365+ desc -> bInterfaceClass = TUSB_CLASS_AUDIO ;
366+ desc -> bInterfaceSubClass = AUDIO_SUBCLASS_MIDI_STREAMING ;
367+ desc -> bInterfaceProtocol = 0 ;
368+ desc -> iInterface = p_midi -> iInterface ;
369+
370+ return true;
371+ }
372+
349373uint8_t tuh_midi_get_tx_cable_count (uint8_t idx ) {
350374 TU_VERIFY (idx < CFG_TUH_MIDI );
351375 midih_interface_t * p_midi = & _midi_host [idx ];
0 commit comments