Skip to content

feat(platform): deliver pocket terminal, USB apps and fault recovery - #54

Merged
Tinnci merged 37 commits into
mainfrom
feature/e1-launcher-dash-navigation
Sep 11, 2026
Merged

Tinnci merged 37 commits into
mainfrom
feature/e1-launcher-dash-navigation

Conversation

@Tinnci

@Tinnci Tinnci commented Sep 10, 2026 •

Copy link
Copy Markdown
Owner

The device now provides a practical pocket terminal: a reading-oriented Home, streamed TXT/EPUB pagination, persistent bookmarks, static sleep covers, LAN and USB book transfer, and bounded Lua micro-apps. The existing foreground, SceneManager/ViewPort and Storage ownership rules keep navigation, transfer and display work serialized.

  • Deliver E1.1–E1.10: Home/navigation, radio arbitration, Chinese/English UI, USB books/settings/app management, pocket tools and compact multi-state status icons.
  • Deliver E2.1/E2.2: measured runtime choices and restricted Lua pilots with instruction/heap limits, copied drawing and cleanup on error.
  • Deliver R1.3/R1.4: algorithmic typography, compact fonts, display-physics telemetry and parameterized spatial refresh debt.
  • Deliver D1.4/D1.5: copied maintenance status, time synchronization, confirmed maintenance, a 90-second foreground watchdog, recoverable application failures, NVS preservation and bounded Wi-Fi cleanup retries.

Failed factory candidates now destruct under the runtime reentry guard. Failed render requests remain pending centrally, covering the Settings, Gallery and Device Info retry findings from the earlier review. The Host suite exercises 4,096 fault/recovery cycles, 1,024 Wi-Fi cleanup and Lua restart cycles, 120 HTTP cancellations, display failures and seven simulated days of health progress.

G1.2 adds segmented profile firmware ZIP/application downloads, source manifests, licenses and SHA256SUMS for the v1.2.0-preview.1 draft. It updates GitHub delivery/qualification records, adds package failure/data-preservation tests to the existing Host target, and fixes the GCC fixture include and firmware-container uv dependency found by CI.

Validation: all 40 local Host targets, ShellCheck, package extraction/byte/address/checksum tests, native image descriptors, Full/Minimal firmware builds and profile comparison. CI run 34652131070 passed Linux Host, Android JVM/debug and ESP32-S3 firmware on the packaged source c401486. Full/Minimal application sizes are 2,495,312 / 521,648 bytes. D1.5 also recorded focused ASan/UBSan, connected ESP32-S3 Full flash/boot and a 95.15-second normal runtime-watchdog observation.

CrossPoint and Flipper source comparisons are documented in docs/FIRMWARE_UI_STUDY.md, docs/USB_HOST.md and docs/DYNAMIC_APPLICATION_RESEARCH.md; no upstream UI code was imported. Physical RF/Android qualification, interrupted OTA and display/sleep/RTC measurements remain in #37, #38, #56 and #57. Trusted firmware delivery remains #55.

Closes #58.

…Flipper Zero 衍生项目调研与风格演进 (Firmware Forks & UI Architecture Study)**
Complete E1.3 with bounded input coalescing and SSD2683 timeout recovery.
Protect factories, application destruction and shutdown/failsafe delegates
against runtime reentry, preventing recursive cleanup. Update SDK to 1.1.1
and record completion in the backlog and responsiveness documentation.

Validated all 32 Host targets, runtime ASan/UBSan, Full/Minimal ESP32-S3
builds and the connected-device Full flash/boot smoke.
Copilot AI lite review requested due to automatic review settings September 10, 2026 08:49

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The critical runtime cleanup issue and three moderate render-retry issues remain unresolved.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This pull request delivers milestone E1’s launcher dashboard, unified navigation, reader continuation, and responsive display/input handling.

