Files
MeshCore-Solo/solo/wio-tracker-l2/platformio.ini
T
JakubandClaude Opus 5.5 0a07dc3deb perf(l2): screen sent by DMA while the next part is drawn
The panel takes each 24-line band by DMA while LVGL draws the next one
into the other buffer (two 15 KB buffers in internal RAM; LovyanGFX's
4092-byte DMA descriptors leave PSRAM unaligned for the S3's DMA, which
showed as shifted and smeared bands). LVGL draws in the panel's byte
order, and so do map tiles and the frozen screen under a popup, so
nothing is swapped on the way out. Full frames ~10-25% faster (page1
19.9 -> 14.7 ms, Home 21.4 -> 18.2 ms). Without the internal RAM the
screen is sent as before. The arduino2 env keeps the old way.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 20:56:13 +02:00

144 lines
6.5 KiB
INI

; Solo build for Seeed Wio Tracker L2 -- extends the board base defined in
; variants/wio-tracker-l2/platformio.ini. Solo configs live in their own
; top-level solo/ folder, separate from the shared upstream board variants.
;
; BRING-UP ONLY: this env runs the existing ui-new (OLED-era, joystick-driven)
; UI zoomed 2x (160x120 logical on the 320x240 panel) purely to compile-test
; and smoke-test the board layer -- display, radio, GPS, battery. It has no
; touch input yet; the only control is the BOOT button. The real interface for
; this board is the planned LVGL frontend over a shared UI Core.
;
; Deliberately NOT named *_solo_dual yet, so build-solo-firmwares.yml doesn't
; publish it as a release artifact.
[env:Wio_Tracker_L2_companion_solo_bringup]
extends = Wio_Tracker_L2
build_flags =
${Wio_Tracker_L2.build_flags}
-I examples/companion_radio/ui-new
-D DISPLAY_CLASS=WioTrackerL2Display
-D UI_ZOOM=2
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40
-D BLE_PIN_CODE=123456
-D DUAL_SERIAL=1
-D OFFLINE_QUEUE_SIZE=256
-D FIRMWARE_SOLO_BUILD=1
-D MESHCORE_VERSION='"1.17.1"'
-D OLED_MISC_FIXED_FONT=1
-D AUTO_OFF_MILLIS=60000
build_src_filter = ${Wio_Tracker_L2.build_src_filter}
+<helpers/esp32/*.cpp>
+<helpers/ui/LGFXDisplay.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<../examples/companion_radio/*.cpp>
+<../examples/companion_radio/ui-new/*.cpp>
lib_deps =
${Wio_Tracker_L2.lib_deps}
densaugeo/base64 @ ~1.4.0
; ui-lvgl: the real L2 interface -- LVGL 9 frontend over the shared UI Core
; (docs/solo/developer/ui-core.md, step 5), on Arduino-ESP32 3.3.12 / ESP-IDF 5.5
; (pioarduino). *_solo_lvgl envs are published by build-solo-firmwares.yml
; (merged image + the -ota.bin that Settings > Firmware update installs).
[env:Wio_Tracker_L2_companion_solo_lvgl]
extends = Wio_Tracker_L2
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.312-1/platform-espressif32.zip
; USB through TinyUSB, not the chip's USB-Serial/JTAG: the serial port stays
; (CDC, reset-to-flash by the 1200 bps touch) and the SD card can be lent to
; a computer as a USB drive (ui-lvgl/LvglPort.h). A firmware that crashes
; early may need BOOT held over reset to flash.
build_unflags = -DARDUINO_USB_MODE=1
; Bigger CPU caches and other ESP-IDF options (idf/sdkconfig): the framework
; libs are rebuilt for them. Build Wio_Tracker_L2_idf_libs first (see there).
custom_sdkconfig = file://solo/wio-tracker-l2/idf/sdkconfig
build_flags =
${Wio_Tracker_L2.build_flags}
-D ARDUINO_USB_MODE=0
-I examples/companion_radio/ui-lvgl
-D DISPLAY_CLASS=WioTrackerL2Display
-D UI_ZOOM=1
-D LV_CONF_INCLUDE_SIMPLE
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=40
-D BLE_PIN_CODE=123456
-D DUAL_SERIAL=1
-D OFFLINE_QUEUE_SIZE=256
-D FIRMWARE_SOLO_BUILD=1
-D MESHCORE_VERSION='"1.17.1"'
-D AUTO_OFF_MILLIS=60000
-D MESH_IN_PSRAM=1 ; frees ~120 KB internal RAM for WiFi/TLS map downloads
-D PIN_BUZZER=-1 ; no piezo pin: the speaker plays through the codec
-D BUZZER_I2S
-D OTA_ASSET_SUFFIX='"-Wio-Tracker-L2-ota.bin"' ; Settings > Firmware update
; Sized for the PSRAM (UiCore is heap-allocated, so these land there);
; the defaults in the headers are the nRF52 boards'.
-D TRAIL_CAPACITY=32768 ; 512 KB (+512 KB of map drawing buffers): ~160 km at 5 m
-D TRAIL_SIMPLIFY=0 ; every point kept: no straight-run simplification
-D TRAIL_FIXED_MIN_DELTA_M=5 ; a fixed GPS-jitter gate instead of the point spacing setting
-D WAYPOINT_CAPACITY=64
-D HIST_CH_MAX=256 ; all channels together, ~50 KB
-D HIST_DM_MAX=128 ; all DMs together, ~27 KB
-D NEARBY_MAX=64
-D HIST_ARCHIVE ; message history also on the SD card (ui-lvgl/HistoryStore.h)
-D GPS_SKYVIEW ; satellites / signal / DOPs for the GPS screen (helpers/sensors/GpsSky.h)
-D ESP32_LITTLEFS ; internal flash as LittleFS, not SPIFFS (helpers/esp32/InternalFS.h)
-D ENABLE_SCREENSHOT ; the screen over USB for the site's tools (RGB565, UITask::captureFrame)
-DUI_FLUSH_DMA ; the panel fed by DMA while LVGL draws, in its byte order (ui-lvgl/LvglPort.h)
build_src_filter = ${Wio_Tracker_L2.build_src_filter}
+<helpers/esp32/*.cpp>
+<helpers/ui/LGFXDisplay.cpp>
+<helpers/ui/MomentaryButton.cpp>
+<helpers/ui/buzzer.cpp>
+<../examples/companion_radio/*.cpp>
+<../examples/companion_radio/ui-lvgl/*.cpp>
+<../examples/companion_radio/ui-lvgl/fonts/*.c>
lib_deps =
${Wio_Tracker_L2.lib_deps}
densaugeo/base64 @ ~1.4.0
lvgl/lvgl @ 9.6.0 ; pinned: bump deliberately, re-test on hardware
bitbank2/PNGdec @ 1.1.6 ; map tiles: PNG straight to RGB565, a row at a time (ui-lvgl/TilePng.cpp)
SD_MMC ; map tiles on the microSD (framework libraries from here on)
FS
WiFi ; on-device map download, live tiles, OTA
HTTPClient
NetworkClientSecure ; 3.x name of WiFiClientSecure (the header is still there)
Preferences
Update ; Settings > Firmware update
LittleFS
; The same firmware on the old Arduino-ESP32 2.0.17 (ESP-IDF 4.4), kept for
; comparison while the 3.x one settles. Not published (the name doesn't end in
; _solo_lvgl) and can't update itself (no CA bundle for the TLS check).
[env:Wio_Tracker_L2_companion_solo_lvgl_arduino2]
extends = env:Wio_Tracker_L2_companion_solo_lvgl
platform = ${esp32_base.platform}
build_unflags = -DARDUINO_USB_MODE=1 -DUI_FLUSH_DMA ; DMA flush untried on ESP-IDF 4.4
lib_deps =
${Wio_Tracker_L2.lib_deps}
densaugeo/base64 @ ~1.4.0
lvgl/lvgl @ 9.6.0
bitbank2/PNGdec @ 1.1.6
SD_MMC
FS
WiFi
HTTPClient
WiFiClientSecure
Preferences
LittleFS
; Rebuilds the framework libs (ESP-IDF) with the custom_sdkconfig above; the
; firmware env above then links them. Run once before it, and again after a
; custom_sdkconfig change (pio run -e Wio_Tracker_L2_idf_libs). Needed because
; pioarduino's rebuild pass compiles the env's own sources without its include
; paths and libraries, which fails for ours; this env's only source is the
; stub sketch pioarduino puts in .dummy/. idf/ supplies the TinyUSB options.
[env:Wio_Tracker_L2_idf_libs]
platform = ${env:Wio_Tracker_L2_companion_solo_lvgl.platform}
board = seeed_wio_tracker_l2
framework = arduino
custom_sdkconfig = ${env:Wio_Tracker_L2_companion_solo_lvgl.custom_sdkconfig}
board_build.cmake_extra_args = -DEXTRA_COMPONENT_DIRS=${platformio.src_dir}/../.dummy;${platformio.packages_dir}/framework-arduinoespressif32;${platformio.src_dir}/../solo/wio-tracker-l2/idf
lib_deps =
lib_ldf_mode = off
build_src_filter = +<../.dummy/*>