Skip to content

Add Seeed Wio Tracker L2 (Standalone beta) with on-screen keyboard - #2

Open
oumike wants to merge 9 commits into
ratspeak:mainfrom
oumike:wio-tracker-l2
Open

oumike wants to merge 9 commits into
ratspeak:mainfrom
oumike:wio-tracker-l2

Conversation

@oumike

@oumike oumike commented Oct 6, 2026

Copy link
Copy Markdown

Adds Standalone (beta) support for the Seeed Wio Tracker L2 on the shared LVGL runtime.

Board

  • NV3031B quad-SPI panel through LovyanGFX 1.2.27, which is pinned only for wio_tracker_l2 because Panel_NV3031B first appears in that version. The other boards stay on 1.1.16.
  • LP5814 backlight, PCA9555 rail expander, GT911 touch, SDMMC card (1-bit), ADS1115 battery sense, GNSS power switched through the expander.
  • ES8311 notification audio. The T-Pager driver moved to src/core/audio/Es8311Notify.* so both boards share it.

Shared changes (guarded, other boards unaffected)

  • On-screen keyboard (LvSoftKeyboard, HAS_SOFT_KEYBOARD): the board has no keyboard, so screens report their editor through LvScreen::textInput() and the soft keyboard sends KeyEvents, panning the editor above itself. During onboarding, its Enter key replaces the DONE button.
  • SDStore: SD_USE_MMC selects SD_MMC instead of SPI SD.
  • TouchInput: TOUCH_PANEL_PORTRAIT_RAW for a portrait-native GT911; skips pinMode when TOUCH_INT is on an expander.
  • LvglApplication: wiring for touch without a trackball, and button-based factory-reset recovery when !HAS_KEYBOARD.
  • ES8311 init tolerates a NACK on the first noise-immunity write. The Wio codec NACKs it, and the write is repeated immediately anyway.

Tooling

  • licenses/: bundle regenerated with collect_licenses.py --refresh. It adds LovyanGFX 1.2.27 and wio_tracker_l2 to the board lists, and --check passes.
  • tools/merge_firmware.py: accepts both the esptool 4 (merge_bin, --flash_mode) and esptool 5 (merge-bin, --flash-mode) spellings. PlatformIO's bundled esptool is still 4.x.
  • scripts/build-upload-monitor.sh: build/flash/monitor helper. --just-build compiles every env and prints a summary.
  • release_boards.json / README: board added; the README marks it build-from-source.

Testing

  • scripts/build-upload-monitor.sh --just-build: all 7 environments build (tdeck, tpager, cardputer, m9, wio_tracker_l2, both cooperative envs).
  • release_catalog.py check, check_source_release.py, check_runtime_boundary.py, collect_licenses.py --check: all pass.
  • Running on Wio Tracker L2 hardware: onboarding name entry with the on-screen keyboard, touch, display.
  • Not re-verified on hardware: T-Pager notification audio after the ES8311 driver moved into shared code. Worth a quick check from someone with a Pager.

🤖 Generated with Claude Code

https://claude.ai/code/session_011sB2obpH6Xz4fyo3qkRL4V

oumike and others added 9 commits October 1, 2026 14:50
Seeed Wio Tracker L2 on the shared LVGL runtime: NV3031B quad-SPI panel
(LovyanGFX 1.2.27, scoped to this env), LP5814 backlight, PCA9555 rail
expander, GT911 touch, SDMMC card, ADS1115 battery sense, expander-gated
GNSS and the T-Pager's ES8311 driver, now shared from core/audio.

The board has no keyboard, so screens report their editor through
LvScreen::textInput() and LvSoftKeyboard supplies KeyEvents, panning the
editor above itself. Untested on hardware.

The license bundle needs a --refresh for LovyanGFX 1.2.27.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXtDYGpR38mVsodc4wJYen
The Wio Tracker L2 codec NACKs the first register write after power-up.
That write only raises I2C noise immunity and is repeated immediately, so
only the repeat must succeed. Log the register and error of any failed
codec access.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXtDYGpR38mVsodc4wJYen
Boards with an on-screen keyboard drop the DONE button; its Enter key
already submits. Tapping the field restores a hidden keyboard, since Enter
is now the only way to finish. Keyboard boards keep DONE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXtDYGpR38mVsodc4wJYen
No LVGL theme is active, so btnmatrix backgrounds defaulted to
transparent and the tab bar showed between the keys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXtDYGpR38mVsodc4wJYen
The Wio Tracker L2 environment pins LovyanGFX 1.2.27 for its NV3031B
panel, so collect_licenses.py --check failed until the bundle was
regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sB2obpH6Xz4fyo3qkRL4V
esptool 5 renamed merge_bin and its flags to dashes, but PlatformIO's
bundled esptool is still 4.x and only knows the underscore spelling.
Pick the spelling from the installed version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sB2obpH6Xz4fyo3qkRL4V
Builds, flashes and monitors one environment, or with --just-build
compiles every [env:] in platformio.ini and prints a pass/fail summary.
Includes a --wio-tracker-l2 flag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sB2obpH6Xz4fyo3qkRL4V
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011sB2obpH6Xz4fyo3qkRL4V
Resolve conflicts with upstream's storage startup, audio coordinator,
message tools/RRC and settings reorganization:

- Es8311Notify: keep the shared ES8311 driver and pick up the
  AudioCoordinator hooks and full-scale codec gain from AudioNotify.
- Startup: run storageStartup before factory-reset recovery; the Wio
  button mapping now takes the top-tap key so the storage screen gets E
  and reset recovery keeps R.
- LvMessageView: combine soft-keyboard composer handling with upstream
  selection dismissal and draft retention on exit.
- Settings: reapply HAS_KEYBOARD guards in the moved Display & Input
  category.
- Soft keyboard: request text input for the propagation node address
  entry and the RRC hub/room-key form so they are usable on Wio.
- Regenerate the license bundle.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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