mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-14 15:16:40 +00:00
feat(sim): board feature parity (reset/GPS/sensors/admin/keyboard) + input fixes
Rounds out the browser sim harness with the rest of the physical board's interactions: a reset button (JS-driven, since board.reboot() is inert under -sEXIT_RUNTIME=0), GPS input wired into a real LocationProvider via new SimSensorManager, JS-settable battery/environment telemetry, an admin/repeater-login test hook (sendRoomLogin against the default "password"), and full physical-keyboard text entry (printable ASCII passthrough into the existing KeyboardWidget, Tab->KEY_KB_ENTER submit). Also fixes three real bugs found while exercising all of this in a real browser: - UITask.cpp's native-only stdin poll branch had no __EMSCRIPTEN__ exclusion, so it also compiled into the wasm build and called a real, blocking window.prompt() on nearly every frame -- the actual cause of the reported time/controls jumping. Now gated to native only. - 'n'/'p' were mapped as Next/Prev keyboard shortcuts, colliding with typing those literal letters. Removed the shortcuts; added explicit Next/Prev buttons to mesh.html (previously relied solely on them). - Buttons grabbed native browser keyboard focus on click, so a later stray Enter/Space could silently re-trigger a previously-clicked button (e.g. Reset). mousedown now calls preventDefault() on all buttons. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2424,7 +2424,21 @@ void UITask::loop() {
|
||||
} else if (ev == BUTTON_EVENT_TRIPLE_CLICK) {
|
||||
if (!_locked) enqueueKey(handleTripleClick(KEY_SELECT));
|
||||
}
|
||||
#elif defined(SIM_PLATFORM)
|
||||
#elif defined(SIM_PLATFORM) && !defined(__EMSCRIPTEN__)
|
||||
// Native terminal input ONLY -- this branch previously had no
|
||||
// __EMSCRIPTEN__ exclusion, so it also compiled into the wasm build
|
||||
// (SIM_PLATFORM is defined there too, and UI_HAS_JOYSTICK/PIN_USER_BTN
|
||||
// are both unset for variants/sim). Every tick it called real select()/
|
||||
// read() on fd 0; under Emscripten, with no stdin ever wired up, that
|
||||
// hits the runtime's default TTY device, which falls back to a real,
|
||||
// blocking window.prompt("Input: ") -- so every single browser tab
|
||||
// running the wasm build was popping a native dialog on nearly every
|
||||
// frame, discovered by seeing Playwright's page 'dialog' event fire
|
||||
// continuously from the moment the module boots. The wasm build's own
|
||||
// input already comes through sim_enqueue_key()/injectSimKey() (see
|
||||
// above, in the #if defined(SIM_PLATFORM) && defined(__EMSCRIPTEN__)
|
||||
// block) -- this stdin-poll branch was only ever meant for Phase 1's
|
||||
// native terminal target.
|
||||
// Native terminal input: stdin is put into raw/non-canonical mode by
|
||||
// variants/sim/sim_main.cpp's main(), so keys arrive here one at a time
|
||||
// with no Enter-to-submit line buffering. Non-blocking select() on fd 0
|
||||
|
||||
Reference in New Issue
Block a user