mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-29 01:20:19 +00:00
Merge pull request #85 from hathach/develop
midi only use audio 1.0 without IAD
This commit is contained in:
commit
2d7e61e671
@ -250,15 +250,13 @@ bool midid_open(uint8_t rhport, tusb_desc_interface_t const * p_interface_desc,
|
||||
(*p_length) = sizeof(tusb_desc_interface_t);
|
||||
|
||||
// Skip over the class specific descriptor.
|
||||
(*p_length) += p_desc[DESC_OFFSET_LEN];
|
||||
(*p_length) += tu_desc_len(p_desc);
|
||||
p_desc = tu_desc_next(p_desc);
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( AUDIO_SUBCLASS_MIDI_STREAMING != p_interface_desc->bInterfaceSubClass ||
|
||||
p_interface_desc->bInterfaceProtocol != AUDIO_PROTOCOL_V1 ) {
|
||||
return false;
|
||||
}
|
||||
TU_VERIFY(AUDIO_SUBCLASS_MIDI_STREAMING == p_interface_desc->bInterfaceSubClass &&
|
||||
AUDIO_PROTOCOL_V1 == p_interface_desc->bInterfaceProtocol );
|
||||
|
||||
// Find available interface
|
||||
midid_interface_t * p_midi = NULL;
|
||||
|
@ -174,14 +174,12 @@ TU_ATTR_WEAK void tud_resume_cb(void);
|
||||
//------------- MIDI -------------//
|
||||
|
||||
// Length of template descriptor (96 bytes)
|
||||
#define TUD_MIDI_DESC_LEN (8 + 9 + 9 + 9 + 7 + 6 + 6 + 9 + 9 + 7 + 5 + 7 + 5)
|
||||
#define TUD_MIDI_DESC_LEN (9 + 9 + 9 + 7 + 6 + 6 + 9 + 9 + 7 + 5 + 7 + 5)
|
||||
|
||||
// MIDI simple descriptor
|
||||
// - 1 Embedded Jack In connected to 1 External Jack Out
|
||||
// - 1 Embedded Jack out connected to 1 External Jack In
|
||||
#define TUD_MIDI_DESCRIPTOR(_itfnum, _stridx, _epin, _epout, _epsize) \
|
||||
/* Interface Associate */\
|
||||
8, TUSB_DESC_INTERFACE_ASSOCIATION, _itfnum, 2, TUSB_CLASS_AUDIO, 0x00, AUDIO_PROTOCOL_V1, 0,\
|
||||
/* Audio Control (AC) Interface */\
|
||||
9, TUSB_DESC_INTERFACE, _itfnum, 0, 0, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_PROTOCOL_V1, _stridx,\
|
||||
/* AC Header */\
|
||||
|
@ -245,6 +245,7 @@ static bool maybe_handle_setup_packet(void) {
|
||||
|
||||
void maybe_transfer_complete(void) {
|
||||
uint32_t epints = USB->DEVICE.EPINTSMRY.reg;
|
||||
|
||||
for (uint8_t epnum = 0; epnum < USB_EPT_NUM; epnum++) {
|
||||
if ((epints & (1 << epnum)) == 0) {
|
||||
continue;
|
||||
@ -253,6 +254,7 @@ void maybe_transfer_complete(void) {
|
||||
if (maybe_handle_setup_packet()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
UsbDeviceEndpoint* ep = &USB->DEVICE.DeviceEndpoint[epnum];
|
||||
|
||||
uint32_t epintflag = ep->EPINTFLAG.reg;
|
||||
@ -281,7 +283,8 @@ void maybe_transfer_complete(void) {
|
||||
dcd_event_xfer_complete(0, ep_addr, total_transfer_size, XFER_RESULT_SUCCESS, true);
|
||||
}
|
||||
|
||||
// just finished status stage (total size = 0), prepare for next setup packet
|
||||
// Just finished status stage (total size = 0), prepare for next setup packet
|
||||
// TODO could cause issue with actual zero length data used by class such as DFU
|
||||
if (epnum == 0 && total_transfer_size == 0) {
|
||||
dcd_edpt_xfer(0, 0, _setup_packet, sizeof(_setup_packet));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user