mirror of
https://github.com/pelgraine/Meck.git
synced 2026-07-28 20:32:47 +02:00
006d3bd00c
The alarm was self-dismissing after ~10-15 seconds. Cause: AUTO_OFF_MILLIS is 15000, so the display turned off shortly after the alarm fired; UITask.cpp:2769 raise-to-wake then saw !_display->isOn() && board.tiltFired() -- the buzzing motor on the wrist is exactly what trips the BMA423 tilt detector -- and called setCurrScreen(lock_screen). The 'navigating away counts as a dismiss' rule added with the alarm screen then killed it. Any tap did the same. While ringing, UITask::loop now holds the alarm screen current and pushes _auto_off forward each iteration. The display therefore stays on, raise-to-wake is never reached, and checkDisplayOn() passes KEY_ENTER through to handleInput() rather than swallowing the first press as a wake. Dismissal is now the PWR key only (KEY_ENTER). Taps are swallowed. The WATCH_ALARM_RINGING_MS timeout (5 minutes) is unchanged and remains the backstop. Ringing footer updated from 'Tap to dismiss' to 'Press PWR to dismiss'. The ordering inside loop() makes this safe: the button dispatch and curr->handleInput() both run before the alarm hold, so a dismiss takes effect on the same iteration and the hold is not re-applied. The 90s per-slot fire cooldown prevents an immediate re-fire within the alarm's own minute.