83 std::fill(rx_buffer, rx_buffer + rx_buffer_size, 0);
85 uart_.
Init(uart_config);
92 parse_context_ = context;
93 parse_callback_ = parse_callback;
97 rx_buffer, rx_buffer_size, MidiUartTransport::rxCallback,
this);
107 inline void Tx(uint8_t* buff,
size_t size) { uart_.
PollTx(buff, size); }
112 size_t rx_buffer_size;
113 void* parse_context_;
125 static void rxCallback(uint8_t* data,
135 if(transport->parse_callback_)
137 transport->parse_callback_(
138 data, size, transport->parse_context_);
152template <
typename Transport>
180 transport_.StartRx(MidiHandler::ParseCallback,
this);
189 realtime_callback_ = callback_for_rt_messages;
190 transport_.StartRx(MidiHandler::ParseCallback,
this);
199 if(!transport_.RxActive())
202 transport_.FlushRx();
210 bool HasEvents()
const {
return event_q_.GetNumElements() > 0; }
224 transport_.Tx(bytes, size);
236 if(parser_.
Parse(
byte, &event))
240 if(realtime_callback_)
242 realtime_callback_(event);
246 event_q_.PushBack(event);
253 Transport transport_;
258 static void ParseCallback(uint8_t* data,
size_t size,
void* context)
261 for(
size_t i = 0; i < size; i++)
263 handler->
Parse(data[i]);
Simple MIDI Handler Parses bytes from an input into valid MidiEvents. The MidiEvents fill a FIFO qu...
Definition midi.h:154
std::function< void(MidiEvent &)> MidiEventCallback
Definition midi.h:156
void StartReceive()
Definition midi.h:178
MidiEvent PopEvent()
Definition midi.h:217
void Listen()
Definition midi.h:194
void SendMessage(uint8_t *bytes, size_t size)
Definition midi.h:222
MidiHandler()
Definition midi.h:158
bool RxActive()
Definition midi.h:212
void Parse(uint8_t byte)
Definition midi.h:233
bool HasEvents() const
Definition midi.h:210
void Init(Config config)
Definition midi.h:169
void StartReceiveRt(MidiEventCallback callback_for_rt_messages)
Definition midi.h:187
~MidiHandler()
Definition midi.h:159
Utility class for parsing raw byte streams into MIDI messages.
Definition midi_parser.h:16
void Reset()
Reset parser to default state.
bool Parse(uint8_t byte, MidiEvent *event_out)
Parse one MIDI byte. If the byte completes a parsed event, its value will be assigned to the derefere...
void Init()
Definition midi_parser.h:21
Transport layer for sending and receiving MIDI data over UART.
Definition midi.h:26
void StartRx(MidiRxParseCallback parse_callback, void *context)
Start the UART peripheral in listening mode. This will fill an internal data structure in the backgro...
Definition midi.h:90
void Tx(uint8_t *buff, size_t size)
sends the buffer of bytes out of the UART peripheral
Definition midi.h:107
~MidiUartTransport()
Definition midi.h:33
void FlushRx()
This is a no-op for UART transport - Rx is via DMA callback with circular buffer.
Definition midi.h:104
void(*) MidiRxParseCallback(uint8_t *data, size_t size, void *context)
Definition midi.h:28
MidiUartTransport()
Definition midi.h:32
bool RxActive()
returns whether the UART peripheral is actively listening in the background or not
Definition midi.h:101
void Init(Config config)
Initialization of UART using config struct.
Definition midi.h:63
Result DmaListenStart(uint8_t *buff, size_t size, CircularRxCallbackFunctionPtr cb, void *callback_context)
Result PollTx(uint8_t *buff, size_t size)
Result Init(const Config &config)
Result
Definition uart.h:103
@ SystemRealTime
Definition MidiEvent.h:30
void dsy_dma_clear_cache_for_buffer(uint8_t *buffer, size_t size)
Hardware defines and helpers for daisy field platform.
Definition index.h:2
Definition MidiEvent.h:240
MidiMessageType type
Definition MidiEvent.h:242
Transport::Config transport_config
Definition midi.h:163
Configuration structure for UART MIDI.
Definition midi.h:37
Pin tx
Definition midi.h:40
Pin rx
Definition midi.h:39
UartHandler::Config::Peripheral periph
Definition midi.h:38
size_t rx_buffer_size
Definition midi.h:57
uint8_t * rx_buffer
Definition midi.h:49
representation of hardware port/pin combination
Definition daisy_core.h:193
Pin rx
Definition uart.h:76
Pin tx
Definition uart.h:75
Mode mode
Definition uart.h:91
StopBits stopbits
Definition uart.h:89
WordLength wordlength
Definition uart.h:92
Peripheral periph
Definition uart.h:88
struct daisy::UartHandler::Config::@20 pin_config
uint32_t baudrate
Definition uart.h:93
Parity parity
Definition uart.h:90
Peripheral
Definition uart.h:32