|
|
|
|
@@ -72,7 +72,7 @@ typedef struct
|
|
|
|
|
//--------------------------------------------------------------------+
|
|
|
|
|
// INTERNAL OBJECT & FUNCTION DECLARATION
|
|
|
|
|
//--------------------------------------------------------------------+
|
|
|
|
|
CFG_TUSB_ATTR_USBRAM midid_interface_t _midid_itf[CFG_TUD_MIDI];
|
|
|
|
|
CFG_TUSB_MEM_SECTION midid_interface_t _midid_itf[CFG_TUD_MIDI];
|
|
|
|
|
|
|
|
|
|
bool tud_midi_n_connected(uint8_t itf) {
|
|
|
|
|
midid_interface_t* midi = &_midid_itf[itf];
|
|
|
|
|
@@ -133,13 +133,13 @@ void midi_rx_done_cb(midid_interface_t* midi, uint8_t const* buffer, uint32_t bu
|
|
|
|
|
|
|
|
|
|
static bool maybe_transmit(midid_interface_t* midi, uint8_t itf_index)
|
|
|
|
|
{
|
|
|
|
|
TU_VERIFY( !dcd_edpt_busy(TUD_OPT_RHPORT, midi->ep_in) ); // skip if previous transfer not complete
|
|
|
|
|
TU_VERIFY( !usbd_edpt_busy(TUD_OPT_RHPORT, midi->ep_in) ); // skip if previous transfer not complete
|
|
|
|
|
|
|
|
|
|
uint16_t count = tu_fifo_read_n(&midi->tx_ff, midi->epin_buf, CFG_TUD_MIDI_EPSIZE);
|
|
|
|
|
if (count > 0)
|
|
|
|
|
{
|
|
|
|
|
TU_VERIFY( tud_midi_n_connected(itf_index) ); // fifo is empty if not connected
|
|
|
|
|
TU_ASSERT( dcd_edpt_xfer(TUD_OPT_RHPORT, midi->ep_in, midi->epin_buf, count) );
|
|
|
|
|
TU_ASSERT( usbd_edpt_xfer(TUD_OPT_RHPORT, midi->ep_in, midi->epin_buf, count) );
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
@@ -304,7 +304,7 @@ bool midid_open(uint8_t rhport, tusb_desc_interface_t const * p_interface_desc,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Prepare for incoming data
|
|
|
|
|
TU_ASSERT( dcd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, CFG_TUD_MIDI_EPSIZE), false);
|
|
|
|
|
TU_ASSERT( usbd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, CFG_TUD_MIDI_EPSIZE), false);
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
@@ -334,7 +334,7 @@ bool midid_xfer_cb(uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint
|
|
|
|
|
midi_rx_done_cb(p_midi, p_midi->epout_buf, xferred_bytes);
|
|
|
|
|
|
|
|
|
|
// prepare for next
|
|
|
|
|
TU_ASSERT( dcd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, CFG_TUD_MIDI_EPSIZE), false );
|
|
|
|
|
TU_ASSERT( usbd_edpt_xfer(rhport, p_midi->ep_out, p_midi->epout_buf, CFG_TUD_MIDI_EPSIZE), false );
|
|
|
|
|
} else if ( edpt_addr == p_midi->ep_in ) {
|
|
|
|
|
maybe_transmit(p_midi, itf);
|
|
|
|
|
}
|
|
|
|
|
|