Skip to content

Fix bitmap HUD dashboard hide failure & display improvements#43

Merged
FJiangArthur merged 2 commits into
mainfrom
fix/bitmap-hud-dashboard-hide-and-display
Apr 8, 2026
Merged

Fix bitmap HUD dashboard hide failure & display improvements#43
FJiangArthur merged 2 commits into
mainfrom
fix/bitmap-hud-dashboard-hide-and-display

Conversation

@FJiangArthur
Copy link
Copy Markdown
Owner

Summary

  • Fix bitmap dashboard hide failure — Removed unnecessary pushScreen(0xF4) command from the bitmap hide path. The Even Realities SDK only uses the 0x26 dashboard visibility command. The extra pushScreen was timing out and blocking state recovery, causing the [BitmapHUD] dashboard screen hide failed error.
  • Fix Y-axis squeeze — Changed logical design space from 640x400 to 576x136 (matching physical G1 display 1:1). All layouts and widgets redesigned.
  • Fix unreadable text — Bumped minimum font size from 8-9pt to 10pt. At 1-bit depth without anti-aliasing, smaller fonts lose critical pixel detail.
  • Add phone preview — Green-on-black preview viewer in HUD widgets screen showing exactly what the glasses display.
  • Add independent L/R pushScreen — New pushScreenToConnectedSides() sends to both eyes independently, fixing the sendBoth() short-circuit bug where R never gets the command if L fails.

Root Cause Analysis

See docs/BITMAP_HUD_DASHBOARD_HIDE_FINDINGS.md for the full investigation including:

  • Protocol analysis showing 0xF4 is not part of the Even Realities SDK
  • BleManager.sendBoth() short-circuit bug (L timeout → R skipped)
  • iOS native layer silently dropping BLE write failures
  • Evidence from the official EvenDemoApp and Python community wrapper

Key Findings

Issue Root Cause Fix
Dashboard hide failed pushScreen(0xF4) after hideDashboard(0x26) — firmware can't respond in time Removed pushScreen — SDK only needs 0x26
HUD stuck active _restoreBitmapRoute returned false on screen hide failure, blocking cleanup Simplified to single command; state always recovers
Right eye misses commands sendBoth() short-circuits on L failure Added pushScreenToConnectedSides() with independent L/R
Text unreadable 8-9pt fonts on 576x136 1-bit display Minimum 10pt across all widgets
Y-axis squeezed 640x400 logical → 576x136 physical (scale 0.34) 1:1 logical = physical

Test plan

  • flutter analyze — 0 errors (60 infos only)
  • flutter test test/ — 453 tests pass
  • New tests for pushScreenToConnectedSides (5 cases: both succeed, L fails R still gets command, R-only, nack, no connection)
  • Updated dashboard service tests for simplified hide path
  • On-device testing with G1 glasses — verify dashboard shows and hides cleanly
  • Verify bitmap preview renders correctly in HUD widgets screen

🤖 Generated with Claude Code

FJiangArthur and others added 2 commits April 4, 2026 23:45
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Detailed findings on why pushScreen(0xF4) was failing after
hideDashboard(0x26), with evidence from the Even Realities SDK,
Python community wrapper, and BLE protocol analysis.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@FJiangArthur FJiangArthur merged commit 1fffabc into main Apr 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant