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
This commit is contained in:
ash
2026-06-25 22:39:37 +00:00
parent c02121cd09
commit c20f1dec2c
3 changed files with 59 additions and 4 deletions
+47
View File
@@ -345,3 +345,50 @@ void DefaultLedStub::update() {
if (heartbeat_phase > 200) heartbeat_phase = 0;
}
}
void DefaultLedStub::flash_all(uint8_t r, uint8_t g, uint8_t b, uint16_t duration) {
if (!initialized || !mux_ptr) return;
// Save all LED states
for (int i = 0; i < NUM_LEDS; i++) {
if (led_states[i].active) {
uint32_t color = launchpad_palette[led_states[i].velocity];
sysex_saved_r[i] = (color >> 16) & 0xFF;
sysex_saved_g[i] = (color >> 8) & 0xFF;
sysex_saved_b[i] = color & 0xFF;
} else {
sysex_saved_r[i] = 0;
sysex_saved_g[i] = 0;
sysex_saved_b[i] = 0;
}
}
for (int i = 0; i < NUM_LEDS; i++) {
mux_ptr->set_led_color(i, r, g, b);
}
mux_ptr->show();
activity_off_time = millis() + duration;
sysex_flash_active = true;
}
void DefaultLedStub::flash_one(uint8_t index, uint8_t r, uint8_t g, uint8_t b, uint16_t duration) {
if (!initialized || !mux_ptr) return;
if (index >= NUM_LEDS) return;
// Save only this LED's state
if (led_states[index].active) {
uint32_t color = launchpad_palette[led_states[index].velocity];
saved_r = (color >> 16) & 0xFF;
saved_g = (color >> 8) & 0xFF;
saved_b = color & 0xFF;
} else {
saved_r = 0;
saved_g = 0;
saved_b = 0;
}
mux_ptr->set_led_color(index, r, g, b);
mux_ptr->show();
activity_off_time = millis() + duration;
sysex_flash_active = false;
}