From 4a210823a879411dbfa3770b741ded3fbf200291 Mon Sep 17 00:00:00 2001 From: Dave Allie Date: Wed, 11 Feb 2026 21:42:37 +1100 Subject: [PATCH] fix: Manually trigger GPIO update in File Browser mode (#819) ## Summary * Manually trigger GPIO update in File Browser mode * Previously just assumed that the GPIO data would update automatically (presumably via yield), the data is currently updated in the main loop (and now here as well during the middle of the processing loop). * This allows the back button to be correctly detected instead of only being checked once every 100ms or so for the button state. ## Additional Context * Fixes https://github.com/crosspoint-reader/crosspoint-reader/issues/579 --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? No ## Summary by CodeRabbit * **Bug Fixes** * Enhanced input state detection in the web server interface for more responsive and accurate user command recognition during high-frequency operations. --- src/MappedInputManager.h | 1 + src/activities/network/CrossPointWebServerActivity.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/MappedInputManager.h b/src/MappedInputManager.h index bd594a25..67f094cc 100644 --- a/src/MappedInputManager.h +++ b/src/MappedInputManager.h @@ -15,6 +15,7 @@ class MappedInputManager { explicit MappedInputManager(HalGPIO& gpio) : gpio(gpio) {} + void update() const { gpio.update(); } bool wasPressed(Button button) const; bool wasReleased(Button button) const; bool isPressed(Button button) const; diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index 0338d825..fe568503 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -348,6 +348,9 @@ void CrossPointWebServerActivity::loop() { // Yield and check for exit button every 64 iterations if ((i & 0x3F) == 0x3F) { yield(); + // Force trigger an update of which buttons are being pressed so be have accurate state + // for back button checking + mappedInput.update(); // Check for exit button inside loop for responsiveness if (mappedInput.wasPressed(MappedInputManager::Button::Back)) { onGoBack();