From 9fd0231b48c744b3454fee45ae0cd64586fada5c Mon Sep 17 00:00:00 2001 From: Ashley Strahle Date: Wed, 24 Jun 2026 00:31:15 +0000 Subject: [PATCH] Switch to ESP32 Arduino core native USB MIDI API (USB.h + USBMIDI.h), remove Adafruit TinyUSB dependency --- extra_script.py | 3 --- platformio.ini | 16 +++++----------- src/midi_transport.cpp | 27 ++++++++++----------------- 3 files changed, 15 insertions(+), 31 deletions(-) delete mode 100644 extra_script.py diff --git a/extra_script.py b/extra_script.py deleted file mode 100644 index fda0754..0000000 --- a/extra_script.py +++ /dev/null @@ -1,3 +0,0 @@ -Import("env") - -env.Append(LINKFLAGS=["-Wl,--allow-multiple-definition"]) diff --git a/platformio.ini b/platformio.ini index 241589b..fbefbda 100644 --- a/platformio.ini +++ b/platformio.ini @@ -6,19 +6,13 @@ platform = espressif32 board = esp32-s3-devkitc-1 framework = arduino lib_deps = - adafruit/Adafruit TinyUSB Library@3.1.0 fastled/FastLED@^3.9.0 -build_unflags = - -DARDUINO_USB_MODE=1 - -build_flags = - -DARDUINO_USB_MODE=0 - -DARDUINO_USB_CDC_ON_BOOT=1 - -DUSE_TINYUSB=1 - -extra_scripts = pre:extra_script.py - +monitor_speed = 115200 + +board_build.partitions = default_8MB.csv +board_build.arduino.memory_type = qio_opi + monitor_speed = 115200 board_build.partitions = default_8MB.csv diff --git a/src/midi_transport.cpp b/src/midi_transport.cpp index 876fe0c..f792af9 100644 --- a/src/midi_transport.cpp +++ b/src/midi_transport.cpp @@ -1,8 +1,9 @@ #include "midi_transport.h" #include -#include "Adafruit_TinyUSB.h" +#include "USB.h" +#include "USBMIDI.h" -static Adafruit_USBD_MIDI usb_midi; +static USBMIDI usb_midi; UsbMidiTransport::UsbMidiTransport() : initialized(false) { } @@ -18,14 +19,10 @@ bool UsbMidiTransport::begin() { return false; } - if (TinyUSBDevice.mounted()) { - Serial.println("[MIDI] Re-enumerating with MIDI interface..."); - TinyUSBDevice.detach(); - delay(10); - TinyUSBDevice.attach(); - } + USB.begin(); initialized = true; + Serial.println("[MIDI] USB MIDI ready - enumerating..."); return true; } @@ -36,8 +33,7 @@ void UsbMidiTransport::update() { uint32_t now = millis(); if (now - last_status > 5000) { last_status = now; - Serial.printf("[MIDI] USB mounted: %s\n", - TinyUSBDevice.mounted() ? "YES" : "NO"); + Serial.printf("[MIDI] USB ready: %s\n", USB.ready() ? "YES" : "NO"); } while (usb_midi.available()) { @@ -70,27 +66,24 @@ void UsbMidiTransport::on_midi_receive(std::function cal void UsbMidiTransport::send_note_on(uint8_t channel, uint8_t note, uint8_t velocity) { if (!initialized) return; - uint8_t packet[4] = {0x09, (uint8_t)(0x90 | (channel - 1)), note, velocity}; - usb_midi.writePacket(packet); + usb_midi.noteOn(note, velocity, channel); Serial.printf("[MIDI OUT] Ch:%d NOTE_ON:%d:%d\n", channel, note, velocity); } void UsbMidiTransport::send_note_off(uint8_t channel, uint8_t note, uint8_t velocity) { if (!initialized) return; - uint8_t packet[4] = {0x08, (uint8_t)(0x80 | (channel - 1)), note, velocity}; - usb_midi.writePacket(packet); + usb_midi.noteOff(note, velocity, channel); Serial.printf("[MIDI OUT] Ch:%d NOTE_OFF:%d:%d\n", channel, note, velocity); } void UsbMidiTransport::send_cc(uint8_t channel, uint8_t cc, uint8_t value) { if (!initialized) return; - uint8_t packet[4] = {0x0B, (uint8_t)(0xB0 | (channel - 1)), cc, value}; - usb_midi.writePacket(packet); + usb_midi.controlChange(cc, value, channel); Serial.printf("[MIDI OUT] Ch:%d CC:%d:%d\n", channel, cc, value); } bool UsbMidiTransport::is_connected() { - return initialized && TinyUSBDevice.mounted(); + return initialized && USB.ready(); } void UsbMidiTransport::parse_midi_packet(const uint8_t* buffer, uint32_t size, MidiEvent& event) {