github MarekZegare4/MeshCore-Solo v2.0-rc1

pre-release4 hours ago

MeshCore Solo Companion Firmware v2.0-rc1

A release candidate for 2.0: please report anything that looks wrong before the final release.

Warning

Your settings start again from the defaults. 2.0 stores its settings in a new format, so it cannot read the old file. It does keep the node's name and position, its radio settings (frequency, bandwidth, spreading factor, coding rate, TX power), the Bluetooth PIN and the default scope. Your identity, contacts, channels, scope list, waypoints and saved trails stay as they are. You do not need to erase the flash.

Wio Tracker L2: install this release by hand. Settings › Firmware update only offers final releases, never a release candidate.

What's new

  • Wio Tracker L2 is supported, with a new colour touch interface built for its 320×240 screen:
    • Home: a phone-style home screen with the clock, telemetry, a small map and the apps; you can arrange the apps.
    • Map: an offline map from the microSD card, downloaded on the device over WiFi, with hiking trails, a grid, a scale bar and saved trails.
    • Messages: message history kept on the SD card.
    • GPS: a sky plot of the satellites.
    • Diagnostics: an RF noise tab and history charts.
    • Clock: alarm, timer, stopwatch and a calendar.
    • Also: a screen PIN, screenshots, the SD card as a USB drive, and firmware updates from GitHub over WiFi.
  • Two Wio Tracker L1 E-ink builds:
    • Landscape, with a larger 8×13 font.
    • Portrait, which uses the tall screen for whole message bubbles, a trail map with a height profile, and the clock, calendar and charts.
  • A refreshed L1 interface:
    • Home pages slide sideways and gain quick panels and a map page.
    • A single Status page and screen replace the Radio, GPS and Sensors pages and Diagnostics.
    • Settings use one list style throughout, with switches for on/off values.
    • Popups, alerts and bubbles share one soft-cornered frame.
    • The screen only redraws the parts that changed.
  • Pointers to other nodes on every screen size. Nodes shows an arrow towards each node beside its distance. Node detail shows how many repeaters a message takes to reach that node; the L2 and the E-ink also draw a compass pointing at it.
  • Trails record altitude, and a trail's height profile shows the climb and the highest and lowest points (Trail › Trail height on the L1; Map tools on the L2). GPX exports carry the altitude.
  • A screen-lock PIN. You can set a PIN that locks the screen, including at boot; the radio and the app link keep working while it is locked. Contributed by @3urobeat.
  • Quiet hours mute the device on a schedule and keep the screen dark for new messages. The alarm still rings.
  • Battery curve editor: set your cell's voltage at each 10 % step, so the battery percentage matches your battery.
  • Tools › Satellites on the L1 OLED: a sky plot and a signal bar for each satellite.
  • Live location sharing has its own scope and ends by itself. Each sharing session runs for a set time (1–12 h) and then stops.
  • Unread counts show a "+" when a full history has dropped older messages, so the count can be higher than shown.

Fixes

  • Pwr save (RX duty-cycle) is disabled. With it on, the radio silently missed every packet from a sender whose preamble length differed from ours, for example a repeater still on pre-v1.16 firmware. Reception could fall from several messages a minute to a few a day.
  • Signing from the app failed on the L1. The device promised the app an 8 KB buffer it could not allocate, so every signing request was refused. It now allocates what memory allows and reports that size.
  • A flood DM's acknowledgement folded into the return path now reaches the screen, so such a message gets its tick.
  • The radio stays serviced while the e-ink screen refreshes. Before, a long refresh could make the device miss packets.
  • ESP32 boards stay findable over Bluetooth after the Bluetooth stack restarts, or after a connection that never paired.
  • On the L1, UI timers survive the millisecond counter wrapping around. A failed send now keeps the text you typed, and lists stop at their ends.
  • On-screen keyboard letters could be blank on some screens.
  • The hop/ack marker no longer overlaps the age on long sender names.
  • The nRF52 builds queue up to 128 messages for the app while it is disconnected.

MeshCore Solo Companion Firmware v1.28

