Files
loopy_midi_controller/include/midi_transport.h
T
ash 748d2ef99f Pixel 6 pulses on MIDI Clock beat (0xF8) - all on Core 0
- Detect 0xF8 in midi_transport.cpp (runs on Core 0)
- Every 24th tick = beat, flash pixel 6 white
- Instant-on, quadratic fade over 80ms, restore to dim
- All FastLED calls stay on Core 0, no cross-core conflict
2026-07-02 08:37:36 +00:00

48 lines
1.0 KiB
C++

#pragma once
#include <cstdint>
#include <functional>
extern volatile uint32_t midi_tick_count;
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);
};