Skip to content

File MIDI_UART_Input.cpp

File List > examples > MIDI_UART_Input > MIDI_UART_Input.cpp

Go to the documentation of this file

Source Code

#include "daisy_seed.h"

using namespace daisy;

DaisySeed       hw;
MidiUartHandler midi;

FIFO<MidiEvent, 128> event_log;

int main(void)
{
    hw.Init();

    hw.StartLog();

    MidiUartHandler::Config midi_config;
    midi.Init(midi_config);

    midi.StartReceive();

    uint32_t now      = System::GetNow();
    uint32_t log_time = System::GetNow();

    while(1)
    {
        now = System::GetNow();

        midi.Listen();

        while(midi.HasEvents())
        {
            MidiEvent msg = midi.PopEvent();

            switch(msg.type)
            {
                case NoteOn:
                    // Do something on Note On events
                    {
                        uint8_t bytes[3] = {0x90, 0x00, 0x00};
                        bytes[1] = msg.data[0];
                        bytes[2] = msg.data[1];
                        midi.SendMessage(bytes, 3);
                    }
                    break;
                default: break;
            }

            event_log.PushBack(msg);
        }

        if(now - log_time > 5)
        {
            log_time = now;
            if(!event_log.IsEmpty())
            {
                auto msg = event_log.PopFront();
                char outstr[128];
                const char* type_str = MidiEvent::GetTypeAsString(msg);
                sprintf(outstr,
                        "time:\t%ld\ttype: %s\tChannel:  %d\tData MSB: "
                        "%d\tData LSB: %d\n",
                        now,
                        type_str,
                        msg.channel,
                        msg.data[0],
                        msg.data[1]);
                hw.PrintLine(outstr);
            }
        }
    }
}