Skip to content

Various improvements - #673

Merged
KenVanHoeylandt merged 5 commits into
mainfrom
develop
Oct 4, 2026
Merged

KenVanHoeylandt merged 5 commits into
mainfrom
develop

Conversation

@KenVanHoeylandt

@KenVanHoeylandt KenVanHoeylandt commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Graphics & rendering

  • Implement binfont-module to generate bitmap fonts on the device itself
  • Remove lodepng support from LVGL library and create Modules/lodepng-module to make the feature re-usable in non-LVGL apps too. Add binding functions for LVGL support.
  • Implement large icons for boot screen (Tactility and USB logos)
  • Remove unused asset files in Data/

Boot

  • Split up Tactility.cpp and its run() function into various Init*.cpp files.
  • Re-implement Boot.cpp app as non-LVGL app
  • Boot app now has a BootSequence.cpp for the init code.
  • LVGL is now started when the Boot app finishes
  • Move more init logic into Boot app

BLE

  • Don't allocate scan result buffers unless BLE is on
  • Allocate scan results in external memory if possible

UX & UI

  • USB Settings app: remove border from the button container

@coderabbitai

coderabbitai Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

📝 Walkthrough

Walkthrough

The changes add binary-font and PNG modules, integrate runtime-generated icon fonts and PNG decoding with LVGL, and move system initialization and boot handling into dedicated implementations. They also replace fixed ESP32 BLE scan arrays with allocated buffers and update related build configuration, SDK defaults lookup, display orientation detection, driver logging, and platform settings.

Priority: ➖ Normal

Merge Risk: 🟡 Moderate · up to 4595a

If launcher startup fails, boot can report success and close its screen without opening the launcher. Handle that failure before merging.

Security Architecture Review

Security architecture risk: 🔵 Low · up to 4595a

The checked boot paths retain launcher validation and storage failure guards, with explicit cleanup before graphics startup. No introduced security boundary bypass was established. Coverage of the broader graphics and radio lifecycle changes remains incomplete.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • observed — The inspected boot control flow reaches device-local display resources, flash or SDMMC mass-storage mode, radio and primary-service startup, and app scheduling. These are shared device capabilities, not merely Boot app private state.

Security Findings and Attack Paths

  • observed — Primary service startup before USB and missing-SD guards predates this PR. The base already started Bluetooth, Wi-Fi, development, and webserver services before launching Boot. Their presence before those guards is therefore not evidence of a newly introduced attack path.

Trust Boundaries and Controls

  • observed — Configured launcher overrides still require a registered manifest, with invalid or unavailable settings falling back to the configured default. Startup also requires successful start-context lookup. This preserves manifest resolution, but does not establish an authorization or sandbox boundary for apps.
  • observed — The dispatcher extraction preserves callback ownership: unsuccessful enqueue deletes the boxed function, while successful consumption executes and deletes it. The base used the same mechanism; the extraction does not itself add callback authority.

Resilience and Maintainability Implications

  • observed — Boot completion remains weaker than confirmation that the selected app started successfully: lookup failure skips startup, and the start result is ignored before completion is emitted. This limitation also exists in the base and is not retained as an introduced PR concern.
🚥 Pre-merge checks | ✅ 3 | ❌ 1 | ❓ 1

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 17.19% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 192 functions across 54 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title, "Various improvements," is generic and does not identify the main changes, such as adding the BinFont module or reworking boot initialization. Replace the title with a concise description of the primary change, for example: "Add BinFont support and refactor boot initialization."
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@KenVanHoeylandt KenVanHoeylandt changed the title Develop Various improvements Oct 4, 2026

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 29ef5ce7-6ba3-441e-beb8-046348850f1c
📥 Commits

Reviewing files that changed from the base of the PR and between 0d451e8 and c859328.