Changes:

  • Adds tile navigation, overflow indicators, and Continue Reading.
  • Unifies application lifecycle and three-button navigation.
  • Expands display recovery, host tests, SDK integration, and documentation.
  • Leaves one critical runtime issue and three moderate render-retry issues unresolved.
File summaries
File Reviewed change
tools/test-first-party-app-controllers.sh First-party controller test build script
tools/test-display-service.sh Display-service test build script
tools/sleep_cover_test.cc Sleep-cover behavior and navigation tests
tools/sdk_v1_consumer_test.cc SDK v1 compatibility tests
tools/scene_manager_test.cc Scene lifecycle and navigation tests
tools/reader_test.cc Reader continuation and lifecycle tests
tools/first_party_app_controllers_test.cc Controller and launcher tests
tools/display_service_test.cc Display rendering and recovery tests
tools/book_transfer_test.cc Book-transfer behavior tests
tools/board_lifecycle_test.cc Board lifecycle and input buffering tests
tools/board_host_include/freertos/FreeRTOS.h Host FreeRTOS compatibility declarations
tools/application_runtime_test.cc Application runtime lifecycle tests
README.md Project documentation
README_zh.md Chinese project documentation
main/terminal.cc Terminal and application integration
main/terminal_internal.h Internal terminal interfaces
main/application_modules.cc Application module composition
main/app_sleep_cover.cc Sleep-cover integration
main/app_settings.cc Settings integration; failed renders lack retry
main/app_reader.cc Reader integration
main/app_launcher.cc Launcher integration
main/app_gallery.cc Gallery integration; failed renders lack retry
main/app_diagnostics.cc Diagnostics integration
main/app_device_info.cc Device-info integration; failed renders lack retry
main/app_connectivity.cc Connectivity integration
main/app_clock.cc Clock integration
main/app_book_transfer.cc Book-transfer integration
docs/UI_FLOW.md UI flow documentation
docs/SLEEP_COVER.md Sleep-cover documentation
docs/SDK_V1.md SDK v1 documentation
docs/READER.md Reader documentation
docs/NAVIGATION.md Unified navigation documentation
docs/MODULAR_BUILD.md Modular build constraints
docs/M3_APPLICATION_CONTRACT.md Application contract documentation
docs/M2_PLATFORM_CONTRACT.md Platform contract documentation
docs/HOME.md Dashboard and reading documentation
docs/FIRMWARE_UI_STUDY.md Firmware UI study
docs/EPD_API.md EPD API documentation
docs/DISPLAY_RESPONSIVENESS.md Display and input responsiveness documentation
docs/BOOK_TRANSFER.md Book-transfer documentation
components/zectrix_epd/zectrix_epd.cc EPD locking and recovery
components/zectrix_demo_ui/zectrix_sleep_ui.cc Sleep-cover UI
components/zectrix_demo_ui/zectrix_reader_ui.cc Reader UI
components/zectrix_demo_ui/zectrix_launcher_ui.cc Dashboard and tile UI
components/zectrix_demo_ui/zectrix_demo_ui.cc Shared demo UI integration
components/zectrix_demo_ui/zectrix_book_transfer_ui.cc Book-transfer UI
components/zectrix_demo_ui/include/zectrix_demo_ui.h Demo UI public interface
components/zectrix_demo_ui/CMakeLists.txt Demo UI build configuration
components/zectrix_board/zectrix_board.cc Board input and lifecycle handling
components/zectrix_board/include/zectrix_button_buffer.h Bounded button buffering
components/zectrix_board/include/zectrix_board.h Board public interface
components/zectrix_app/zectrix_sleep_cover.cc Sleep-cover lifecycle
components/zectrix_app/zectrix_reader_controller.cc Reader continuation and lifecycle
components/zectrix_app/zectrix_launcher_controller.cc Launcher grouping and selection
components/zectrix_app/zectrix_gallery_controller.cc Gallery scene lifecycle
components/zectrix_app/zectrix_first_party_app_controllers.cc Unified first-party navigation
components/zectrix_app/zectrix_book_transfer_controller.cc Transfer lifecycle
components/zectrix_app/zectrix_application_runtime.cc Runtime lifecycle; critical cleanup re-entry issue
components/zectrix_app/include/zectrix/sdk/version.h SDK version metadata
components/zectrix_app/include/zectrix/sdk/application.h SDK application contract
components/zectrix_app/include/zectrix_sleep_cover.h Sleep-cover interface
components/zectrix_app/include/zectrix_scene_manager.h Scene manager interface
components/zectrix_app/include/zectrix_reading_overview.h Reading overview model
components/zectrix_app/include/zectrix_reader_controller.h Reader controller interface
components/zectrix_app/include/zectrix_navigation.h Navigation contracts
components/zectrix_app/include/zectrix_launcher_controller.h Launcher controller interface
components/zectrix_app/include/zectrix_gallery_controller.h Gallery controller interface
components/zectrix_app/include/zectrix_foreground_dispatch.h Foreground dispatch interface
components/zectrix_app/include/zectrix_first_party_app_controllers.h First-party controller interface
components/zectrix_app/include/zectrix_book_transfer_controller.h Transfer controller interface
components/zectrix_app/include/zectrix_application_catalog.h Application catalog interface
components/zectrix_app/CMakeLists.txt Application component build configuration
ASTRA_TASKS.md Milestone task tracking
Review details

