From c6dfc195787cf9bc5b07153128e090e7d595546c Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 26 Sep 2026 00:12:22 +0000 Subject: [PATCH] Fix backtick back button to work reliably, improve Terminal Shell responsiveness, enhance HID Injector feedback --- src/core/shell.cpp | 6 +++--- src/modules/hidinjector.cpp | 5 +++-- src/modules/terminalemu.cpp | 9 ++++++--- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/core/shell.cpp b/src/core/shell.cpp index d4ad7f2..3734d12 100644 --- a/src/core/shell.cpp +++ b/src/core/shell.cpp @@ -159,20 +159,20 @@ void Shell::loop() { if (M5Cardputer.Keyboard.isChange() && M5Cardputer.Keyboard.isPressed()) { auto st = M5Cardputer.Keyboard.keysState(); for (char c : st.word) { - if (c == '`') { if (active >= 0) back(); continue; } + if (c == '`' || c == 27) { if (active >= 0) { back(); continue; } } if (active < 0) { if (c == ';') { sel = (sel - 1 + nmods) % nmods; drawMenu(); } else if (c == '.') { sel = (sel + 1) % nmods; drawMenu(); } else if (c == '\r' || c == ' ') enter(sel); } else { - mods[active]->onKey(c); + bool consumed = mods[active]->onKey(c); + if (!consumed && c == '`') back(); } } if (st.enter && active < 0) enter(sel); } if (active < 0) { - // keep the selection glow breathing — repaints only the bar strip (flicker-free) if (millis() - lastTick > 90) { lastTick = millis(); drawMenu(false); } return; } diff --git a/src/modules/hidinjector.cpp b/src/modules/hidinjector.cpp index 1f2e926..95180be 100644 --- a/src/modules/hidinjector.cpp +++ b/src/modules/hidinjector.cpp @@ -21,12 +21,13 @@ public: void onEnter() override { active = false; sent = 0; - say("HID ready, plug USB host"); + say("HID ready"); #ifdef HAVE_TINYSB if (tud_mounted()) { active = true; sent = 0; - say("Host detected - injecting"); + say("Host detected!"); + say("Injecting..."); } #endif } diff --git a/src/modules/terminalemu.cpp b/src/modules/terminalemu.cpp index 23f1788..73652ce 100644 --- a/src/modules/terminalemu.cpp +++ b/src/modules/terminalemu.cpp @@ -43,10 +43,13 @@ public: void tick() override { if (!connected) return; - while (ser.available()) { + uint32_t start = millis(); + while (ser.available() && millis() - start < 10) { char c = ser.read(); - if (rxPos < sizeof(rxBuffer) - 1) rxBuffer[rxPos++] = c; - if (rxPos >= sizeof(rxBuffer) - 1) rxPos = sizeof(rxBuffer) - 1; + if (rxPos < sizeof(rxBuffer) - 1) { + rxBuffer[rxPos++] = c; + if (c == '\n') rxPos = 0; + } } }