Files
loopy_midi_controller/components/midi/midi_transport.h
T
ash 458cb5060f Fix Phase 1 skeleton: add build system, fix compilation errors
- Add CMakeLists.txt for project and all components
- Add idf_component.yml with TinyUSB dependency
- Create switch_stub.cpp implementation
- Fix app_task.h to match .cpp implementation (2-param signature)
- Fix led_stub.h/cpp class naming (DefaultLedStub)
- Fix midi_transport.cpp TinyUSB API usage (tud_midi_*)
- Move main.cpp to main/ directory
- Add sdkconfig.defaults for ESP32-S3
2026-06-23 08:59:53 +00:00

50 lines
1.1 KiB
C++

// components/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;
// MIDI packet parsing
void parse_midi_packet(const uint8_t* buffer, uint32_t size, MidiEvent& event);
};
// Task function for USB MIDI processing
void usb_midi_task(void* pvParameters);