Skip to content

MUI: Portduino curl maps - #11214

Merged
thebentern merged 12 commits into
developfrom
portduino-curl-maps
Jul 28, 2026
Merged

MUI: Portduino curl maps#11214
thebentern merged 12 commits into
developfrom
portduino-curl-maps

Conversation

@mverch67

@mverch67 mverch67 commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

requires meshtastic/device-ui#353

Note: if you want to persist the downloaded map tiles

mkdir -p ~/.portduino/default/maps/Google\ Maps
cat << EOF >~/.portduino/default/maps/Google\ Maps/.url
https://mt0.google.com/vt?lyrs=m&x={x}&s=&y={y}&z={z}
EOF

You can also use any other .url template file in any other map style directory for downloading/saving the other map style

🤝 Attestations

  • I have tested that my proposed changes behave as described.
  • I have tested that my proposed changes do not cause any obvious regressions on the following devices:
    • Heltec (Lora32) V3
    • LilyGo T-Deck
    • LilyGo T-Beam
    • RAK WisBlock 4631
    • Seeed Studio T-1000E tracker card
    • Other (please specify below)
      • native
      • native-fb
      • native-tft
      • native-tft-debug

Summary by CodeRabbit

Summary

  • Bug Fixes

    • Improved native builds by linking with curl and ensuring native debug builds match the expected screen/Display behavior.
    • Strengthened native framebuffer/TFT builds by aligning SDL2 compile and link flags with the required curl integration.
  • Chores

    • Updated Windows build setup and CI/container environments to install the correct curl packages for both build-time and runtime.
    • Refreshed the bundled device UI dependency to a newer archived revision.

@mverch67 mverch67 added the enhancement New feature or request label Jul 25, 2026
@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

⚡ Try this PR in the Web Flasher

Flash this PR in the Web Flasher

firmware commit boards expires

Warning

This is an automated, unreviewed CI test build. Back up your device configuration
before flashing, and only flash devices you are able to recover.

Supported boards built by this PR (31)
Device Board Platform
Crowpanel Adv 3.5 TFT elecrow-adv-35-tft esp32-s3
Heltec HT62 heltec-ht62-esp32c3-sx1262 esp32-c3
Heltec Mesh Node 096 heltec-mesh-node-t096 nrf52840
Heltec Mesh Node T1 heltec-mesh-node-t1 nrf52840
Heltec Mesh Node T114 heltec-mesh-node-t114 nrf52840
Heltec V3 heltec-v3 esp32-s3
Heltec V4 heltec-v4 esp32-s3
Meshnology W10 meshnology_w10 esp32-s3
Meshnology W12 meshnology_w12 esp32-s3
Raspberry Pi Pico pico rp2040
Raspberry Pi Pico W picow rp2040
RAK WisMesh Pocket V3 rak_wismesh_pocket nrf52840
RAK WisMesh Pod rak_wismesh_pod nrf52840
RAK WisMesh Repeater Mini V2 rak_wismesh_repeater_mini nrf52840
RAK WisMesh Tag rak_wismeshtag nrf52840
RAK WisBlock 11200 rak11200 esp32
RAK WisBlock 11310 rak11310 rp2040
RAK3312 rak3312 esp32-s3
RAK WisBlock 4631 rak4631 nrf52840
Seeed SenseCAP Mesh-Tracker-X1 seeed_mesh_tracker_X1 nrf52840
Seeed Wio Tracker L1 seeed_wio_tracker_L1 nrf52840
Seeed Xiao NRF52840 Kit seeed_xiao_nrf52840_kit nrf52840
Seeed Xiao ESP32-S3 seeed-xiao-s3 esp32-s3
Station G2 station-g2 esp32-s3
Station G3 station-g3 esp32-s3
LILYGO T-Deck t-deck-tft esp32-s3
LILYGO T-Echo t-echo nrf52840
LILYGO T-Echo Plus t-echo-plus nrf52840
LILYGO T-Impulse Plus t-impulse-plus nrf52840
LilyGo T3-C6 tlora-c6 esp32-c6
Seeed SenseCAP T1000-E tracker-t1000-e nrf52840

Build artifacts expire on 2026-08-27. Updated for 1458d27.

@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Updates the archived device UI dependency, native Portduino build flags, and Linux, Windows, Debian, and Alpine build/runtime dependencies to support curl-enabled native builds.