⛔ Files ignored due to path filters (44)
  • Data/system/app/Boot/assets/logo_large.png is excluded by !**/*.png
  • Data/system/app/Boot/assets/logo_usb_large.png is excluded by !**/*.png
  • Data/system/app/Boot/assets/logo_usb_small.png is excluded by !**/*.png
  • Data/system/fonts/MaterialSymbolsRounded.ttf is excluded by !**/*.ttf
  • Data/system_sources/App Icons.svg is excluded by !**/*.svg
  • Data/system_sources/Old Light Mode Icons/app_icon_calculator.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_chat.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_display_settings.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_fallback.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_files.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_gpio.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_i2c.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_notes.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_power_settings.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_settings.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_system_info.png is excluded by !**/*.png
  • Data/system_sources/Old Light Mode Icons/app_icon_time_date_settings.png is excluded by !**/*.png
  • Data/system_sources/app/Launcher/apps.svg is excluded by !**/*.svg
  • Data/system_sources/app/Launcher/folder.svg is excluded by !**/*.svg
  • Data/system_sources/app/Launcher/settings.svg is excluded by !**/*.svg
  • Data/system_sources/app/TimeZone/search.svg is excluded by !**/*.svg
  • Data/system_sources/app/WifiManage/lock.svg is excluded by !**/*.svg
  • Data/system_sources/app/WifiManage/signal_medium.svg is excluded by !**/*.svg
  • Data/system_sources/app/WifiManage/signal_strong.svg is excluded by !**/*.svg
  • Data/system_sources/app/WifiManage/signal_weak.svg is excluded by !**/*.svg
  • Data/system_sources/app_icon_calculator.svg is excluded by !**/*.svg
  • Data/system_sources/app_icon_chat.svg is excluded by !**/*.svg
  • Data/system_sources/app_icon_gpio.svg is excluded by !**/*.svg
  • Data/system_sources/app_icon_notes.svg is excluded by !**/*.svg
  • Data/system_sources/app_icon_time_date_settings.svg is excluded by !**/*.svg
  • Data/system_sources/location.svg is excluded by !**/*.svg
  • Data/system_sources/wifi_off_white.svg is excluded by !**/*.svg
  • Data/system_sources/wifi_scan_white.svg is excluded by !**/*.svg
  • Data/system_sources/wifi_signal_medium_white.svg is excluded by !**/*.svg
  • Data/system_sources/wifi_signal_strong_white.svg is excluded by !**/*.svg
  • Data/system_sources/wifi_signal_weak_white.svg is excluded by !**/*.svg
  • Modules/binfont-module/tests/fixtures/icons_raw_2.bin is excluded by !**/*.bin
  • Modules/binfont-module/tests/fixtures/icons_raw_4.bin is excluded by !**/*.bin
  • Modules/binfont-module/tests/fixtures/icons_rle_2.bin is excluded by !**/*.bin
  • Modules/binfont-module/tests/fixtures/icons_rle_4.bin is excluded by !**/*.bin
  • Modules/binfont-module/tests/fixtures/icons_rlepf_2.bin is excluded by !**/*.bin
  • Modules/binfont-module/tests/fixtures/icons_rlepf_4.bin is excluded by !**/*.bin
  • Modules/binfont-module/tests/fixtures/text_kern_classes.bin is excluded by !**/*.bin
  • Modules/binfont-module/tests/fixtures/text_kern_pairs.bin is excluded by !**/*.bin
