987288fd41
- Add Adafruit TinyUSB Library dependency - Create tusb_config.h enabling MIDI class - USB device named 'Loopy Foot Controller' - is_connected() check before sending
46 lines
995 B
C++
46 lines
995 B
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <functional>
|
|
|
|
struct MidiEvent {
|
|
enum Type {
|
|
NOTE_ON,
|
|
NOTE_OFF,
|
|
CONTROL_CHANGE,
|
|
PROGRAM_CHANGE,
|
|
PITCH_BEND,
|
|
AFTERTOUCH_POLY,
|
|
AFTERTOUCH_CHAN,
|
|
SYSEX
|
|
} type;
|
|
|
|
uint8_t channel;
|
|
uint8_t data1;
|
|
uint8_t data2;
|
|
uint32_t timestamp;
|
|
};
|
|
|
|
class UsbMidiTransport {
|
|
public:
|
|
UsbMidiTransport();
|
|
~UsbMidiTransport();
|
|
|
|
bool begin();
|
|
void update();
|
|
|
|
void on_midi_receive(std::function<void(const MidiEvent&)> callback);
|
|
|
|
void send_note_on(uint8_t channel, uint8_t note, uint8_t velocity);
|
|
void send_note_off(uint8_t channel, uint8_t note, uint8_t velocity);
|
|
void send_cc(uint8_t channel, uint8_t cc, uint8_t value);
|
|
|
|
bool is_connected();
|
|
|
|
private:
|
|
std::function<void(const MidiEvent&)> receive_callback;
|
|
bool initialized;
|
|
|
|
void parse_midi_packet(const uint8_t* buffer, uint32_t size, MidiEvent& event);
|
|
};
|