@@ -47,13 +47,14 @@ typedef struct {
4747 uint8_t num_cables_rx ; // IN endpoint CS descriptor bNumEmbMIDIJack value
4848 uint8_t num_cables_tx ; // OUT endpoint CS descriptor bNumEmbMIDIJack value
4949
50+ #if CFG_TUH_MIDI_STREAM_API
5051 // For Stream read()/write() API
5152 // Messages are always 4 bytes long, queue them for reading and writing so the
5253 // callers can use the Stream interface with single-byte read/write calls.
5354 midi_driver_stream_t stream_write ;
5455 midi_driver_stream_t stream_read ;
56+ #endif
5557
56- /*------------- From this point, data is not cleared by bus reset -------------*/
5758 // Endpoint stream
5859 struct {
5960 tu_edpt_stream_t tx ;
@@ -433,6 +434,57 @@ bool tuh_midi_configured(uint8_t dev_addr) {
433434 return p_midi_host -> configured ;
434435}
435436
437+ uint8_t tuh_midi_get_num_tx_cables (uint8_t dev_addr ) {
438+ midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
439+ TU_VERIFY (p_midi_host != NULL , 0 );
440+ TU_VERIFY (p_midi_host -> ep_stream .tx .ep_addr != 0 , 0 );
441+ return p_midi_host -> num_cables_tx ;
442+ }
443+
444+ uint8_t tuh_midi_get_num_rx_cables (uint8_t dev_addr ) {
445+ midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
446+ TU_VERIFY (p_midi_host != NULL , 0 );
447+ TU_VERIFY (p_midi_host -> ep_stream .rx .ep_addr != 0 , 0 );
448+ return p_midi_host -> num_cables_rx ;
449+ }
450+
451+ uint32_t tuh_midi_read_available (uint8_t dev_addr ) {
452+ midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
453+ TU_VERIFY (p_midi_host != NULL );
454+ return tu_edpt_stream_read_available (& p_midi_host -> ep_stream .rx );
455+ }
456+
457+ uint32_t tuh_midi_write_flush (uint8_t dev_addr ) {
458+ midih_interface_t * p_midi = find_midi_by_daddr (dev_addr );
459+ TU_VERIFY (p_midi != NULL );
460+ return tu_edpt_stream_write_xfer (p_midi -> dev_addr , & p_midi -> ep_stream .tx );
461+ }
462+
463+ //--------------------------------------------------------------------+
464+ // Packet API
465+ //--------------------------------------------------------------------+
466+
467+ uint32_t tuh_midi_packet_read_n (uint8_t dev_addr , uint8_t * buffer , uint32_t bufsize ) {
468+ midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
469+ TU_VERIFY (p_midi_host != NULL );
470+
471+ uint32_t count4 = tu_min32 (bufsize , tu_edpt_stream_read_available (& p_midi_host -> ep_stream .rx ));
472+ count4 = tu_align4 (count4 ); // round down to multiple of 4
473+ TU_VERIFY (count4 > 0 , 0 );
474+ return tu_edpt_stream_read (dev_addr , & p_midi_host -> ep_stream .rx , buffer , count4 );
475+ }
476+
477+ uint32_t tuh_midi_packet_write_n (uint8_t dev_addr , const uint8_t * buffer , uint32_t bufsize ) {
478+ midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
479+ TU_VERIFY (p_midi_host != NULL , 0 );
480+ uint32_t bufsize4 = tu_align4 (bufsize );
481+ return tu_edpt_stream_write (dev_addr , & p_midi_host -> ep_stream .tx , buffer , bufsize4 );
482+ }
483+
484+ //--------------------------------------------------------------------+
485+ // Stream API
486+ //--------------------------------------------------------------------+
487+ #if CFG_TUH_MIDI_STREAM_API
436488uint32_t tuh_midi_stream_write (uint8_t dev_addr , uint8_t cable_num , uint8_t const * buffer , uint32_t bufsize ) {
437489 midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
438490 TU_VERIFY (p_midi_host != NULL );
@@ -530,47 +582,6 @@ uint32_t tuh_midi_stream_write(uint8_t dev_addr, uint8_t cable_num, uint8_t cons
530582 return i ;
531583}
532584
533- bool tuh_midi_packet_write (uint8_t dev_addr , uint8_t const packet [4 ]) {
534- midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
535- TU_VERIFY (p_midi_host != NULL );
536- return 4 == tu_edpt_stream_write (dev_addr , & p_midi_host -> ep_stream .tx , packet , 4 );
537- }
538-
539- uint32_t tuh_midi_stream_flush (uint8_t dev_addr ) {
540- midih_interface_t * p_midi = find_midi_by_daddr (dev_addr );
541- TU_VERIFY (p_midi != NULL );
542- return tu_edpt_stream_write_xfer (p_midi -> dev_addr , & p_midi -> ep_stream .tx );
543- }
544- //--------------------------------------------------------------------+
545- // Helper
546- //--------------------------------------------------------------------+
547- uint8_t tuh_midi_get_num_tx_cables (uint8_t dev_addr ) {
548- midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
549- TU_VERIFY (p_midi_host != NULL , 0 );
550- TU_VERIFY (p_midi_host -> ep_stream .tx .ep_addr != 0 , 0 );
551- return p_midi_host -> num_cables_tx ;
552- }
553-
554- uint8_t tuh_midi_get_num_rx_cables (uint8_t dev_addr ) {
555- midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
556- TU_VERIFY (p_midi_host != NULL , 0 );
557- TU_VERIFY (p_midi_host -> ep_stream .rx .ep_addr != 0 , 0 );
558- return p_midi_host -> num_cables_rx ;
559- }
560-
561- uint32_t tuh_midi_read_available (uint8_t dev_addr ) {
562- midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
563- TU_VERIFY (p_midi_host != NULL );
564- return tu_edpt_stream_read_available (& p_midi_host -> ep_stream .rx );
565- }
566-
567- bool tuh_midi_packet_read (uint8_t dev_addr , uint8_t packet [4 ]) {
568- midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
569- TU_VERIFY (p_midi_host != NULL );
570- TU_VERIFY (tu_edpt_stream_read_available (& p_midi_host -> ep_stream .rx ) >= 4 );
571- return 4 == tu_edpt_stream_read (dev_addr , & p_midi_host -> ep_stream .rx , packet , 4 );
572- }
573-
574585uint32_t tuh_midi_stream_read (uint8_t dev_addr , uint8_t * p_cable_num , uint8_t * p_buffer , uint16_t bufsize ) {
575586 midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
576587 TU_VERIFY (p_midi_host != NULL );
@@ -669,6 +680,9 @@ uint32_t tuh_midi_stream_read(uint8_t dev_addr, uint8_t *p_cable_num, uint8_t *p
669680 return bytes_buffered ;
670681}
671682
683+ //--------------------------------------------------------------------+
684+ // String API
685+ //--------------------------------------------------------------------+
672686#if CFG_MIDI_HOST_DEVSTRINGS
673687static uint8_t find_string_index (midih_interface_t * ptr , uint8_t jack_id )
674688{
@@ -690,9 +704,7 @@ static uint8_t find_string_index(midih_interface_t *ptr, uint8_t jack_id)
690704 }
691705 return index ;
692706}
693- #endif
694707
695- #if CFG_MIDI_HOST_DEVSTRINGS
696708uint8_t tuh_midi_get_rx_cable_istrings (uint8_t dev_addr , uint8_t * istrings , uint8_t max_istrings ) {
697709 midih_interface_t * p_midi_host = find_midi_by_daddr (dev_addr );
698710 TU_VERIFY (p_midi_host != NULL , 0 );
@@ -732,3 +744,5 @@ uint8_t tuh_midi_get_all_istrings(uint8_t dev_addr, const uint8_t** istrings)
732744 return nstrings ;
733745}
734746#endif
747+
748+ #endif
0 commit comments