ash
1728413cb8
Fix NOTE_ON feedback: pass led_index to set_led_state
2026-06-30 04:17:18 +00:00
ash
c57847db78
Remove flash_activity that was stealing focus to LED 0
2026-06-30 04:14:07 +00:00
ash
a4131adf2a
Fix CC feedback: route to correct pixel by LED index
2026-06-30 04:04:43 +00:00
ash
1c1fc4d372
Remove heartbeat, relabel USB to JOC Midi
2026-06-30 03:46:31 +00:00
ash
ac83ba269f
USB name: JOC / JOC Midi (VID/PID still Launchpad X for Loopy Pro recognition)
2026-06-26 00:13:41 +00:00
ash
17c630f850
Fix update(): remove old sysex_flash_active logic
2026-06-26 00:07:50 +00:00
ash
268b793d87
Fix compilation: remove unused flash_sysex/flash_all/flash_one methods and member vars
2026-06-25 23:54:30 +00:00
ash
a281eaa46e
Clean up LED driver + rename USB to JOC Midi
...
- Removed flash_sysex/flash_all/flash_one (conflicted with heartbeat)
- Simplified flash_activity: LED 0 white 50ms, restores properly
- Heartbeat only on LED 9 when no activity
- USB renamed: Manufacturer=JOC, Product=JOC Midi
2026-06-25 23:47:39 +00:00
ash
6ccd28362f
Add Generic mode CC value visualization
...
- LED 1 green = CC received
- LED 2 color shows CC value range:
- Red (0-31) = recording?
- Amber (32-63) = queued?
- Green (64-95) = playing?
- Blue (96-127) = other?
- Helps map Loopy Pro Generic mode values to Launchpad palette
2026-06-25 23:32:24 +00:00
ash
90bbfa7b84
Revert to single MIDI interface (working USB detection)
...
- Dual interface broke USB enumeration
- Back to working single interface with Novation Launchpad X VID/PID
- Buttons work, MIDI OUT works
2026-06-25 23:17:18 +00:00
ash
a209b48720
Add second USB MIDI interface (LPX MIDI) for Programmer mode
...
- Interface 1 (DAW): Button presses -> Loopy Pro
- Interface 2 (MIDI): SysEx + LED control <- Loopy Pro
- Both interfaces polled in update()
- Sends on DAW interface (like real Launchpad X)
2026-06-25 22:51:44 +00:00
ash
c20f1dec2c
Add visual MIDI type indicators
...
- SysEx: ALL LEDs flash white 200ms
- Note: LED 0 flashes red 100ms
- CC: LED 1 flashes green 100ms
- Helps diagnose what MIDI arrives without serial
2026-06-25 22:39:37 +00:00
ash
c02121cd09
Add pre-build script to patch core's pins_arduino.h with Launchpad X VID/PID
...
- pre_build.py patches framework-arduinoespressif32/variants/esp32s3_devkitc/pins_arduino.h
- Replaces USB_VID 0x303a -> 0x1235, USB_PID 0x1001 -> 0x0103
- Adds USB_MANUFACTURER/PRODUCT
2026-06-25 22:21:51 +00:00
ash
109106f1f1
Add custom pins_arduino.h variant with Launchpad X VID/PID
...
- variants/esp32s3/pins_arduino.h overrides USB_VID/USB_PID
- Included via -I in build_flags before core variant
- This should force USB descriptors at hardware level
2026-06-25 22:03:15 +00:00
ash
75f583b3c4
Revert to standard board, try VID/PID via board_build.arduino.vid/pid
2026-06-25 10:57:12 +00:00
ash
fc9b7688c0
Fix board definition: add espidf framework for Arduino core
2026-06-25 08:57:24 +00:00
ash
b380133b3e
Add custom board definition with Launchpad X VID/PID (0x1235/0x0103)
...
- boards/launchpad_x_variant.json defines custom board
- platformio.ini uses custom board
- Board sets VID/PID at hardware level
2026-06-25 08:27:47 +00:00
ash
25713707aa
Revert to working USB mode (ARDUINO_USB_MODE=0 + CDC)
2026-06-25 08:20:19 +00:00
ash
7558082e7b
Try ARDUINO_USB_MODE=2 (native MIDI only)
...
Disable CDC, use ESP32 core native USB MIDI stack
2026-06-25 08:12:07 +00:00
ash
dee60c7d27
Fix compilation: declare 'now' in flash_sysex
2026-06-25 07:54:35 +00:00
ash
1676bbb044
Fix LED flash/restore logic, heartbeat only on LED 9
...
- flash_activity: only LED 0, restores properly
- flash_sysex: saves ALL LED states, restores all properly
- heartbeat: only LED 9, only when no activity flash active
- Added sysex_saved arrays to track all LED states
2026-06-25 07:48:05 +00:00
ash
0d738a6e5e
Fix compilation: add flash_sysex to interface + remove conflicting build flags
2026-06-25 07:40:10 +00:00
ash
399c4341ed
Add VID/PID to build flags for ESP32 core + stronger visual indicators
...
- Set USB VID/PID via ESP32 core build flags (may work better than TinyUSB API)
- Heartbeat on LED 9 (amber pulse every 2s) confirms device is alive
- SysEx flashes ALL LEDs white for 200ms
- Regular MIDI flashes LED 0 white for 50ms
2026-06-25 07:33:12 +00:00
ash
b5bbe24977
Add SysEx handling for Launchpad X Programmer mode
...
- Parse all SysEx CIN types (start, continue, end)
- Reassemble multi-packet SysEx messages
- Handle layout select (Programmer mode = 0x7F)
- Handle Programmer/Live mode switch
2026-06-25 07:20:47 +00:00
ash
8d859ce0af
Fix: use setID(vid, pid) not setVID/setPID
2026-06-25 06:53:02 +00:00
ash
edb86bf49a
Spoof Novation Launchpad X USB VID/PID
...
Change USB device descriptor to VID 0x1235 PID 0x0103
so Loopy Pro recognizes the device as a Launchpad X
and sends LED control MIDI in Launchpad mode.
2026-06-25 06:51:39 +00:00
ash
500720dadf
Add visual MIDI activity indicator
...
Flash LED 0 white for 30ms on any MIDI input.
Visible without serial - helps diagnose whether MIDI
is arriving when connected to iPad with Loopy Pro.
2026-06-25 06:43:00 +00:00
ash
40dfe775ea
Fix Launchpad mode MIDI receive and color palette
...
- Fixed note matching bug: removed channel check so notes 36-45 match
across channels 1-3 (Launchpad static/flashing/pulsing)
- Simplified LED lookup to match by note only (channel stored for mode)
- Replaced sparse palette with proper RGB gradients between key
breakpoints (Red, Orange, Yellow, Green, Cyan, Blue, Purple, Off)
2026-06-25 06:31:16 +00:00
ash
fee8ab5b94
Focus on Launchpad X mode: NOTE 36-45 ch1-3, send NOTE_ON/OFF for buttons
2026-06-24 06:43:16 +00:00
ash
4f6ff39af4
Add run_palette_test() declaration to header
2026-06-24 06:32:57 +00:00
ash
6aa3579317
Add palette test mode (hold pad 0+9 for 2s), comprehensive MIDI handling
2026-06-24 06:29:08 +00:00
ash
840bcf9a1e
Fix MidiEvent::SYSTEM -> SYSEX
2026-06-24 06:23:42 +00:00
ash
37c6e66584
Add visual MIDI activity indicator (flashes pad 0 on any MIDI receive)
2026-06-24 06:03:27 +00:00
ash
296611ce52
Send CC2-11 for button presses (match Loopy Pro)
2026-06-24 05:58:10 +00:00
ash
b5a1710ebd
Map CC 2-11 to pads 0-9 for Loopy Pro LED feedback
2026-06-24 05:56:58 +00:00
ash
550fb7616e
Add CC (Control Change) handling for Loopy Pro LED control
2026-06-24 05:52:21 +00:00
ash
0e5cbeb73d
Clean up: remove boot layout test (Launchpad X mapping confirmed working)
2026-06-24 05:47:09 +00:00
ash
e2997a595d
Simplify boot layout test to single quick pass (Launchpad X only)
2026-06-24 05:39:39 +00:00
ash
5df74b28e2
Add run_layout_test() declaration to header
2026-06-24 05:32:49 +00:00
ash
26c86be7ea
Add boot-time layout test (no serial input needed)
2026-06-24 04:33:02 +00:00
ash
83e9e29520
Add padtest command - tests each pad individually with 3s delay
2026-06-24 04:22:34 +00:00
ash
6ec306bbf7
Replace delay() with vTaskDelay() in miditest to avoid watchdog reset
2026-06-24 04:05:25 +00:00
ash
6c64c91e55
Add miditest and mapping commands for LED layout debugging
2026-06-24 03:56:30 +00:00
ash
e5e546ed39
Update pad_mapping to Launchpad X standard notes 36-45 (C2-A2) on channel 1
2026-06-24 03:37:29 +00:00
ash
7f061aecbf
Fix palette to 128 entries (3 purple at end)
2026-06-24 03:20:40 +00:00
ash
efaec9df71
Fix palette to exactly 128 entries (0-127)
2026-06-24 03:16:50 +00:00
ash
6503799875
Fix palette array size (128) and remove duplicate clear_all()
2026-06-24 01:41:14 +00:00
ash
bd20d1938b
Fix duplicate set_led_state, add set_led_brightness to interface
2026-06-24 01:28:56 +00:00
ash
b2d726a953
Add Launchpad X velocity->color palette and matching startup animation
2026-06-24 01:25:45 +00:00
ash
2eced5c007
Add debug logging for incoming MIDI events
2026-06-24 01:07:00 +00:00
ash
ec0834ed48
Remove isInitialized() check - not in v3.1.0 API
2026-06-24 00:56:44 +00:00
ash
9c95225a37
Back to Adafruit TinyUSB Library v3.1.0 with full init ownership (no USE_TINYUSB=1 conflict)
2026-06-24 00:53:13 +00:00
ash
65d8120abb
Fix USB diagnostic command to use native USB API
2026-06-24 00:47:00 +00:00
ash
10f5117a15
Try USB.h only for USB MIDI
2026-06-24 00:45:53 +00:00
ash
7d44a9407d
Remove esp32/USB from lib_deps - built into ESP32 Arduino core
2026-06-24 00:42:38 +00:00
ash
c1a78db7f1
Add ESP32 USB built-in library, remove Adafruit_TinyUSB.h include from main.cpp
2026-06-24 00:38:24 +00:00
ash
e4f348db66
Fix duplicate monitor_speed in platformio.ini
2026-06-24 00:33:51 +00:00
ash
9fd0231b48
Switch to ESP32 Arduino core native USB MIDI API (USB.h + USBMIDI.h), remove Adafruit TinyUSB dependency
2026-06-24 00:31:15 +00:00
ash
9ebd568b9c
Add detach/attach re-enumeration after MIDI interface added
2026-06-24 00:20:45 +00:00
ash
5fdf45aa14
Pin Adafruit TinyUSB Library to 3.1.0 (older, compatible with ESP32 core TinyUSB)
2026-06-24 00:14:59 +00:00
ash
d5b0daf018
Pin Adafruit TinyUSB to v3.0.0 exactly, restore DCD (no deletion), keep --allow-multiple-definition
2026-06-24 00:08:36 +00:00
ash
39a052d7da
Pin Adafruit TinyUSB to <3.0.0 (older TinyUSB compatible with ESP32 core). Remove dcd_stubs.
2026-06-23 23:51:49 +00:00
ash
9d350621fc
Use os.remove instead of rename for DCD deletion
2026-06-23 23:44:40 +00:00
ash
f4e7e6a64c
Delete Adafruit's DCD, add stubs for missing DCD functions, use ESP32 core DCD
2026-06-23 23:44:30 +00:00
ash
12b0d3c2c5
Restore Adafruit's DCD: ESP32 core's DCD too old, missing dcd_sof_enable etc
2026-06-23 23:35:18 +00:00
ash
66592dc33e
Delete Adafruit's generic dcd_dwc2.c so ESP32 core's patched DCD is used
2026-06-23 23:33:51 +00:00
ash
bb5f992ccb
Revert to --allow-multiple-definition: Adafruit v3.7.7 needs its own TinyUSB core files (newer API than lib in esp32 core)
2026-06-23 23:26:02 +00:00
ash
9379d0c0eb
Fix build: remove TinyUSBDevice.idVendor/idProduct (API doesn't exist)
2026-06-23 23:24:23 +00:00
ash
8bbf572414
Fix crash/reboot: remove conflicting TinyUSB core sources from Adafruit lib instead of allow-multiple-definition
2026-06-23 23:23:40 +00:00
ash
9ea09d52fe
Add extra_script.py to pass -Wl,--allow-multiple-definition to linker for duplicate TinyUSB symbol fix
2026-06-23 23:18:34 +00:00
ash
dbb66e1e77
Fix duplicate TinyUSB symbols: add lib_archive=no (prevents Adafruit library archiving, changes link order so local .o defines symbols before libarduino_tinyusb.a)
2026-06-23 23:14:51 +00:00
ash
cdfac43bfe
Fix usb command: remove non-existent getter methods, use only mounted() and ready()
2026-06-23 23:13:28 +00:00
ash
c737849a96
Fix build: add Adafruit_TinyUSB.h include in main.cpp, add build_unflags to prevent ARDUINO_USB_MODE redefinition warning
2026-06-23 23:12:42 +00:00
ash
a3e86d0ddf
Fix USB MIDI enumeration: switch from ARDUINO_USB_MODE=1 to 0 (matches working Adafruit TinyUSB example), add explicit TinyUSBDevice.begin(0) and detach/attach re-enumeration, remove conflicting tusb_config.h
2026-06-23 23:10:20 +00:00
ash
d957e276bd
Fix daisy-chain MUX byte order: MUX1 (first 8 bits) → low byte/switches 0-7, MUX2 → high byte/switches 8-15
2026-06-23 22:49:59 +00:00
ash
9a56591453
Fix NUM_LEDS=10, NUM_BUTTONS=16 for 2 daisy-chained MUX boards. Fix pixel7 stuck blue (was only sending 8 LED data to 10-LED chain)
2026-06-23 22:43:53 +00:00
ash
be36ba9bf4
Remove broken I2S define, revert to default RMT + correct pin 12
2026-06-23 22:37:03 +00:00
ash
2b689f3b18
Move FASTLED_USES_ESP32S3_I2S to build_flags so FastLED .cpp files compile with it
2026-06-23 22:32:31 +00:00
ash
cc6cc2fa32
FIX SWAPPED PINS: GPIO 9 is 74HC165 data, GPIO 12 is WS2812C data. Product docs: DAT/LD/CLK = 74HC165, + WS2812C data.
2026-06-23 22:31:08 +00:00
ash
8d585e9c40
Fix RMT crash: use FASTLED_USES_ESP32S3_I2S to avoid broken RMT. Remove rmtled.
2026-06-23 22:29:25 +00:00
ash
6274ff4182
Add rmtled: direct RMT WS2812 driver via ESP-IDF API
2026-06-23 22:26:04 +00:00
ash
835e30b8b1
Add anim command to run FastLED animation from loop()
2026-06-23 22:24:28 +00:00
ash
943e9c02a4
Add gpio.h and esp_rom_sys.h includes for rawled
2026-06-23 14:48:15 +00:00
ash
715aca3365
Fix rawled: GRB RED={0x00,0xFF,0x00}, differentiate 0/1 bit timing
2026-06-23 14:47:48 +00:00
ash
bec8025f0a
Add rawled bit-bang command, restore FastLED
2026-06-23 14:39:46 +00:00
ash
6c678ce18a
Add raw GPIO test command to diagnose pin connectivity
2026-06-23 14:35:15 +00:00
ash
5f2ad9ef91
Switch from FastLED to Adafruit NeoPixel (more reliable on ESP32-S3 RMT)
2026-06-23 14:32:19 +00:00
ash
2931571880
Fix WS2812 color order to GRB (matching BMC)
2026-06-23 14:26:27 +00:00
ash
30b56a0b4c
Match BMC protocol: 5µs delays, read DI before CLK, WS2812+RGB, power limit
2026-06-23 14:08:43 +00:00
ash
0db36a0129
Better MUX probe: 5 rounds, CLK before/after DI reads, single LED test
2026-06-23 14:01:51 +00:00
ash
5de4de4f1a
Switch from NeoPixel to FastLED for ESP32-S3 LED reliability
...
FastLED has better ESP32 support and handles timing/RMT properly.
- Use CRGB array instead of Adafruit_NeoPixel
- FastLED.show() is more reliable on ESP32-S3
- probe command now tests all LEDs at max brightness
2026-06-23 13:56:05 +00:00
ash
76dec0d359
Fix 74HC165 protocol: match RoxMux library polarity
...
Key difference from RoxMux (the library designed for this hardware):
- LD pin starts HIGH, pulses LOW->HIGH to latch (was inverted)
- Data pin is INPUT (not INPUT_PULLUP) - 10k pullups on MUX board
- bitWrite instead of manual bit shifting
2026-06-23 13:51:21 +00:00
ash
70097057fb
Add hardware probe and single-pixel test commands
...
- probe: toggles LD/CLK, reads DI state at each step, tests single pixel
- pixel0/pixel1: single pixel at max brightness for testing
- Increased LD pulse timing to 20us
- Increased CLK timing to 2us
- NeoPixel brightness raised to 80
2026-06-23 13:45:37 +00:00
ash
07e5cd8994
Rewrite MUX: WS2812C LEDs (NeoPixel) + 74HC165 buttons
...
PixelStomp MUX uses:
- WS2812C LEDs: one data line via DAT (GPIO 9), NeoPixel protocol
- 74HC165 shift register: LD/CLK/DI for reading 8 button states
Changes:
- Use Adafruit NeoPixel library for LED control
- Proper 74HC165 parallel-load shift-in for buttons
- 8 switches + 8 LEDs (was incorrectly 10)
- Diagnostic commands: dump, ledtest, red, green, blue, read
2026-06-23 13:38:51 +00:00
ash
2dfd016b76
Add MUX diagnostic commands and GPIO probe
...
Serial commands:
- dump: show button and LED state
- ledon/ledoff: toggle all LEDs
- ledtest: sequential LED test
- read: raw button read
- probe: check pin states and test LD toggle
2026-06-23 13:33:00 +00:00
ash
81cd2b41fd
Remove fixed monitor_port, let PlatformIO auto-detect
2026-06-23 13:30:06 +00:00
ash
f51df7e660
Fix board ID back to esp32-s3-devkitc-1
2026-06-23 13:28:32 +00:00
ash
102cae9d91
Add PixelStomp MUX driver (DAT=9, LD=10, CLK=11, DI=12)
...
- New PixelStompMux class with shift register read/write
- Read 10 buttons via DI (active LOW)
- Drive 10 LEDs via DAT (shift out + latch)
- LED startup animation uses MUX
- Switch polling reads from MUX shift register
- MUX instance shared between switch and LED drivers
2026-06-23 13:27:24 +00:00
ash
c94be67384
Fix for ESP32-S3-WROOM-1: safe GPIO pins, serial flush, delays
...
- Switch pins: 2-7, 15-18 (avoids USB 19/20, PSRAM 26-32, JTAG 34-37)
- LED pins: 38-42, 45-48, 21 (high GPIOs, no special functions)
- Add Serial.flush() after init messages
- Increase startup delays for reliable serial output
- Board: esp32-s3-devkitc-1-n16r8
2026-06-23 13:22:49 +00:00
ash
bb32ec65d1
Fix USB MIDI, add GPIO for switches and LEDs
...
- Remove TinyUSBDevice.begin() conflict with Arduino core
- Switch stub now reads GPIO with debounce (pins 1-10)
- LED stub now drives GPIO pins (pins 11-20) with startup animation
- All pins printed to console on init
2026-06-23 13:18:20 +00:00