Files
loopy_midi_controller/components/midi/midi_transport.h
T
2026-06-23 08:55:42 +00:00

46 lines
1.0 KiB
C++

// midi/midi_transport.h
#pragma once
#include <cstdint>
#include <freertos/FreeRTOS.h>
#include <freertos/queue.h>
struct MidiEvent {
enum Type {
NOTE_ON,
NOTE_OFF,
CONTROL_CHANGE,
PROGRAM_CHANGE,
PITCH_BEND,
AFTERTOUCH_POLY,
AFTERTOUCH_CHAN,
SYSEX
} type;
uint8_t channel; // MIDI channel (1-16)
uint8_t data1; // Note number or CC number
uint8_t data2; // Velocity or CC value
uint32_t timestamp; // Event timestamp
};
class UsbMidiTransport {
public:
UsbMidiTransport();
~UsbMidiTransport();
bool begin();
void task();
// Event queue for communication with controller task
QueueHandle_t get_event_queue() const { return event_queue; }
// Diagnostic logging
void log_incoming(const char* source, const MidiEvent& event);
private:
QueueHandle_t event_queue;
bool initialized;
};
// Forward declaration for USB callback
void usb_midi_callback(const uint8_t* event, uint32_t size);