MeshCore Solo · Releases
from GitHub · updated 2026-07-2920 releases
v1.24 # 6 days ago · 2026-07-29 20:58 UTC
MeshCore Solo Companion Firmware v1.24
What's new
- Auto-Reply Bot is renamed to Remote Bot. It's grown beyond auto-replies into remote device control (Actions, below), so the Tools screen entry and docs now say "Remote Bot" — same screen, same settings, nothing to reconfigure.
- Remote Bot gains Actions:
!buzz,!gps,!advert. A new Actions toggle (per target — Direct/Channel/Room, nested under each target's existing Commands toggle) enables three commands that change the device's own behaviour instead of just reporting on it:!buzz [seconds]sounds the buzzer as a find-me signal (default 5s, capped at 30s, sounds even if the buzzer is muted),!gps on/!gps offtoggles GPS, and!advertsends an immediate advert (0 hop). Off by default; combines with the existing query commands in one message the same way (!batt !gps on→4.10V | GPS: on). !gps fix [seconds]— single-shot GPS location, no need to leave GPS running. Turns GPS on (if it wasn't already), waits for a stabilised fix (HDOP ≤ 2.0 — falls back to ≥8 satellites on GPS hardware that doesn't report HDOP — then averages for 10s), sends the position, and restores GPS to whatever state it was in before — up to a 90s timeout by default (override with an optional argument, clamped to 15-300s, for a poor sky view where 90s isn't always enough), after which it reports a partial fix (if it got at least some samples) or failure. Replies in two parts: an immediate "acquiring fix..." ack, then the actual position as a follow-up message once ready. Only one fix request can be in flight at a time (a second one gets "fix already pending"); same Actions toggle as!buzz/!gps/!advert.- Bot Trigger fields accept multiple phrases. Pack several trigger words into one Trigger field, comma-separated (
hi,hello there,yo) — matching any one of them fires the reply, same as before for a single phrase. - Remote Bot Actions gain
!gpio1..!gpio4(Wio Tracker L1 only — 4 otherwise-unused pins). Each pin is independently set to Off/Input/Output (GPIO1/GPIO2 also offer Analog) from a new Tools › GPIO screen;!gpio1 on/!gpio1 offdrives an Output pin remotely, a bare!gpio1reports the current mode and reading (including a millivolt value in Analog mode). Gated by the same per-target Actions toggle as!buzz/!gps/!advert. - GAT562 30S solo builds now use the same OLED font as the Wio Tracker L1. The misc-fixed 6x9 font (full Latin, Greek and Cyrillic) had only ever reached the SH1106 and e-ink drivers, so on this board every keyboard alphabet beyond ASCII, and every accented contact name, was still being transliterated (
Łódź→Lodz) or drawn as a filled block. Solo builds only — the font costs ~14 KB of flash and the repeater/companion builds have no keyboard to type those alphabets on; they keep the built-in font and are byte-for-byte unchanged.
Work in progress territory
- Optional CardKB support (Wio Tracker L1, Grove I2C) — full keyboard-only navigation. Plug an M5Stack CardKB into the Grove connector and it's auto-detected at boot — no setting to flip. Typing goes straight into the message/name field instead of navigating the on-screen keyboard grid, always as plain Latin text regardless of the Settings › Keyboard language/type — arrows and Esc work as expected everywhere else too (including inside the placeholder and accent popups). Enter acts like the physical centre button (advances the on-screen grid selection) rather than submitting, so Fn+Enter sends the message/confirms the field from anywhere, and Fn+
<letter>opens that letter's accent popup directly (no arrow-hunting needed — handy for Polish/Czech/etc. diacritics — and works no matter what language/keyboard type is configured, since CardKB always types Latin either way). Tab is the Hold-Enter equivalent everywhere, including message reply/navigate and the Bot/Admin/Repeater menus — same single shortcut whether or …
v1.23.1 # 12 days ago · 2026-07-24 19:41 UTC
MeshCore Solo Companion Firmware v1.23.1
Fixes
- Tools › Admin login could get stuck on "Logging in..." forever if the remote node never sent back a reply — most commonly after its admin/room password was changed, since the on-device UI auto-retries the old saved password with no timeout to fall back on. It now gives up after the same estimated-timeout window the rest of Admin's commands use, forgets the stale saved password, and returns you to the picker to try again with the new one.
- Changing a remote's admin password from Tools › Admin › System didn't update this device's own saved copy — the very next login attempt to that node retried the password you'd just replaced, hitting the "stuck on Logging in…" case above. The confirmation the remote echoes back is now saved as the new on-device password to match.
- A slow-to-arrive Admin login reply, after you'd already given up on it (Cancel or the new timeout above), could get delivered to whatever screen you'd since moved to and silently overwrite your saved password for that node with unrelated data. Giving up on a login now also stops tracking it mesh-side, so a late reply is simply dropped instead of misrouted.
- Opening Admin on a second, password-less node while an earlier room/repeater login elsewhere was still in flight could wrongly show you as logged in as admin on the new node — a reply meant for the earlier login was accepted as this node's own since both merely looked like "a login is pending," without checking it actually named this node. Now checked.
v1.23 # 19 days ago · 2026-07-17 20:17 UTC
MeshCore Solo Companion Firmware v1.23
What's new
- Nodes is now the single node hub. "Nearby Nodes" is renamed Nodes and gains on-device contact management — no phone app needed: Hold Enter on a row opens Add contact (for a scanned-but-unknown node), Favourite/Unfavourite (pins to the first free Favourites Dial slot, shown as a star in the list), and Delete contact (confirm first, defaults to Cancel). The filter strip (LEFT/RIGHT) is now a visible, wraparound tab carousel instead of a hidden mode. The old read-only Recent adverts home page is retired — its passively-heard nodes now simply show up in the Nodes list (All filter) — so there's one list instead of two.
- On-device channel management. Messages › Channels gets a "+ Add channel" row and per-channel Edit/Delete — no phone app required. Adding a channel now starts with a type picker, matching the phone app: Public (re-adds the well-known default channel, no typing needed), Hashtag (type just a topic name, e.g.
test— the channel name and secret are both derived from it, same convention as the app's#topicchannels), or Private (manual Name + Secret, typing either a passphrase hashed to the channel secret, or the exact 32-hex-character key from a channel QR code). - Tools › Admin — administer a remote repeater/room from the device. Log into a node you have admin rights on (same self-healing saved-password handshake as room logins) and browse its settings in category tabs — System (name, owner info), Radio (Frequency/Bandwidth/Spreading factor/Coding rate/TX power), Routing (Repeat/Advert interval/Flood advert interval/Max hops), Actions (reboot, send advert, sync clock, …) — plus a free-text Custom command… escape hatch (with {}-key command-name completion) for anything not covered. Radio and Routing fields use a type-appropriate editor instead of raw text — a digit-cursor for Frequency (the same widget Settings' own Radio screen uses locally), discrete-set stepping for Bandwidth/Spreading factor/Coding rate, plain number steppers for the rest, and an ON/OFF toggle for Repeat — adjusting a value costs no mesh traffic until you actually confirm it with Enter (Cancel sends nothing). Reachable either from Tools › Admin (opens the same Nodes list to pick a target) or directly via a repeater/room's own Hold Enter › Admin action.
- Auto-Reply Bot gains a third target: room servers, alongside DM and Channel, with its own trigger/reply/commands — the screen is redesigned as a circular tab carousel (Direct/Channel/Room/Other, LEFT/RIGHT to switch, UP/DOWN within a tab) instead of one long list. Each target's Enable and Commands toggle is now fully independent (they used to secretly share the DM tab's setting for Channel/Room too). New
{name}/{hops}reply placeholders, a DM allow-list (all chat contacts or favourites only), and a dedicated stepper for Quiet Hours. - Keyboard: accent popup, selectable main script, better editing. Holding Enter on a Latin letter with accented variants (
a c d e i l n o r s t u y z) now opens a one-row popup of that letter's accents — e.g. holdingaoffersá à â ã ä å ą— covering every European Latin-diacritic letter (Polish, Czech, Slovak, German, French, Spanish, Portuguese, Nordic, …) from one popup instead of a separate page per language. Settings › Keyboard splits Alphabet into Main and Additional: Main picks which script (Latin/Cyrillic/Greek) the keyboard opens on by default, Additional picks the second one reached via the #@/abc cycle key — so a Cyrillic or Greek typist can make their own script the default instead of always landing on Latin first. Shift is now one-shot by default (capitalises just the next letter; Hold Enter on Shift toggles the old sticky caps-lock back on), Hold Enter on Backspace clears the whole field, and UP from th …
v1.22 # 1 month ago · 2026-07-06 19:29 UTC
MeshCore Solo Companion Firmware v1.22
What's new
- T9 on-screen keyboard — a new keyboard option under Settings › Keyboard. Alongside the existing alphabetical ABC grid, pick T9 for phone-keypad-style entry: each key is labelled with its digit and a letter group (e.g.
2abc), and repeated Enter presses cycle through the letters and then the digit. (The alphabetical grid was previously mislabelled QWERTY in Settings — it's always been a-b-c order and is now correctly named ABC.) - Auto-save GPS trail on shutdown — a new Tools › Trail › Settings › Auto-save toggle (default off). With it on, the live trail is written to flash automatically at power-off, so a low-battery auto-shutdown no longer loses the whole route. It only writes when the trail actually has points, so an empty trail can't overwrite a previously saved one. Saves to the same
/trailfile as the manual Trail › Save. - Clock Tools from the Tools menu — the Alarm / Timer / Stopwatch screen (reachable by pressing Enter on the Clock home page) now also has its own entry under Tools › System, so it's discoverable without first finding it on the clock face.
- Map & Shutdown pages are reorderable — the Map home page shipped with no entry under Settings › Home Pages, so it was always shown and couldn't be moved. It's now a first-class page there: toggle its visibility and reorder it like any other (visible by default; existing users keep it on). Reordering also now covers the Shutdown page, which was previously pinned to the end of the carousel.
Fixes
- Battery reads high and jittery on Wio Tracker L1 — a power-saving change had switched the battery-voltage divider on for only ~10 ms before each reading, too short for the high-impedance divider node to settle, so a full LiPo could report 4.6–5.0 V. The divider is now held on continuously again (a negligible ~2 µA on the 2×1 MΩ divider), giving stable, accurate readings. The CPU-sleep and LED energy savings from the same optimisation pass are untouched.
- Home page visibility no longer resets on update — the prefs schema-migration that turned the Favourites page on ran on every firmware update (any schema-version bump), so a page you'd deliberately hidden kept coming back after each release. It's now gated to the single upgrade that introduced Favourites, so your hidden pages stay hidden.
- a locked device didn't show the alarm — it woke the display, then immediately re-blanked, so a ringing alarm played to a dark screen. The lock screen now draws the alert and holds the wake for the whole ring.
- background-mode status icons vanished when Bluetooth was off — the auto-advert / live-share / trail / repeater indicators were nested inside the "BT on" check and are now always shown while their mode is active.
- a long alert message ("GPS on, tracking started") spilled past its box on a narrow screen — it now wraps to up to three lines and the box grows to fit.
- a contact name pushed from the phone app wasn't guaranteed to be NUL-terminated.
- the timer / alarm could mis-fire for a deadline landing past the ~49-day
millis()rollover. - toggling a channel's favourite from its context menu could retarget the menu onto a different channel once the list re-sorted.
- A repeater could appear twice on the discovery scan and in the app — a discover response often arrives more than once (the direct copy plus a re-flooded copy carry different packet hashes, so the mesh's duplicate filter passes both), and each copy was listed. Duplicate copies of the same response are now dropped for a few seconds after the first.
- Favourites self-heal — a pinned favourite whose contact no longer exists (e.g. after clearing contacts) now reverts to an empty + tile instead of showing (gone), and the stale pin is cleared from prefs.
- **Radio preset names no longer seed
{loc}/`{time} …
- T9 on-screen keyboard — a new keyboard option under Settings › Keyboard. Alongside the existing alphabetical ABC grid, pick T9 for phone-keypad-style entry: each key is labelled with its digit and a letter group (e.g.
v1.21 # 1 month ago · 2026-06-30 20:48 UTC
MeshCore Solo Companion Firmware v1.21
What's new
- Live Location Sharing — broadcast your position over the mesh as
[LOC]messages, movement-gated, to a channel or a single contact. Others who share theirs show up as pins on the map with live distance/bearing in Nearby Nodes, and a status-bar indicator appears while your own share is active.[LOC]is parsed in DMs, channel messages and room messages; DM shares name the sender. - Locator (geofence) — arm a geofence around a target — a saved waypoint or a person (their live
[LOC]or last-known position) — and get an alert when you arrive/leave or they get near/far, with an optional homing beeper that ticks faster the closer you get (and overrides a muted buzzer). Arm it from Tools › Locator or straight from Nearby Nodes / Waypoints; pick the target from a list (favourites first, then any contact), and clear it via a "None" entry. The active target is drawn as a flag on the map. - One active target across Locator / Navigate / Map — a single "Set as target" action everywhere, backed by a shared resolver that prefers a live
[LOC]share over the last-advertised GPS, so the three features always agree on where you're headed. - Follow live contacts — Navigate to a contact who is live-sharing and the view follows them as they move, adding an ETA line. Quick-share your own position straight from the Map.
- Map & status-bar upgrades — the home mini-map gains a north marker and a scale tick; the status line shows the tracked-node count and, with a fix, an arrow + distance to the nearest tracked contact (e.g.
Track:3 →120m); a GPS fix icon sits in the top status bar (boxed once a fix is valid, plain while searching), shown only on GPS boards while GPS is enabled in Settings. - Trail auto-pause — recording freezes on stops (banking elapsed time and breaking the map line across the idle gap) and resumes on movement without ending the session; the home-screen blink keeps going while paused.
- Collapsible Tools — tools are grouped into fold-in-place Location / Comms / System sections, the same model as Settings (Tools always opens folded to the section list), and the home carousel now uses page-indicator icons instead of dots.
- Clock tools — alarm, timer, stopwatch — press Enter on the Clock page for three time utilities: a one-shot wake alarm (set hour/minute with the digit editor; a bell marks it on the clock face and the status bar while armed), a countdown timer (full HH:MM:SS, single-digit cursor), and a stopwatch. The alarm and timer ring with a melody — overriding mute — and are silenced by any key. They keep running with the display off or locked, and the alarm is scheduled as an absolute instant so it survives the clock re-syncs the mesh / app / GPS / CLI can trigger at any time (it can't wake the device from a full Shutdown, where the CPU is off).
- Waypoint coordinate editor — add a waypoint by scroll-editing its latitude/longitude digit by digit.
- On-device room login with saved passwords — log in to a room server straight from the device (no phone app): pick the room and the password prompt appears automatically (a blank password works for open rooms), or re-login any time via the room's context-menu "Login…". The password is remembered across reboots, so a room you've used before logs back in without retyping; a failed login (e.g. the server's password changed) forgets the stale password so the next attempt prompts again. Room passwords entered via the phone app are saved on the device too, so it can post to that room standalone after a reboot. Saved passwords are written with the same atomic, crash-safe persistence as contacts and channels.
Fixes
- Critical — low-heap hang and contact loss on RAM-tight builds. With
MAX_CONTACTS=350an …
- Live Location Sharing — broadcast your position over the mesh as
v1.21-rc2 # Pre-release 1 month ago · 2026-06-26 22:52 UTC
MeshCore Solo Companion Firmware v1.21 Release candidate 2
What's new
- Live Location Sharing — broadcast your position over the mesh as
[LOC]messages, movement-gated, to a channel or a single contact. Others who share theirs show up as pins on the map with live distance/bearing in Nearby Nodes, and a status-bar indicator appears while your own share is active.[LOC]is parsed in DMs, channel messages and room messages; DM shares name the sender. - Locator (geofence) — arm a geofence around a target — a saved waypoint or a person (their live
[LOC]or last-known position) — and get an alert when you arrive/leave or they get near/far, with an optional homing beeper that ticks faster the closer you get (and overrides a muted buzzer). Arm it from Tools › Locator or straight from Nearby Nodes / Waypoints; pick the target from a list (favourites first, then any contact), and clear it via a "None" entry. The active target is drawn as a flag on the map. - One active target across Locator / Navigate / Map — a single "Set as target" action everywhere, backed by a shared resolver that prefers a live
[LOC]share over the last-advertised GPS, so the three features always agree on where you're headed. - Follow live contacts — Navigate to a contact who is live-sharing and the view follows them as they move, adding an ETA line. Quick-share your own position straight from the Map.
- Map & status-bar upgrades — the home mini-map gains a north marker and a scale tick; the status line shows the tracked-node count and, with a fix, an arrow + distance to the nearest tracked contact (e.g.
Track:3 →120m); a GPS fix icon sits in the top status bar (boxed once a fix is valid, plain while searching), shown only on GPS boards while GPS is enabled in Settings. - Trail auto-pause — recording freezes on stops (banking elapsed time and breaking the map line across the idle gap) and resumes on movement without ending the session; the home-screen blink keeps going while paused.
- Collapsible Tools — tools are grouped into fold-in-place Location / Comms / System sections, the same model as Settings (Tools always opens folded to the section list), and the home carousel now uses page-indicator icons instead of dots.
- Waypoint coordinate editor — add a waypoint by scroll-editing its latitude/longitude digit by digit.
- On-device room login with saved passwords — log in to a room server straight from the device (no phone app): pick the room and the password prompt appears automatically (a blank password works for open rooms), or re-login any time via the room's context-menu "Login…". The password is remembered across reboots, so a room you've used before logs back in without retyping; a failed login (e.g. the server's password changed) forgets the stale password so the next attempt prompts again. Saved passwords are written with the same atomic, crash-safe persistence as contacts and channels.
Fixes
- Critical — low-heap hang and contact loss on RAM-tight builds. With
MAX_CONTACTS=350andOFFLINE_QUEUE_SIZE=256the device ran with very little free heap; an allocation in the input/menu path could then fail and hang the UI (notably when entering Diagnostics), and a crash or reset mid-save could wipe all contacts. Fixed by two independent changes:- Right-sized message-history rings — the on-device scrollback rings were halved (96→48 channel, 64→32 DM), recovering ~14 KB of free heap (measured 3 → 17 KB). History is RAM-only, so the only cost is shorter on-device scrollback.
- Atomic persistence — contacts, channels and prefs are now written to a temp file and atomically renamed into place; an interrupted save (crash, reset, full flash) leaves the previous good file intact instead of truncating it.
- USB host stall — `Serial.write …
- Live Location Sharing — broadcast your position over the mesh as
v1.21-rc1 # Pre-release 1 month ago · 2026-06-25 17:17 UTC
MeshCore Solo Companion Firmware v1.21 Release candidate 1
What's new
- Live Location Sharing — broadcast your position over the mesh as
[LOC]messages, movement-gated, to a channel or a single contact. Others who share theirs show up as pins on the map with live distance/bearing in Nearby Nodes, and a status-bar indicator appears while your own share is active.[LOC]is parsed in DMs, channel messages and room messages; DM shares name the sender. - Locator (geofence) — arm a geofence around a target — a saved waypoint or a person (their live
[LOC]or last-known position) — and get an alert when you arrive/leave or they get near/far, with an optional homing beeper that ticks faster the closer you get (and overrides a muted buzzer). Arm it from Tools › Locator or straight from Nearby Nodes / Waypoints; pick the target from a list (favourites first, then any contact), and clear it via a "None" entry. The active target is drawn as a flag on the map. - One active target across Locator / Navigate / Map — a single "Set as target" action everywhere, backed by a shared resolver that prefers a live
[LOC]share over the last-advertised GPS, so the three features always agree on where you're headed. - Follow live contacts — Navigate to a contact who is live-sharing and the view follows them as they move, adding an ETA line. Quick-share your own position straight from the Map.
- Map & status-bar upgrades — the home mini-map gains a north marker and a scale tick; the status line shows the tracked-node count and, with a fix, an arrow + distance to the nearest tracked contact (e.g.
Track:3 →120m); a GPS fix icon sits in the top status bar (boxed once a fix is valid, plain while searching), shown only on GPS boards while GPS is enabled in Settings. - Trail auto-pause — recording freezes on stops (banking elapsed time and breaking the map line across the idle gap) and resumes on movement without ending the session; the home-screen blink keeps going while paused.
- Collapsible Tools — tools are grouped into fold-in-place Location / Comms / System sections, the same model as Settings (Tools always opens folded to the section list), and the home carousel now uses page-indicator icons instead of dots.
- Waypoint coordinate editor — add a waypoint by scroll-editing its latitude/longitude digit by digit.
Fixes
- Critical — low-heap hang and contact loss on RAM-tight builds. With
MAX_CONTACTS=350andOFFLINE_QUEUE_SIZE=256the device ran with very little free heap; an allocation in the input/menu path could then fail and hang the UI (notably when entering Diagnostics), and a crash or reset mid-save could wipe all contacts. Fixed by two independent changes:- Right-sized message-history rings — the on-device scrollback rings were halved (96→48 channel, 64→32 DM), recovering ~14 KB of free heap (measured 3 → 17 KB). History is RAM-only, so the only cost is shorter on-device scrollback.
- Atomic persistence — contacts, channels and prefs are now written to a temp file and atomically renamed into place; an interrupted save (crash, reset, full flash) leaves the previous good file intact instead of truncating it.
- USB host stall —
Serial.write()is bounded so a stalled USB host can no longer hang the device indefinitely.
Under the hood
- Streaming trail simplification — GPS points are simplified as they're recorded via a fixed-corridor (Reumann–Witkam) pass: straight runs collapse to their two endpoints while curves stay bounded to within the Min dist tolerance of the real track, so the 512-point buffer covers a far longer route than a flat point budget would suggest.
- A UITask-decoupled active-target resolver (
resolvePersonPos/activeTargetPos) replaces the duplicated target-resolution logic that lived sepa …
- Live Location Sharing — broadcast your position over the mesh as
v1.20 # 1 month ago · 2026-06-22 08:51 UTC
MeshCore Solo Companion Firmware v1.20
What's new
- Repeater mode — a solo companion can now opt in to relaying mesh traffic, configured from a dedicated Tools › Repeater screen that consolidates the toggle, the forwarding filters, live forwarding stats, and a separate radio profile:
- Forwarding filters (all flood-only, off by default) — skip-advert (don't re-flood the highest-volume advert traffic), max-hops (drop a flood once it has travelled too far), yield (extra retransmit-delay so a mobile node defers to better-sited fixed repeaters), and min-SNR (don't re-flood marginal fringe packets). Plus overhear suppression, which cancels a queued retransmit if a peer relays the same packet first.
- Dedicated radio profile — an optional "Custom" Freq/SF/BW/CR used only while relaying, separate from the companion's own network and band-matched to the companion frequency by default. It's applied everywhere a radio change can happen (boot, on-device toggle, app-driven
CMD_SET_RADIO_PARAMS, Settings edits) so the device never silently relays on the wrong params. - While relaying, Adaptive Power Control is pinned to the ceiling and duty-cycle RX is forced off — a repeater needs to hear and relay at consistent power.
- Radio settings overhaul (Settings › Radio) — 16 community-suggested presets plus manual Freq/SF/BW/CR tuning (digit-by-digit frequency editor), and 4 persisted user preset slots. Presets and the manual editor are now shared between Settings and the Repeater screen — a preset saved from either place shows up in both, and you can save the current profile as a named preset or delete one from either screen.
- On-device Diagnostics (Tools › Diagnostics) — a single scrollable screen showing packet counts by category (RX/TX), radio noise floor / RSSI / SNR, packet-pool free count and outbound queue length, actually-forwarded packet count, uptime, and live heap/stack headroom, with a reset-counters popup.
Fixes
- Channel storage hardening —
saveChannels()skips unused (all-zero) slots, so/channels2holds only configured channels instead of always writing ~2.7 KB; andfindChannelIdx()rejects an all-zero secret so a corrupted/empty channel can't match an unused slot and misroute messages. - e-ink UI scaling — self-sizing popup menu scaled for landscape e-ink (no stray header gap, tighter row tiling); popup menu uses the shared proportional scroll indicator instead of raw
^/vglyphs and stops the selection bar before the scrollbar gutter; compass tape ticks/pointer and trail-map markers scale for e-ink, with wrap-around map navigation. - Joystick rotation is now persisted on e-ink builds.
- Trail capacity guard — a
static_assertfails the build ifTrailStore::CAPACITYever outgrows theuint16_tsave-header count, instead of silently truncating.
Under the hood
- Packet pool bumped 16 → 32 so queued retransmits no longer starve incoming-packet allocation while relaying.
- Shared, UITask-decoupled
RadioPresetPickerandRadioParamsEditor(plusnearestBwIndex()inRadioPresets.h) replace ~6 duplicated methods and several state fields per screen. - Mesh
Dispatchergains generic per-payload-type RX/TX counters and pool-free / queue-length getters; a newDeviceDiaghelper reports nRF52 heap (linker-symbol +sbrk) and stack (FreeRTOS high-water-mark) headroom. build.shtolerates control characters inpio project config's JSON dump.
- Repeater mode — a solo companion can now opt in to relaying mesh traffic, configured from a dedicated Tools › Repeater screen that consolidates the toggle, the forwarding filters, live forwarding stats, and a separate radio profile:
v1.19 # 2 months ago · 2026-06-16 08:11 UTC
MeshCore Solo Companion Firmware v1.19
What's new
- Message delivery status — outgoing messages now show an end-to-end delivery marker, auto-scaled to the font (legible on landscape e-ink), in both the history list and the fullscreen view:
- Direct messages (and room servers): pending → delivered (✓) → failed (✗), driven by the real end-to-end ACK. While pending, a row of dots shows one per send so auto-resend progress is visible.
- Auto-resend — a pending DM whose ACK times out is re-sent automatically (reusing the original timestamp) until resends run out. Configurable count under Settings › Messages › Resend (0–5, default 2). Runs in the background, independent of which screen is open; incoming duplicates from retries are dropped.
- Channels — ✓ appears only once a repeater echo confirms the message was relayed into the mesh. No echo is normal (flood has no recipient ACK), so no pending/fail is shown.
- Auto-reply bot overhaul — the trigger/reply bot grows into a small auto-responder:
- Query commands — a DM or monitored-channel message is scanned for
!tokens (!ping !batt !loc !time !temp !hops !status !help) and answered in one combined reply. - Away / reply-to-all — a lone
*trigger replies to every message. - Separate DM and channel triggers, each with its own reply text.
- Quiet hours — silence push replies during a chosen window (wraps midnight).
- Throttling & anti-loop — per-contact DM throttle so one sender can't starve others; channel echo guard so the bot never answers itself; reply counter shown in the bot screen header.
- Query commands — a DM or monitored-channel message is scanned for
- Keyboard overhaul — one shared keyboard across all screens (reclaims duplicate RAM), icon keys (⇧ caps, ⎵ space, ⌫ delete, ✓ OK), and a second symbols page toggled with
#@/abc. - UI refresh
- Proportional scrollbar with up/down triangle caps replaces the old
^/varrows, scaling with the font (1× OLED, 2× landscape e-ink); used by every scrollable list and the fullscreen message view. The redundant>selection marker is gone and rows shifted left to reclaim space. - Status-bar single-letter indicators (M/B/A/G) replaced with scalable mini-icons (mute, bluetooth, advert, trail).
- Proportional scrollbar with up/down triangle caps replaces the old
- Nearby Nodes reorganized — one list over two sources (stored contacts + live discover scan) with a unified detail/action menu. Type filter and sort are independent axes and persist across re-entry; the active filter is shown in the title and in empty-list messages.
- Tools › Trail reorganized — a short two-level action menu (Hold Enter) replaces the flat ~12-item list; view-aware settings; a fitted square map grid; and the waypoint manager split out into its own component. No change to trail recording itself.
- OTA updates — each solo release now ships a DFU
.zip(solo-<ver>-<device>-ota.zip) for over-the-air / BLE-DFU updates, alongside the.uf2for USB flashing.
Fixes
- GPS battery drain on shutdown — GPS is powered off before
SYSTEMOFF, and uses the correct active-level (!PIN_GPS_EN_ACTIVE) instead of a hardcoded level. - Buzzer octave 8 — the RTTTL parser now fully accepts octave 8 instead of clamping it away (which could leak a digit into the next note's duration).
- Trail file robustness —
Waypoint/trail readers check every header read, so a truncated file is rejected instead of using a garbage count.
Under the hood
- OTA DFU zip is named and attached to releases by the
_solo_dualbuild workflow; the per-build Actions artifact already carried it. - Large UI consolidation: shared
drawList/ header / key-decode helpers, deduplicated status-bar indicators, reusable scalable mini-icon facility (icons.h), and an audit-pass cleanup premoving dead code and redundant scroll-clamp logic.
- Message delivery status — outgoing messages now show an end-to-end delivery marker, auto-scaled to the font (legible on landscape e-ink), in both the history list and the fullscreen view:
v1.18 # 2 months ago · 2026-06-14 08:22 UTC
MeshCore Solo Companion Firmware v1.18
New device support
- GAT562 30S Mesh Kit — the firmware now supports the GAT562 30S alongside the Wio Tracker L1 family. Pre-built
.uf2files for all supported devices are published with each release — see the Supported Devices table.
What's new
- GAT562 30S Mesh Kit support — see above.
- Battery saving (radio) — two new independent toggles under Settings › Radio:
- Pwr save — hardware duty-cycle receive (SX126x
SetRxDutyCycle): the radio cycles RX↔sleep autonomously and wakes on a preamble, cutting average RX current with only a small increase in receive latency - Auto pwr — Adaptive Power Control: trims TX power on strong links (based on ACK SNR) and ramps back up on weak or lost links; the home screen shows the live transmit power
- Pwr save — hardware duty-cycle receive (SX126x
- BLE disconnect icon fix — the BLE status icon now updates immediately when the connection drops (e.g. out of range, supervision timeout). Previously it could stay active until the next UI polling cycle.
- Bot trigger preserves case — the auto-reply trigger phrase is now stored exactly as typed. Matching remains case-insensitive, so
Ping,pingandPINGall trigger the bot, but the trigger no longer gets silently lowercased when saved. - Screenshot support in all solo builds —
ENABLE_SCREENSHOTis now enabled in every solo firmware build. No need to use a separate_devenvironment. Use the Solo Tools web app to capture screenshots directly from the browser.
Under the hood
- CI matrix for solo firmware builds is now fully dynamic — new devices are picked up automatically from
platformio.inibased on the_solo_dualenv suffix, no workflow changes required. AbstractUITask::onBLEDisconnected()virtual hook added — called bysetHasConnection()on transition to disconnected;UITaskoverrides it to set_next_refresh = 0.build.shgainsbuild-solo-firmwarescommand, backed bybuild_all_firmwares_by_suffix "_solo_dual".
- GAT562 30S Mesh Kit — the firmware now supports the GAT562 30S alongside the Wio Tracker L1 family. Pre-built
v1.17 # 2 months ago · 2026-06-09 15:33 UTC
Wio Tracker L1 — Solo Firmware v1.17
What's new
- Nearby Nodes — navigate & save waypoints from the list — the context menu now exposes Navigate and Save waypoint directly from the Nearby list and detail view, so you no longer have to open the separate Tools → Waypoints screen. Long-press Options in the detail view also opens a Ping submenu.
- Nearby Nodes — TIME sort filter — a new
[TIME]filter sorts contacts by last-seen time (most recent first) instead of distance, useful when GPS is unavailable. - Battery indicator calibrated — the 100 % ceiling of the LiPo discharge curve was corrected from 4200 mV to 4170 mV, matching what the board's charger actually delivers.
- Advert sound scope control — a new Sound → Advert setting lets you choose whether advert notifications play for all nodes or only direct (zero-hop) neighbours, cutting noise on busy meshes.
- Sound slot "None" option — DM, channel and advert melody slots can now be set to None to silence that notification category entirely without muting everything.
- Mark-as-read feedback — marking messages read (per-contact or per-channel) now shows a brief "N marked read" confirmation on screen.
- [Web tool] GPX Downloader — a standalone web page for downloading saved GPX trails from the device over the browser's Web Serial API, no desktop app required.
Under the hood
SoundNotifierextracted fromUITask::notify()— all buzzer/melody logic lives in one place, reducing future merge conflict surface with upstream.KeyboardWidgetis now a single shared instance across screens (saves ~1.5 KB heap).onDiscoveredAdvertextracted as a separate virtual so upstreamonDiscoveredContactkeeps its original 4-parameter signature.
v1.16 # 2 months ago · 2026-06-06 16:35 UTC
Wio Tracker L1 — Solo Firmware v1.16
Rebases the Solo fork onto upstream MeshCore v1.16.0 (254 commits)
What's new (from upstream)
- NRF52 power-saving — the companion now puts the MCU to sleep whenever there's no pending work, instead of looping continuously between events.
- Better reception of longer messages at low spreading factors — the LoRa preamble is now 32 (was 16) for SF below 9, which makes longer frames more reliable on weak links.
- More robust sensors — the I²C sensor subsystem was rewritten to probe the bus before touching any device, so an absent or misbehaving sensor can no longer hang or crash the node.
- Charging-aware shutdown — the device no longer auto-shuts-down on low battery while it's on external power, and shows a shutdown warning on OLED.
- New companion command for sending raw packets, plus assorted CLI additions (
flood.max.advert,flood.max.unscoped, region hierarchy) and bounds-checking fixes that the phone app and repeaters benefit from. - Battery-voltage reading fix carried in from upstream.
v1.15.1 # 2 months ago · 2026-06-05 11:31 UTC
Wio Tracker L1 — Solo Firmware v1.15.1
Hotfix for Bluetooth pairing and buzzer regressions in v1.15 (introduced by the Advert-sound change). No schema change — upgrade in place from v1.15.
Fixes
- Bluetooth pairing PIN is shown again — on the published OLED + e-ink (dual BLE+USB) builds the pairing PIN was never drawn, so the phone asked for a code that wasn't displayed and pairing failed. The PIN now appears on the Bluetooth home page while BLE is on and not yet bonded.
- Auto buzzer mute works again — in v1.15 "Auto" was effectively always muted on dual builds (the connection state was hardcoded true). It now mutes only when a companion app is actually connected — BLE bonded or a host holding the USB serial port open — and stays audible on charge-only / no host. (Plain serial monitors that assert DTR count as connected.)
- Bluetooth status indicator — the top-bar BT dot again reflects a real BLE connection instead of showing connected permanently.
- New-message display wake — the screen wakes for an incoming message again when no app is connected.
Background
v1.15's advert-sound feature broadened the internal "connected" flag from BLE-bonded to any transport, but the dual interface always reports its send-fallback as connected — so everything keyed off "connected" (PIN prompt, Auto mute, BT indicator, message-wake) misbehaved. This release splits the two notions: BLE-specific UI uses the BLE bond state, while Auto mute / message-wake use a new "app connected over BLE or USB" check (USB detected via the CDC DTR line).
v1.15 # 2 months ago · 2026-06-04 15:35 UTC
Wio Tracker L1 — Solo Firmware v1.15
Adds a full GPS navigation suite on top of Solo v1.14 — the L1 becomes a standalone off-grid navigator, no phone required.
Highlights
- Waypoints — mark your current spot or type coordinates, give it a short label, then get live bearing + distance back to it. Ideal for car / camp / water / a meeting point.
- GPS compass — Tools › Compass: a heads-up heading tape derived from GPS course-over-ground. No magnetometer needed.
- Navigate to anything — a saved waypoint, the start of your trail (backtrack), a node from Nearby Nodes, or a location someone texts you.
- Share & save locations over the mesh — send a waypoint in a message; on the other end, navigate to or save any shared location with one menu.
- Global Units setting — one Metric / Imperial switch (Settings › System) drives every distance and speed in the UI.
- Advert sound — an optional audible "in range" heartbeat: the device chirps when it receives an advert from another node — pair it with Auto-Advert to keep tabs on a buddy hands-free.
Changes
Navigation (new)
- Waypoints — Tools › Trail › Hold Enter: Mark here drops one at the current GPS fix; Waypoints opens the list, which carries a synthetic Trail start backtrack row, a usage counter (
WAYPOINTS 3/16), and a + Add by coords row to enter a point by lat/lon/label with no fix required (hemisphere chosen with LEFT/RIGHT since the keyboard has no minus key). Per-waypoint Rename / Delete / Send, plus Clear waypoints. Stored in their own/waypointsfile (16 max) — independent of the trail and not cleared by Reset trail. - Navigate-to-point view — distance plus two absolute bearings, To: (target) and Hdg: (your course over ground), compared by eye. Reused by waypoints, trail backtrack, Nearby-node navigation and message-shared locations.
- GPS compass — Tools › Compass: a scrolling N..E..S..W heading tape under a fixed travel-direction pointer, with a large degrees + cardinal readout. Works whether or not a trail is recording.
- Navigate to a node — Nearby Nodes detail → Hold Enter now opens an Options menu (Navigate / Ping); Navigate opens the bearing/distance view targeting the node's last-known position.
- Trail map as a live view — the Map draws your current position and all waypoints continuously, even with no trail recording. While a trail exists it frames the recorded route and clamps far-off waypoints to the nearest edge (a distant mark can't blow up the scale); with no trail it auto-fits to your waypoints and position. Markers show the first two label characters, placed edge-aware so labels stay on-map.
- Navigate / save a shared location — any message carrying a
lat,lon(what{loc}inserts) or a[WAY]lat,lon labelshare offers Navigate and Save waypoint from its Hold Enter menu — on the history row or in fullscreen, for DMs and channels. Send on a waypoint shares it to a contact or channel, pre-filling the message to confirm. - Waypoints in GPX — the GPX export now includes saved waypoints as
<wpt>elements (label →<name>, plus<time>) alongside the track, so they import as pins in OsmAnd / Garmin / GPX Studio.
Units
- Global Metric / Imperial (Settings › System) drives every distance and speed: Nearby Nodes, Trail (Summary, List deltas, waypoint distances), the navigate-to-point view, the trail min-distance gate (5/10/25/100 m ↔ 15/30/75/300 ft) and the map scale bar.
- Trail readout — the action menu's old four-way km/h·mph·min/km·min/mi cycle is now a Speed / Pace toggle; the unit follows the global setting.
Notifications
- Advert sound — Settings › Sound gains an AD sound entry (built-in / Melody 1 / Melody 2). The device plays it whenever it receives an advert from any node; combined with Auto-Advert on both ends it acts as a hands-free "still i …
v1.14 # 2 months ago · 2026-05-29 10:59 UTC
Wio Tracker L1 — Solo Firmware v1.14
Based on MeshCore upstream v1.15.
Highlights
- Renamed Plus → Solo — to better reflect that this firmware is designed for off-grid, standalone use without needing a companion app on the phone; release artefacts are now
solo-v1.14-oled.uf2andsolo-v1.14-eink.uf2 - E-ink screenshot support —
tools/screenshot.pynow works with both OLED and the e-ink panel; auto-detects rotation 0–3 and uses GxEPD2's visible dimensions; build with-D ENABLE_SCREENSHOT - Battery percentage field — new
Batt %option for the Clock page dashboard, now sharing the same LiPo discharge curve andlow_batt_mvcutoff as the top-bar indicator (so both readings agree) - Channel favourites — mark individual channels as favourites from the channel context menu; new Settings › Contacts filter to hide non-favourite channels
- Context menu cycling unified — LEFT/RIGHT now cycles values everywhere (Notif, Melody, Fav, Duration, BPM) without closing the popup; ENTER reserved for one-shot actions
- Popup menus expand to fit the screen — on portrait e-ink up to 16 items fit without scrolling; on OLED items are now hard-capped to what physically fits
Changes
New features
- E-ink screenshot —
WioTrackerL1Eink_companion_dual_devenv enables capture; protocol header widened to 11 bytes (display type, rotation, uint16 width/height/chunk fields) so it scales to any GxEPD2 panel and rotation - Dashboard
Batt %field — new Clock-page option computed from the same piecewise LiPo curve used by the top-bar battery indicator - Channel favourites —
ch_fav_bitmaskin prefs; toggle from Channel context menu; Settings › Contacts › Channels filter (all / favourites only) - GPS trail — scale grid on map — toggle from the Trail action menu (Grid row); cycles with LEFT/RIGHT now (previously ENTER only)
- Ringtone editor migrated to PopupMenu — Duration and BPM now cycle in-place with LEFT/RIGHT; separate BPM+/BPM- rows removed
Fixes
- OLED joystick rotation — enforce reset moved after prefs load, so stale e-ink rotation values no longer reverse joystick mapping on OLED builds (
FEAT_JOYSTICK_ROTATION_SETTING=0) - First melody note duration — preview-only side effect that shortened the first note in
playMelody()no longer corrupts the stored sequence - Home pages migration — pages added in this release (Favourites, Trail) are appended to stored
page_orderinstead of being hidden; SHUTDOWN is evicted from a full order to make room for required pages - Pin picker fallback — pressing
+on an empty Favourites tile with no starred contacts and no recent DMs now lists all chat contacts instead of showing "No fav contacts" - Popup menus on OLED — height-clamped to what fits on screen (max 4 items at 64 px), so long context menus no longer draw outside the panel
- Trail action menu — Grid toggle now also works with LEFT/RIGHT (not just ENTER); Export labels shortened to
Export (live)/Export (saved)to fit - E-ink default font — unknown-character fallback rectangle aligned with the text cell baseline instead of one pixel below
- Build — added
DisplayDriver::getBuffer/getBufferSizevirtuals so MyMesh no longer needs to know about concrete display types
- Renamed Plus → Solo — to better reflect that this firmware is designed for off-grid, standalone use without needing a companion app on the phone; release artefacts are now
v1.13 # 2 months ago · 2026-05-26 14:00 UTC
Wio Tracker L1 — Plus Firmware v1.13
Based on MeshCore upstream v1.15.
Highlights
- Favourites dial — new home page with a 2×3 grid of pinned contacts; Enter opens the DM directly, pin/unpin from the contact context menu in the DM list
- GPS trail — Tools › Trail records your route in a RAM ring (512 points); three views cycle with LEFT/RIGHT: Summary (distance, time, avg speed/pace), Map (auto-fit with segment markers), List (per-point timestamps and deltas); Hold Enter for Start/Stop, Save/Load to flash, GPX export over USB Serial, and settings (min-distance gate, speed units)
- Mark-all-read — Hold Enter on the DM / Channels / Rooms mode-select screen to mark everything in that category read at once
- Unicode messages on both displays — Cyrillic, Greek, Polish, Czech, Baltic and other Latin Extended scripts now render correctly in messages, keyboard preview and reply prefix on both OLED and e-ink when the Lemon font is enabled
- E-ink full-refresh interval — Settings › Display › Full rfsh lets you pick how many partial refreshes happen before a cleansing full refresh (off / 5 / 10 / 20 / 30); reduces visible ghosting on long sessions (e-ink only)
- Faster long-message rendering — fullscreen message view now wraps text in O(n) instead of O(n²); noticeably snappier on long messages, especially with the Lemon font on e-ink
Changes
New features
- Favourites dial home page — 2×3 grid of pinned contacts; Enter on a filled tile opens the DM, Enter on an empty tile opens an in-place picker (upstream-favourited contacts first, then recent DMs); LEFT/RIGHT reorders in the Home Pages settings
- GPS trail — background sampling with configurable min-distance gate (5 / 10 / 25 / 100 m); segments tracked across start/stop cycles; single flash slot
/trail(binary, magic-versioned header); GPX 1.1 export streams live ring or saved file straight to USB Serial;Gindicator in status bar blinks while active - Mark-all-read — Hold Enter on the message-type screen clears unread counters for the highlighted mode (DM / Channels / Rooms)
- Settings sections collapsible — all sections start collapsed; Enter on a section header expands/collapses it, making long lists (Home Pages, Messages) much faster to navigate
- E-ink:
Full rfshsetting in Settings › Display — controls how many partial refreshes occur before a cleansing full panel refresh - Schema versioning of saved preferences —
/new_prefsnow carries a tail sentinel so older saves are detected and treated safely on load; file self-heals on next save
Fixes
- Sensors home page: Enter no longer accidentally toggles GPS on/off while viewing sensor readings
- Upgrade from v1.11 with trail settings in flash:
trail_units_idxwas silently read from the old sentinel byte (giving "min/mi" instead of km/h default) — schema bumped to0xC0DE0004, corrupted value reset to 0 on mismatch - Lemon font now correctly decodes multi-byte UTF-8 on the e-ink display (Cyrillic, Greek, Polish accents, etc.); previously rendered as garbage glyphs
- Keyboard preview translates UTF-8 through the active font path, so non-ASCII input shows correctly while typing
- Reply path: the
@[nick]prefix is now preserved verbatim — a nickname containing{loc}/{time}is no longer substituted as a placeholder - Home page order: validity flag prevents a junk byte in flash from being interpreted as a "custom order" state
- E-ink: unknown-character fallback rectangle now aligns to the top of the text cell instead of sitting one pixel below the line
- E-ink: Lemon glyphs at text size 2/3 (splash version, clock) no longer render at size 1 scale
v1.12 # 2 months ago · 2026-05-24 18:55 UTC
Wio Tracker L1 — Plus Firmware v1.12
Based on MeshCore upstream v1.15.
Highlights
- Unicode messages on both displays — Cyrillic, Greek, Polish, Czech, Baltic and other Latin Extended scripts now render correctly in messages, keyboard preview and reply prefix on both OLED and e-ink when the Lemon font is enabled
- E-ink full-refresh interval — Settings › Display › Full rfsh lets you pick how many partial refreshes happen before a cleansing full refresh (off / 5 / 10 / 20 / 30); reduces visible ghosting on long sessions (e-ink only)
- Faster long-message rendering — fullscreen message view now wraps text in O(n) instead of O(n²); noticeably snappier on long messages, especially with the Lemon font on e-ink
Changes
New features
- E-ink:
Full rfshsetting in Settings › Display — controls how many partial refreshes occur before a cleansing full panel refresh - Schema versioning of saved preferences —
/new_prefsnow carries a tail sentinel so older saves are detected and treated safely on load; file self-heals on next save
Fixes
- Lemon font now correctly decodes multi-byte UTF-8 on the e-ink display (Cyrillic, Greek, Polish accents, etc.); previously rendered as garbage glyphs
- Keyboard preview translates UTF-8 through the active font path, so non-ASCII input shows correctly while typing
- Reply path: the
@[nick]prefix is now preserved verbatim — a nickname containing{loc}/{time}is no longer substituted as a placeholder - Home page order: validity flag prevents a junk byte in flash from being interpreted as a "custom order" state
- E-ink: unknown-character fallback rectangle now aligns to the top of the text cell instead of sitting one pixel below the line
- E-ink: Lemon glyphs at text size 2/3 (splash version, clock) no longer render at size 1 scale
Upgrade notes
- Settings and message history are preserved across upgrades from v1.11
- First boot after upgrade may log
prefs schema sentinel mismatchover serial — expected, file is rewritten with the new sentinel on the next setting change
v1.11 # 2 months ago · 2026-05-23 22:53 UTC
Wio Tracker L1 — Plus Firmware v1.11
Based on MeshCore upstream v1.15.
Highlights
- Joystick rotation — joystick input mapping can now be rotated independently of the display, useful in custom enclosures (e-ink only)
- Home screen page ordering — all home pages including Clock can now be reordered and toggled in Settings › Home Pages; position indicators are shown immediately on first render
- Unified firmware branch — OLED and e-ink builds are now maintained in a single branch; firmware files renamed to
WioTrackerL1_companion_dualandWioTrackerL1Eink_companion_dual
Changes
New features
- E-ink: runtime joystick rotation setting in Settings › Display — rotates directional input 0° / 90° / 180° / 270° independently of display rotation
- Settings › Home Pages: LEFT/RIGHT reorders any page in the navigation sequence; ENTER toggles pages ON/OFF (Settings and Messages are always visible and cannot be disabled)
Fixes
- Home Pages: several visibility and ordering bugs fixed
- Display: unknown-character block rendering unified across OLED and e-ink builds
Build / CI
- Firmware environments renamed:
WioTrackerL1_companion_radio_dual_settings→WioTrackerL1_companion_dual,WioTrackerL1Eink_companion_radio_dual→WioTrackerL1Eink_companion_dual - Workflow now triggers on
plus_*tags and correctly injects firmware version into both build jobs
v1.15-plus.1.10 # 2 months ago · 2026-05-22 22:07 UTC
Wio Tracker L1 — Plus Firmware v1.15-plus.1.10
Based on MeshCore upstream v1.15.
Highlights
- E-ink display support — the Wio Tracker L1 now has a dedicated e-ink firmware variant; all screens have been adapted for the 250 × 122 / 122 × 250 panel with full portrait and landscape support
- Home screen page ordering — all home pages can now be reordered directly in Settings; Settings and Messages are always present and cannot be disabled
- Runtime font switcher — choose between the default Adafruit font and the Lemon Unicode font in Settings › Display
- Single dual-serial firmware — one build supports both BLE and USB serial; separate BLE/USB variants are retired
- Unified firmware — the previously separate font-switcher build has been merged into the main firmware; there is now a single OLED build and a single e-ink build
Changes
New features
- E-ink firmware: new build target
WioTrackerL1Eink_companion_radio_dualfor Wio Tracker L1 with e-ink display - E-ink: all home screen pages (Clock, Recent, Radio, Bluetooth, Advert, Tools, Settings, Messages, Shutdown) adapted for the e-ink panel
- E-ink: adaptive layout engine — all screens reflow correctly in both portrait (122 × 250) and landscape (250 × 122) orientations
- E-ink: runtime display rotation setting in Settings › Display — applied immediately and persisted across reboots
- E-ink: clock seconds suppressed by default to reduce panel refresh wear
- E-ink: Lemon font support with pixel-accurate glyph scaling
- Settings › Home Pages: LEFT/RIGHT reorders any page in the navigation sequence; ENTER toggles pages ON/OFF (except Settings and Messages, which are always visible)
- Settings › Display: runtime font selection — Default (Adafruit) or Lemon (Unicode, pixel-accurate wrap)
- Settings › Display: 12 h / 24 h clock format toggle (default 24 h)
Fixes
- MeshCore logo on splash screen is centre-cropped rather than overflowing in portrait mode
- Lemon font glyphs now scale correctly with
setTextSizeon the lock screen clock use_lemon_fontpreference is now persisted to flash and survives reboots- Strip
@[nick]reply prefix from channel and DM history card previews
Build / CI
- Font-switcher firmware variant merged into the main OLED build — no separate download needed
v1.15-plus.1.9 # 3 months ago · 2026-05-21 07:37 UTC
Wio Tracker L1 — Plus Firmware v1.15-plus.1.9
Based on MeshCore upstream v1.15.
Highlights
- Active node discovery — the Nearby screen now sends a live discovery ping and displays responding nodes (repeaters, sensors, rooms) with RSSI, SNR and remote SNR. Tap Enter on a node for a full-screen detail view including the public key.
Changes
New features
- Nearby screen: active node discovery via
NODE_DISCOVER_REQreplaces the old passive advert scan; nodes respond with name, type, RSSI and SNR data - Nearby screen: each discovered node is shown as a 2-line boxed card with RSSI, SNR and remote SNR
- Nearby screen: navigate discovered nodes with UP/DOWN; press Enter to open a full-screen detail view showing name, public key (base64), RSSI, SNR, remote SNR and known/new status