github cvhviz/CAIRN cvhbuild-v67
Wio L1 Pro build 67 (archive)

pre-release28 days ago

Archived from the old WioL1Pro-CVHBuild repository (first published 2026-08-10). These are the Wio Tracker L1 Pro builds from before Cairn; current builds are in the latest Cairn release.

CVHBuild 67 — now on MeshCore v1.17.0, plus a room server build

A Seeed Wio Tracker L1 Pro fork of MeshCore
(nRF52840, SH1106 128×64 OLED, 5-way joystick, buzzer, L76K GNSS).

Rebased from upstream v1.16.0 onto v1.17.0 (320 upstream commits), and adds a room server
build that uses the same paged UI as the companion instead of a single static screen.

This fork versions by build number — CVHBuild N, shown on the splash screen — so a device can be
matched to a tag from its own display.


Downloads

File Target
MeshCore-WioL1Pro-CVHBuild67.uf2 Companion, SH1106 OLED — the main build
MeshCore-WioL1Eink-CVHBuild67.uf2 Companion, Waveshare 2.13" B/W e-ink
MeshCore-WioL1RoomServer-CVHBuild67.uf2 Room server, SH1106 OLED

Flashing: double-tap reset to expose the TRACKER L1 volume and copy the .uf2 onto it. The
"could not copy extended attributes" error is normal, and the volume ejecting itself means the
flash succeeded.

The tri-colour e-ink variant is no longer produced. Every refresh on a three-colour panel is a
blocking ~15 s full flash, which makes live pages snapshots rather than displays. The environment
and its EINK_3C paths remain in the tree and still build.


New: room server build

WioTrackerL1_room_server previously drew one static screen — node name, frequency, bandwidth —
with no pages and no joystick handling, even though the hardware inputs were already wired up for
any build with a display. It now has five pages, chosen for what a server that sits in one place
actually has rather than by copying the companion:

Page Contents
Clock clock face, date, client count; sub-view for battery, uptime and post counters
Posts the 32 stored posts, scrollable, Enter opens the full text word-wrapped
Clients the ACL — key, admin flag, hops, unsynced posts, last seen; Enter opens a detail view
Radio freq/BW/SF/CR grid, live RSSI spectrum, traffic monitor, fullscreen spectrum
Settings advert, GPS, set clock, TX power, brightness, screen timeout, clock style

Left/Right changes page, Up/Down scrolls or switches sub-view, Enter acts, hold Back locks.

Setting the clock. A room server has no companion app to push the time down, so previously the
only route was time <epoch> over the serial or admin CLI. There is now a GPS on/off setting —
the NMEA provider is constructed with the RTC, so a fix sets the clock — and a manual editor with
year/month/day/hour/minute cells for when there is no fix. Time is entered as local and stored as
UTC.

Identities are public-key prefixes (e.g. A3F2). The room server stores no names: neither
ClientInfo nor PostInfo has one, so that is the whole of what the device knows. The client
detail view shows eight bytes when you need to identify a specific node.


Upstream v1.17.0

Everything in upstream's release, plus these fork-specific consequences:

  • Preferences moved to named-key JSON. Upstream replaced the byte-offset preferences struct
    with a serialiser. This fork's eight UI settings moved into their own ui group, and the legacy
    reader still parses them at their former offsets — so a device upgrading from CVHBuild 56
    keeps its settings
    , and the first save migrates the file.
  • Colours come from a semantic palette rather than an abstract enum the driver reinterpreted.
    No visible change on the OLED; on e-ink it removes the light/dark inversion hack, because the
    palette carries the inversion instead.
  • Fixed: the contact list dropped its last eight entries. Upstream reserved eight slots at the
    head of the contact array and made getNumContacts() exclude them, while getContactByIdx()
    still indexes the raw array. Three loops here paired the two, so they walked eight reserved slots
    at the start and stopped eight short of the end — silently hiding the most recent contacts from
    the compose picker, the recipient count and room re-login.

Security

  • The destination bound on Utils::decrypt() now also covers upstream's new CC310 hardware AES
    path. Both write whole 16-byte blocks, so both can overrun a short destination; the check sits
    above the branch rather than inside one arm of it. Upstream still carries no bound of its own.
  • Upstream independently fixed the BLE receive-queue race, which arrives with this merge.

Upstream defects found

Both break the build only on macOS/libc++, which is why upstream's Linux CI is green:

  • ConfigSerializer.cpp calls atoi/atol/atof without including <stdlib.h>.
  • test/mocks/Utils.h declares MACThenDecrypt() with the old unbounded signature.

E-ink companion

  • The clock face is drawn, not typed. 24pt was the largest font available and pixel-doubling a
    1-bit face stair-steps every edge, so the digits are now seven-segment shapes built from
    rectangles: crisp at any size, and no flash cost. 46 panel rows tall, against 25 before.
  • The clock page became a resting screen. A reflective panel is on permanently and refreshes
    about once a minute, so it now carries what you would otherwise change pages to read: date and
    uptime with battery percentage and voltage, then unread and node counts with GPS state and die
    temperature. Each row measures itself and drops its least important token rather than letting
    two strings overlap.
  • Fixed: auto lock never engaged. It was implemented inside the screen-blanking path, and
    e-paper never blanks — it holds its image with no power — so the whole block was compiled out
    while the setting still read On. Locking is about a device in a pocket, not about the panel.
  • The screen timeout and keep-awake-on-USB settings now read n/a where nothing blanks, instead
    of accepting values that nothing acted on.

Memory

Build Flash RAM
Companion (OLED) 467 KB / 692 KB (67.5%) 150 KB / 230 KB (65.3%)
Companion (e-ink) 483 KB / 692 KB (69.9%) 154 KB / 230 KB (67.1%)
Room server 416 KB / 792 KB (52.5%) 37 KB / 230 KB (16.1%)

Testing

The OLED companion and the B/W e-ink companion are running on hardware. The room server has been
run on hardware and its Clock, Radio and Settings pages exercised; its Posts and Clients pages
cannot be fully validated until real clients log in and post
, so those layouts are verified
arithmetically rather than visually. The tri-colour e-ink variant has never been run.

Upgrading from CVHBuild 56 migrates the preferences file on first save. The old file is left in
place, so reflashing 56 gets you back to a device that reads the original.

Full changelog: see CHANGELOG.md, builds 57–67.

Don't miss a new CAIRN release

NewReleases is sending notifications on new releases.