Suppressed comments (3)

main/app_device_info.cc:28

  • These handlers do not requeue the viewport after a failed render; ProcessRender has already consumed the request before calling the application, so the existing dirty viewport is never flushed again when the power snapshot is unchanged. Preserve a retry flag (including after ShowDeviceInfo/ShowAbout fails) or make render-failure retry centralized before returning from the new lifecycle integration.
    main/app_gallery.cc:47
  • These branches return the display error without calling controller_.Presented. Because HandleIdle already consumed the pending render decision, a transient ShowMenu/ShowSceneInfo failure leaves the Menu or Report page dirty state cleared and no retry is scheduled; the UI can remain blank until another input event. Route these render paths through the same failure/invalidation handling used by Preview.
    main/app_settings.cc:57
  • The lifecycle wrapper consumes render requests before calling Render, but this application has no completion/failure hook or pending-dirty state. A transient ShowSettings failure therefore leaves the settings page with no idle retry; subsequent idle callbacks do nothing unless the user changes a setting. Retain the failed render for retry or use the shared presentation-retry mechanism used by the other applications.
  • Files reviewed: 73/73 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread components/zectrix_app/zectrix_application_runtime.cc
@Tinnci Tinnci changed the title feat(launcher): deliver tile dashboard, display responsiveness, and unified navigation (E1.1-E1.4) feat(launcher): deliver daily-use UI, radio arbitration and localization (E1.1-E1.7) Sep 10, 2026
…架构预研 (Dynamic Application Runtime & Extensibility Research)**
Add paged Apps, USB script management, bounded rendering and independent Calculator/Flashcards examples. Validate with 36 Host targets, runtime/USB sanitizers and Full/Minimal firmware builds.
…应用试点 (Dynamic Application Runtime Prototype & Micro-App Pilot)**
…状态反射与多源时钟同步演进 (Maintenance CLI Completeness, System Reflection & Multi-Source Clock Synchronization)**
@Tinnci Tinnci changed the title feat(launcher): deliver daily-use UI, radio arbitration and localization (E1.1-E1.7) feat(platform): deliver pocket terminal, USB apps and fault recovery Sep 11, 2026
@Tinnci
Tinnci merged commit c683288 into main Sep 11, 2026
4 checks passed
@Tinnci
Tinnci deleted the feature/e1-launcher-dash-navigation branch September 11, 2026 22:28
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.

E1.8: Explore host-device USB communication and management architecture

2 participants