Send CC instead of NOTE_ON for Loopy Pro generic mirror. Clean up flash_activity.
This commit is contained in:
+8
-8
@@ -126,18 +126,18 @@ void AppTask::process_switch_event(uint8_t switch_id, bool pressed) {
|
|||||||
for (uint8_t i = 0; i < NUM_PADS; i++) {
|
for (uint8_t i = 0; i < NUM_PADS; i++) {
|
||||||
if (pad_mapping[i].physical_switch == switch_id) {
|
if (pad_mapping[i].physical_switch == switch_id) {
|
||||||
uint8_t channel = pad_mapping[i].midi_channel;
|
uint8_t channel = pad_mapping[i].midi_channel;
|
||||||
// Loopy Pro Launchpad mode expects NOTE_ON/NOTE_OFF on notes 36-45
|
// Loopy Pro Generic mode mirrors CC back on the same CC it received
|
||||||
uint8_t note = pad_mapping[i].midi_note;
|
// CC2-11 maps to pads 0-9
|
||||||
uint8_t velocity = pressed ? 127 : 0;
|
uint8_t cc_num = 2 + i;
|
||||||
|
uint8_t value = pressed ? 127 : 0;
|
||||||
|
|
||||||
if (pressed) {
|
if (pressed) {
|
||||||
midi_transport->send_note_on(channel, note, velocity);
|
midi_transport->send_cc(channel, cc_num, value);
|
||||||
} else {
|
|
||||||
midi_transport->send_note_off(channel, note, velocity);
|
|
||||||
}
|
}
|
||||||
|
// Don't send CC 0 on release — Loopy Pro uses velocity 0 to turn off
|
||||||
|
|
||||||
Serial.printf("[APP] Switch %d -> Ch%d Note%d Vel%d (%s)\n",
|
Serial.printf("[APP] Switch %d -> Ch%d CC%d Val%d (%s)\n",
|
||||||
switch_id, channel, note, velocity,
|
switch_id, channel, cc_num, value,
|
||||||
pressed ? "PRESS" : "RELEASE");
|
pressed ? "PRESS" : "RELEASE");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-21
@@ -278,27 +278,8 @@ void DefaultLedStub::set_led_brightness(uint8_t brightness) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DefaultLedStub::flash_activity() {
|
void DefaultLedStub::flash_activity() {
|
||||||
if (!initialized || !mux_ptr) return;
|
// No-op: activity flash on all MIDI input was confusing.
|
||||||
|
// LED feedback is handled directly by set_led_state().
|
||||||
uint32_t now = millis();
|
|
||||||
|
|
||||||
// Save current LED 0 color if we just started flashing
|
|
||||||
if (now >= activity_off_time) {
|
|
||||||
saved_r = 0;
|
|
||||||
saved_g = 0;
|
|
||||||
saved_b = 0;
|
|
||||||
if (led_states[0].active) {
|
|
||||||
uint32_t color = launchpad_palette[led_states[0].velocity];
|
|
||||||
saved_r = (color >> 16) & 0xFF;
|
|
||||||
saved_g = (color >> 8) & 0xFF;
|
|
||||||
saved_b = color & 0xFF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flash LED 0 white
|
|
||||||
mux_ptr->set_led_color(0, 255, 255, 255);
|
|
||||||
mux_ptr->show();
|
|
||||||
activity_off_time = now + 50;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultLedStub::update() {
|
void DefaultLedStub::update() {
|
||||||
|
|||||||
Reference in New Issue
Block a user