You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Extend the four fixed mounting orientations delivered by #33 with a new Auto option. Auto orientation should use the onboard QMI8658 accelerometer's gravity vector to keep the display upright and directional gestures intuitive as the device is rotated, updating without a restart or a visit back to Settings.
User experience
Add Auto to the existing Settings → Rotation choices alongside 0°, 90°, 180°, and 270°.
Preview Auto immediately. The preview should show both Auto and the currently detected quarter-turn orientation so the user can verify it before saving.
Swipe up to save Auto; swipe down to cancel and restore the prior manual or automatic setting.
When Auto is saved, startup splashes and subsequent screens should adopt the detected upright orientation as soon as a reliable gravity reading is available.
Continue updating while the application is running, including Ready, configuration, Timer, rest, Launch, G Mode, menus, and error screens. An orientation change must not reset, pause, or otherwise alter an active session.
Change touch-direction mapping at the same time as the display, so prompts remain relative to the text currently shown.
Keep all existing fixed-angle choices and their behavior unchanged.
Functional behavior
Detection
Use filtered QMI8658 acceleration rather than touch coordinates or elapsed motion.
Project gravity onto the display plane and classify only the four supported quarter-turn orientations.
Apply dominance thresholds, hysteresis, and a short stability period before changing orientation so road vibration, acceleration, and positions close to a 45° boundary do not cause rapid flipping.
Redraw the current framebuffer after a confirmed change; do not allocate a second 240×240 framebuffer.
Do not write each detected angle to flash. Persist only that the user's selection is Auto, retaining the detected angle in RAM.
When the display is too close to horizontal for gravity to reveal rotation about the screen normal, retain the last reliable angle. This is a physical accelerometer limitation, not an error.
Configuration and compatibility
Persist Auto in the canonical user configuration while continuing to accept existing integer DISPLAY_ROTATION_DEG values.
Existing user.json files and all fixed-angle selections must load without change.
Restore Defaults should continue to select fixed 0° rotation.
Auto must cause the IMU to initialize even when Launch Mode is disabled, while sharing the existing QMI8658 instance with Launch Mode and G Mode.
Degraded behavior
If the QMI8658 is unavailable at startup, keep Timer Mode usable and retain a safe fixed orientation rather than repeatedly changing the screen.
The Auto preview must clearly report that automatic detection is unavailable and allow cancel/back navigation.
If sampling fails after startup, freeze at the last reliable angle, log/show an actionable degraded-state message at an appropriate safe point, and preserve normal timing.
A missing IMU must not break existing manual rotation choices.
Hardware, safety, and compatibility
Target the supported Waveshare RP2040-Touch-LCD-1.28 and its onboard QMI8658, GC9A01A, and CST816S.
Keep orientation polling bounded and responsive without increasing framebuffer memory use or materially delaying touch/session loops.
Coordinate IMU access with Launch and G Mode so there are no duplicate sensor objects or conflicting reads.
Never interrupt or restart an active track/rest session solely because orientation changes or automatic sensing degrades.
Verify the native-axis/sign mapping on physical hardware at all four quarter turns.
Acceptance criteria
Rotation Settings offers Auto plus all four existing fixed angles.
Auto preview reports the live detected angle and supports save/cancel safely.
Auto persists across restart without replacing the setting with a detected integer angle.
The screen redraws upright and touch directions remain intuitive after each stable quarter-turn change.
Detection uses hysteresis/stability filtering and does not oscillate at boundaries or under short acceleration spikes.
A near-horizontal device retains its last reliable orientation.
Active track/rest timing continues uninterrupted through orientation changes.
Existing fixed rotation, Launch Mode, G Mode, brightness, restore-default, and configuration behavior remain compatible.
Missing or failing IMU behavior is safe, actionable, and does not block Timer Mode or manual rotation.
The complete suite passes and Auto is exercised on the supported physical device at all four quarter turns.
Documentation
Update README and User Guide with Auto selection, live behavior, the near-horizontal limitation, degraded behavior, and the required deployment module list.
Relationship
This is a follow-up enhancement to #33 and the v4.1.0 fixed-orientation release. It remains part of roadmap epic #23.
Parent: #23
Summary
Extend the four fixed mounting orientations delivered by #33 with a new Auto option. Auto orientation should use the onboard QMI8658 accelerometer's gravity vector to keep the display upright and directional gestures intuitive as the device is rotated, updating without a restart or a visit back to Settings.
User experience
Autoand the currently detected quarter-turn orientation so the user can verify it before saving.Functional behavior
Detection
Configuration and compatibility
DISPLAY_ROTATION_DEGvalues.user.jsonfiles and all fixed-angle selections must load without change.Degraded behavior
Hardware, safety, and compatibility
Acceptance criteria
Documentation
Relationship
This is a follow-up enhancement to #33 and the v4.1.0 fixed-orientation release. It remains part of roadmap epic #23.