Changes

Native build configuration

Layer / File(s) Summary
PlatformIO dependency and native environment settings
platformio.ini, variants/native/portduino/platformio.ini
The device UI revision is updated; native TFT and framebuffer environments link curl and include SDL2 compiler flags, while the debug TFT environment also enables HAS_SCREEN.
CI dependency installation
.github/actions/setup-native/action.yml, .github/workflows/build_windows_bin.yml
Linux native setup installs libcurl4-gnutls-dev, and the Windows MSYS2 setup installs the UCRT64 curl package.
Container dependency installation
Dockerfile, alpine.Dockerfile
Debian and Alpine builder images install curl development packages, and runtime images install curl shared libraries.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: dependencies

Suggested reviewers: vidplace7, thebentern, caveman99

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and matches the main change: adding Portduino curl/map support.
Description check ✅ Passed The PR description includes the dependency note, usage details, and attestations, matching the template sufficiently.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch portduino-curl-maps

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.

@mverch67
mverch67 requested a review from vidplace7 July 25, 2026 11:01
Comment thread Dockerfile Outdated
@thebentern
thebentern added this pull request to the merge queue Jul 28, 2026
Merged via the queue into develop with commit 5f51bb1 Jul 28, 2026
100 checks passed
thebentern added a commit that referenced this pull request Jul 28, 2026
The rak_wismesh_tap_v2-tft link failed on CI with "sh: Argument list too
long": the device-ui bump in #11214 grew the MUI object list enough that
the linker command line crossed the kernel exec arg limit (this env's long
name lengthens every object path, so it tipped first).

extra_scripts/ld_response_file.py already solves this for esp32p4; promote
it to esp32_common so every ESP32 target links through a response file,
and drop the now-inherited entry from esp32p4.ini.

Verified by building rak_wismesh_tap_v2-tft at the failing commit plus this
fix: links clean (macOS's exec arg limit is smaller than the Linux one that
tripped CI, so an unwrapped link could not have passed).
thebentern added a commit that referenced this pull request Jul 29, 2026
The DEF CON 34 boot logo stopped rendering on T-Deck MUI: the boot screen
falls back to the built-in Meshtastic logo with no error on screen.

The branding pipeline is fine - the littlefs images published for
2.8.0.b00d76f (working) and 2.8.0.8adc7c3 (broken) differ by 28 bytes of
littlefs metadata, and branding/logo_320x240.png is byte-identical in both.
The regression is firmware side.

5f51bb1 (MUI: Portduino curl maps, #11214) bumped device-ui ef573c3 ->
2f5a7dd9. That range contains device-ui a5db5ec ("replace LodePNG/STB decoder
by PNGdec"), which sets LV_USE_LODEPNG=0 and never registers the PNGdec
replacement as an lv_image_decoder_t - it is only called explicitly by the
four map-tile services on PNG bytes already in RAM. LVGL is left with TJPGD
and bin_decoder, so it has no decoder for a PNG *file* source.

The boot logo is loaded exactly that way, via
FileLoader::loadBootImage() -> lv_image_set_src(obj, "L:/boot/logo.png").
In LVGL 9.3.0 lv_image_set_src calls lv_image_decoder_get_info() first and
returns early on failure, before storing the new src, so the object keeps the
built-in logo it was initialised with in screens.c. The guard in
TFTView_320x240::init() cannot catch it either: loadBootImage returns
lv_image_get_src() != nullptr, which is true whether or not the decode
succeeded.

Stock builds ship no data/boot/logo.png, so the same path has always fallen
through to the built-in logo - which is why only event/whitelabel MUI builds
regress and nightly testing did not catch it.

Holding the pin here restores the lodepng file decoder. Nothing ESP32 side is
lost: the old pin still carries the lodepng tile path (ConvertPNG.c), so maps
behave as in the b00d76f build. Only portduino/native curl map downloads are
given up, and event branches do not build meshtasticd (dafa583).

Revisit once device-ui registers a PNG file decoder upstream.
HarukiToreda pushed a commit to h3lix1/mesh-firmware-sunl that referenced this pull request Jul 31, 2026
…c#11303)

Followup to meshtastic#11214
Adds libcurl as a dependency in Debian and Fedora packages.
@caveman99
caveman99 deleted the portduino-curl-maps branch August 26, 2026 19:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants