Add BLE MIDI transport (feature_bluetooth)

This commit is contained in:
ash
2026-06-30 06:13:36 +00:00
parent ae2891fca8
commit aea3a28206
5 changed files with 256 additions and 12 deletions
+4 -2
View File
@@ -2,6 +2,7 @@
#include <cstdint>
#include "midi_transport.h"
#include "ble_midi_transport.h"
#include "led_stub.h"
#include "switch_stub.h"
@@ -14,7 +15,7 @@ struct PadMapping {
class AppTask {
public:
AppTask(LedStub* led, SwitchStub* sw, UsbMidiTransport* midi);
AppTask(LedStub* led, SwitchStub* sw, UsbMidiTransport* usb_midi, BleMidiTransport* ble_midi = nullptr);
void begin();
void update();
@@ -23,7 +24,8 @@ public:
private:
LedStub* led_driver;
SwitchStub* switch_driver;
UsbMidiTransport* midi_transport;
UsbMidiTransport* usb_midi;
BleMidiTransport* ble_midi;
static const uint8_t NUM_PADS = 10;
PadMapping pad_mapping[NUM_PADS];
+31
View File
@@ -0,0 +1,31 @@
#pragma once
#include <cstdint>
#include <functional>
#include "midi_transport.h"
class BleMidiTransport {
public:
BleMidiTransport();
~BleMidiTransport();
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;
bool client_connected;
void send_midi_packet(const uint8_t* data, uint8_t len);
void on_receive(const uint8_t* data, size_t len);
size_t parse_ble_midi(uint8_t status, const uint8_t* data, size_t len, size_t offset, MidiEvent& event);
};