mirror of
https://github.com/hathach/tinyusb.git
synced 2025-05-08 14:45:49 +08:00
Merge pull request #3032 from rppicomidi/fix_3031
Fix 3031: implement tuh_midi_itf_get_info()
This commit is contained in:
commit
c2924c51fc
@ -56,6 +56,7 @@ TU_ATTR_WEAK void tuh_midi_tx_cb(uint8_t idx, uint32_t xferred_bytes) { (void) i
|
||||
typedef struct {
|
||||
uint8_t daddr;
|
||||
uint8_t bInterfaceNumber; // interface number of MIDI streaming
|
||||
uint8_t iInterface;
|
||||
uint8_t itf_count; // number of interface including Audio Control + MIDI streaming
|
||||
|
||||
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
|
||||
|
||||
TU_LOG_DRV("MIDI opening Interface %u (addr = %u)\r\n", desc_itf->bInterfaceNumber, dev_addr);
|
||||
p_midi->bInterfaceNumber = desc_itf->bInterfaceNumber;
|
||||
p_midi->iInterface = desc_itf->iInterface;
|
||||
p_midi->itf_count++;
|
||||
desc_cb.desc_midi = desc_itf;
|
||||
|
||||
@ -346,6 +348,28 @@ uint8_t tuh_midi_itf_get_index(uint8_t daddr, uint8_t itf_num) {
|
||||
return TUSB_INDEX_INVALID_8;
|
||||
}
|
||||
|
||||
bool tuh_midi_itf_get_info(uint8_t idx, tuh_itf_info_t* info) {
|
||||
midih_interface_t* p_midi = &_midi_host[idx];
|
||||
TU_VERIFY(p_midi && info);
|
||||
|
||||
info->daddr = p_midi->daddr;
|
||||
|
||||
// re-construct descriptor
|
||||
tusb_desc_interface_t* desc = &info->desc;
|
||||
desc->bLength = sizeof(tusb_desc_interface_t);
|
||||
desc->bDescriptorType = TUSB_DESC_INTERFACE;
|
||||
|
||||
desc->bInterfaceNumber = p_midi->bInterfaceNumber;
|
||||
desc->bAlternateSetting = 0;
|
||||
desc->bNumEndpoints = (uint8_t)((p_midi->ep_in != 0 ? 1:0) + (p_midi->ep_out != 0 ? 1:0));
|
||||
desc->bInterfaceClass = TUSB_CLASS_AUDIO;
|
||||
desc->bInterfaceSubClass = AUDIO_SUBCLASS_MIDI_STREAMING;
|
||||
desc->bInterfaceProtocol = 0;
|
||||
desc->iInterface = p_midi->iInterface;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
uint8_t tuh_midi_get_tx_cable_count (uint8_t idx) {
|
||||
TU_VERIFY(idx < CFG_TUH_MIDI);
|
||||
midih_interface_t *p_midi = &_midi_host[idx];
|
||||
|
@ -90,6 +90,10 @@ bool tuh_midi_mounted(uint8_t idx);
|
||||
// return TUSB_INDEX_INVALID_8 (0xFF) if not found
|
||||
uint8_t tuh_midi_itf_get_index(uint8_t daddr, uint8_t itf_num);
|
||||
|
||||
// Get Interface information
|
||||
// return true if index is correct and interface is currently mounted
|
||||
bool tuh_midi_itf_get_info(uint8_t idx, tuh_itf_info_t* info);
|
||||
|
||||
// return the number of virtual midi cables on the device's IN endpoint
|
||||
uint8_t tuh_midi_get_rx_cable_count(uint8_t idx);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user