What's new

  • The Clock/Lock dashboard gets a separate "Altitude (GPS)" field, alongside the existing barometric one (now labelled "Altitude (Baro)") — the original single Altitude field only ever read a barometric sensor's telemetry, showing -- on any board without one even with a perfectly good GPS fix.
  • Received messages now show how many hops they actually took to reach you, right in the message list — the same tiny digit-icon a sent message already uses for its repeater/echo count, now shown for incoming DMs and channel posts too, using the hop path the mesh already records for them.
  • Scope is now a shared, freely-definable list, not one device-wide text field. Settings › Radio › Scope manages a small named list (*/wildcard always first, plus a movable default) instead of a single free-typed name. Each channel picks exactly one scope of its own — a Scope: <name> row in the channel's context menu, matching the phone app's own per-channel region picker — and the channel's history title shows the tag when it's set to anything but *. Tools › Repeater's "Extra scopes" now multi-selects from the same list instead of comma-typing region names, capped at the same 4 active relay scopes as before. A channel set to * sends unscoped; DMs and the repeater's primary relay slot follow the list's default entry. Upgrading carries an existing single-scope setup over unchanged: the old Scope becomes the default entry and every channel you already had is seeded with it, so nothing changes on the air.
  • GAT562 30S reports and uses its real TX power. The board's always-on external PA is rated at 30 dBm, but the firmware wrote the request straight to the SX1262 register (max 22), so the reported power never matched the radiated one and couldn't ask for more. TX power now goes through the PA's measured gain curve (up to 30 dBm from the app/CLI), and every setter stores and reports the power actually applied. The other GAT562 boards and every non-PA build are unchanged.
  • Settings › Contacts can now clean out contacts you haven't heard from in a while. New "Expire" option (Off/7d/30d/90d) plus a "Prune now" action that shows exactly how many contacts would be removed before you confirm. Favourites are always kept regardless of age.

Fixes

  • Long messages no longer stretch their chat bubble across the whole row, which hid which side a message came from. A bubble now always leaves a gutter on the side away from its sender — on the left for your own messages, on the right for received ones — and long text wraps a little earlier to fit.
  • The same channel could be added twice from the device. "+ Add channel" happily saved a second copy of Public (or of any channel you already had), which is the same channel listed twice with split history and unread counts. Adding a channel whose key already exists is now refused ("Already added" / "Channel already exists"); renaming an existing channel still works. Duplicates you already have are left alone.
  • A message sent from the phone app could show "0s" on the device indefinitely. Its age was measured from the phone's timestamp, so a phone clock ahead of the device's (or on local time) made the age negative and pinned it at 0s until the device's clock caught up. Sent messages now age from the moment the device saw them, and a received message whose timestamp is unknown or ahead of the device clock ages from its receipt time.
  • Upgrading from a firmware older than v1.27 (one that predates several past settings-layout changes) no longer runs a chain of one-time migrations on first boot: the few settings they used to backfill now start at today's plain defaults, the same as a fresh device. Current-version upgrades are unaffected.
  • Heltec V3/V4 with a wired joystick: Enter felt laggy and unreliable. The Enter contact had no internal pull-up and buffered every click for ~280 ms waiting for a double/triple click that the joystick code ignores, so a quick double-tap was silently dropped. It's now wired like the direction and Back contacts. Boards without a joystick are unaffected.
  • Every altitude reading (baro + GPS, Clock and Lock screen) and the GPS home page's "alt" row now respect Settings › System › Units, same as every other distance in the UI — none of them checked metric/imperial before. Locator's Radius row had the same gap and is fixed the same way.
  • The Radio home page's noise floor showed "n/a" whenever Pwr save (RX duty-cycle) was on, on the assumption duty-cycle RX can't sample it. That's stale — the radio already recalibrates it periodically even under duty-cycle, which is why Diagnostics' own reading was already showing something real. Radio home page now matches.
  • "Msg wake" moved from Settings › Sound to Settings › Display — a more logical home for a display-wake toggle than notifications. Menu order only; the setting itself is unaffected.
  • Remote Bot's channel replies (trigger reply, channel command reply, !gps fix result) never showed which repeaters echoed them back, unlike every other way of posting to a channel. Bot-originated posts now arm the same relay tracking an app or on-device send already gets.
  • Creating a new message channel didn't refresh the channel list until leaving and re-entering the screen. Contributed by @3urobeat.
  • The DM and channel history lists didn't wrap at their ends like every other list in the UI. UP at the oldest message now wraps straight to the newest, and DOWN past the newest wraps to the compose row and back to the oldest, closing the loop both ways.
  • Unselected message bubbles had a stray light-filled header strip behind the sender name, the one place in the UI with a filled patch on an otherwise plain row. Unselected bubbles are now plain (matching every other unselected row); the selected fill is unchanged.
  • A received message could show no time at all — just the sender name and hop count — whenever its timestamp read slightly ahead of the device's own clock (sender/receiver clock skew, or the receiver's clock not synced yet) or was genuinely unknown. Both cases now show the receipt time instead of going blank.

Don't miss a new MeshCore-Solo release

NewReleases is sending notifications on new releases.