feat(platform): deliver pocket terminal, USB apps and fault recovery - #54
Merged
Merged
Conversation
…Flipper Zero 衍生项目调研与风格演进 (Firmware Forks & UI Architecture Study)**
…le Dashboard & Overview Card)**
…保护 (Display Responsiveness & Input Concurrency)**
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.
…合 (Unified Navigation Consistency)**
There was a problem hiding this comment.
🟡 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;
ProcessRenderhas 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 afterShowDeviceInfo/ShowAboutfails) 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. BecauseHandleIdlealready consumed the pending render decision, a transientShowMenu/ShowSceneInfofailure 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 transientShowSettingsfailure 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.
…机制 (Radio Arbiter for Wi-Fi & BLE)**
This was referenced 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)**
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
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.1draft. 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.mdanddocs/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.