Fix button-to-MIDI latency: remove blocking serial, reduce debounce, faster loop

Latency sources fixed:
- debounce 50ms -> 5ms (switch_stub.cpp:15)
- Removed [MIDI OUT] Serial.printf from send_cc() (midi_transport.cpp:93-98)
- Removed [APP] Switch pressed/released prints from update() (app_task.cpp:39,43)
- Removed [APP] Switch -> CC print from process_switch_event() (app_task.cpp:140-143)
- loop() delay 10ms -> 1ms (main.cpp:390)

Serial output at 115200 baud was taking 2-5ms per printf call
in the critical button-to-MIDI path, adding 7-15ms+ total latency
per button press. All removed from hot path.
This commit is contained in:
ash
2026-07-02 06:22:23 +00:00
parent 0d22769cf6
commit c44bfb033b
4 changed files with 2 additions and 9 deletions
-6
View File
@@ -36,11 +36,9 @@ void AppTask::update() {
bool is_pressed = switch_driver->is_pressed(i); bool is_pressed = switch_driver->is_pressed(i);
if (is_pressed && !last_switch_state[i]) { if (is_pressed && !last_switch_state[i]) {
Serial.printf("[APP] Switch %d pressed\n", i);
process_switch_event(i, true); process_switch_event(i, true);
last_switch_state[i] = true; last_switch_state[i] = true;
} else if (!is_pressed && last_switch_state[i]) { } else if (!is_pressed && last_switch_state[i]) {
Serial.printf("[APP] Switch %d released\n", i);
process_switch_event(i, false); process_switch_event(i, false);
last_switch_state[i] = false; last_switch_state[i] = false;
} }
@@ -136,10 +134,6 @@ void AppTask::process_switch_event(uint8_t switch_id, bool pressed) {
if (pressed) { if (pressed) {
midi_transport->send_cc(channel, cc_num, value); midi_transport->send_cc(channel, cc_num, value);
} }
Serial.printf("[APP] Switch %d -> Ch%d CC%d Val%d (%s)\n",
switch_id, channel, cc_num, value,
pressed ? "PRESS" : "RELEASE");
break; break;
} }
} }
+1 -1
View File
@@ -387,5 +387,5 @@ void loop() {
handle_serial_command(cmd); handle_serial_command(cmd);
} }
delay(10); delay(1);
} }
-1
View File
@@ -94,7 +94,6 @@ void UsbMidiTransport::send_cc(uint8_t channel, uint8_t cc, uint8_t value) {
if (!initialized) return; if (!initialized) return;
uint8_t packet[4] = {0x0B, (uint8_t)(0xB0 | (channel - 1)), cc, value}; uint8_t packet[4] = {0x0B, (uint8_t)(0xB0 | (channel - 1)), cc, value};
usb_midi.writePacket(packet); usb_midi.writePacket(packet);
Serial.printf("[MIDI OUT] Ch:%d CC:%d:%d\n", channel, cc, value);
} }
bool UsbMidiTransport::is_connected() { bool UsbMidiTransport::is_connected() {
+1 -1
View File
@@ -11,7 +11,7 @@ DefaultSwitchStub::DefaultSwitchStub() : initialized(false) {
switch_states[i].current_state = false; switch_states[i].current_state = false;
switch_states[i].previous_state = false; switch_states[i].previous_state = false;
switch_states[i].last_change_time = 0; switch_states[i].last_change_time = 0;
switch_states[i].debounce_time = 50; switch_states[i].debounce_time = 5;
} }
} }