📒 Files selected for processing (100)
  • Buildscripts/sdkconfig-default.properties
  • CMakeLists.txt
  • Data/system/fonts/MaterialSymbolsRounded.codepoints
  • Data/system_sources/Statusbar Battery.kra
  • Data/system_sources/Statusbar sdcard.kra
  • Devices/m5stack-tab5/m5stack,tab5.dts
  • Documentation/ideas.md
  • Libraries/lv_screenshot/CMakeLists.txt
  • Libraries/lv_screenshot/Source/save_png.c
  • Modules/binfont-module/CMakeLists.txt
  • Modules/binfont-module/LICENSE-Apache-2.0.md
  • Modules/binfont-module/README.md
  • Modules/binfont-module/include/binfont/binfont.h
  • Modules/binfont-module/include/binfont/generator.h
  • Modules/binfont-module/include/binfont/module.h
  • Modules/binfont-module/include/binfont/render.h
  • Modules/binfont-module/private/binfont_private.h
  • Modules/binfont-module/private/stb_truetype.h
  • Modules/binfont-module/source/binfont.cpp
  • Modules/binfont-module/source/generator.cpp
  • Modules/binfont-module/source/module.c
  • Modules/binfont-module/source/render.cpp
  • Modules/binfont-module/tests/CMakeLists.txt
  • Modules/binfont-module/tests/source/binfont_test.cpp
  • Modules/binfont-module/tests/source/main.cpp
  • Modules/lodepng-module/CMakeLists.txt
  • Modules/lodepng-module/LICENSE-Apache-2.0.md
  • Modules/lodepng-module/LICENSE-lodepng.txt
  • Modules/lodepng-module/README.md
  • Modules/lodepng-module/include/lodepng/lodepng.h
  • Modules/lodepng-module/include/lodepng/lodepng_upstream.h
  • Modules/lodepng-module/include/lodepng/module.h
  • Modules/lodepng-module/source/allocators.c
  • Modules/lodepng-module/source/lodepng.c
  • Modules/lodepng-module/source/module.c
  • Modules/lodepng-module/tests/CMakeLists.txt
  • Modules/lodepng-module/tests/source/lodepng_test.cpp
  • Modules/lodepng-module/tests/source/main.cpp
  • Modules/lvgl-module/CMakeLists.txt
  • Modules/lvgl-module/README.md
  • Modules/lvgl-module/generate-icons.py
  • Modules/lvgl-module/include/lvgl/binfont.h
  • Modules/lvgl-module/include/lvgl/fonts.h
  • Modules/lvgl-module/include/lvgl/icons/names.h
  • Modules/lvgl-module/private/png_decoder.h
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_30.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_36.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_42.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_48.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_64.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_72.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_12.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_16.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_20.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_24.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_32.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_40.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_48.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_64.c
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_12.c
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_16.c
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_20.c
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_30.c
  • Modules/lvgl-module/source/arch/lvgl_esp32.c
  • Modules/lvgl-module/source/arch/lvgl_posix.c
  • Modules/lvgl-module/source/binfont.c
  • Modules/lvgl-module/source/fonts.c
  • Modules/lvgl-module/source/icon_names.c
  • Modules/lvgl-module/source/png_decoder.c
  • Modules/lvgl-module/source/symbols.c
  • Platforms/platform-esp32/private/bluetooth/esp32_ble_internal.h
  • Platforms/platform-esp32/source/drivers/bluetooth/esp32_ble.cpp
  • Platforms/platform-esp32/source/drivers/bluetooth/esp32_ble_scan.cpp
  • Tactility/CMakeLists.txt
  • Tactility/Include/Tactility/Tactility.h
  • Tactility/Private/Tactility/TactilityPrivate.h
  • Tactility/Private/Tactility/app/boot/BootScreen.h
  • Tactility/Private/Tactility/app/boot/BootSequence.h
  • Tactility/Private/Tactility/lvgl/IconFonts.h
  • Tactility/Source/Init.cpp
  • Tactility/Source/InitApps.cpp
  • Tactility/Source/InitModules.cpp
  • Tactility/Source/InitServices.cpp
  • Tactility/Source/Main.cpp
  • Tactility/Source/MainDispatcher.cpp
  • Tactility/Source/Tactility.cpp
  • Tactility/Source/app/boot/Boot.cpp
  • Tactility/Source/app/boot/BootScreen.cpp
  • Tactility/Source/app/boot/BootSequence.cpp
  • Tactility/Source/app/usbsettings/UsbSettings.cpp
  • Tactility/Source/lvgl/IconFonts.cpp
  • Tactility/Source/lvgl/Lvgl.cpp
  • Tactility/Source/service/audio/Audio.cpp
  • Tactility/Source/service/rtctime/RtcTime.cpp
  • Tactility/Source/service/webserver/WebServerService.cpp
  • Tactility/Source/settings/DisplaySettings.cpp
  • TactilityKernel/source/driver.cpp
  • Tests/CMakeLists.txt
  • device.py
  • lv_conf.h
💤 Files with no reviewable changes (18)
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_16.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_72.c
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_12.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_42.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_16.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_48.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_32.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_64.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_36.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_12.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_40.c
  • Modules/lvgl-module/source-fonts/material_symbols_launcher_30.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_24.c
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_20.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_20.c
  • Modules/lvgl-module/source-fonts/material_symbols_statusbar_30.c
  • Modules/lvgl-module/source-fonts/material_symbols_shared_48.c
  • Tactility/Source/Tactility.cpp

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.

Comment thread Libraries/lv_screenshot/Source/save_png.c

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e8cd1bfb-fa30-4440-b4bd-5f90aa06dad8
📥 Commits

Reviewing files that changed from the base of the PR and between c859328 and 4595af4.

📒 Files selected for processing (9)
  • Tactility/Include/Tactility/MainDispatcher.h
  • Tactility/Include/Tactility/Tactility.h
  • Tactility/Private/Tactility/app/boot/BootInit.h
  • Tactility/Source/Init.cpp
  • Tactility/Source/InitServices.cpp
  • Tactility/Source/MainDispatcher.cpp
  • Tactility/Source/TactilityEsp.cpp
  • Tactility/Source/app/boot/Boot.cpp
  • Tactility/Source/app/boot/BootInit.cpp
💤 Files with no reviewable changes (2)
  • Tactility/Source/InitServices.cpp
  • Tactility/Source/Init.cpp
🚧 Files skipped from review as they are similar to previous changes (1)
  • Tactility/Source/MainDispatcher.cpp

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 2 remain after this review.

Comment thread Tactility/Source/app/boot/BootInit.cpp
@KenVanHoeylandt
KenVanHoeylandt merged commit 7ea8c34 into main Oct 4, 2026
66 checks passed
@KenVanHoeylandt
KenVanHoeylandt deleted the develop branch October 4, 2026 16:09
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