62 dispatch_realtime(
byte);
117 running_status_ = byte;
125 if (in_sysex_)
return;
128 if (data_count_ == 0 && running_status_ == 0) {
133 if (data_count_ == 0 && status_ == 0) {
134 status_ = running_status_;
139 if (data_count_ == 0) {
147 if (data_count_ >= expected_) {
148 dispatch_channel_message();
158 void push(
const uint8_t* data, uint16_t len) {
159 for (uint16_t i = 0; i < len; ++i) {
166 uint8_t channel_filter_ = 0xFF;
169 uint8_t running_status_ = 0;
171 uint8_t expected_ = 0;
172 uint8_t data_count_ = 0;
175 bool in_sysex_ =
false;
177 void dispatch_realtime(uint8_t
byte) {
178 if (!callback_)
return;
193 void dispatch_channel_message() {
194 if (!callback_)
return;
196 uint8_t msg_channel = status_ & 0x0F;
199 if (channel_filter_ != 0xFF && msg_channel != channel_filter_) {
208 uint8_t msg_type = status_ & 0xF0;
MIDI byte stream parser — state machine with running status.
void set_callback(MidiCallback cb)
Set the callback for parsed MIDI events.
void push(const uint8_t *data, uint16_t len)
Feed multiple bytes.
void push(uint8_t byte)
Feed one byte from UART RX.
void set_channel(uint8_t ch)
Set channel filter.
uint8_t expected_data_bytes(uint8_t status)
Number of data bytes expected for a channel message status byte.
void(*)(const MidiEvent &event) MidiCallback
Callback type for parsed MIDI events.
uint8_t channel
0-15 for channel messages, 0 for system