diff --git a/README.md b/README.md index 3a81b6a6..9bc41376 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,30 @@

MeshCore Solo

-# MeshCore Solo Companion Firmware +

MeshCore Solo Companion Firmware

-A fork of the official [MeshCore](https://github.com/meshcore-dev/MeshCore) companion radio firmware with a full standalone on-device UI — messages, contacts, GPS navigation and tools without a phone. +

+ A fork of the official MeshCore companion radio firmware with a full standalone on-device UI:
+ messages, contacts, GPS navigation and tools without a phone. +

-**Try it live in your browser: [solo.marekzegarek.com](https://solo.marekzegarek.com)** +

+ Latest release + Try it in your browser + Documentation + MeshCore Discord +

-[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-FFDD00?logo=buymeacoffee&logoColor=black)](https://buymeacoffee.com/MarekZegarek) +

+ Status page on the OLED +   + A channel on the e-ink +   + Home screen on the Wio Tracker L2 +

-Discussion: [MeshCore Discord](https://discord.gg/sdhYArU2jr) — [Solo firmware thread](https://discord.com/channels/1495203904898728149/1505294337884553447) +

+ Buy Me a Coffee +

--- @@ -17,7 +33,9 @@ Discussion: [MeshCore Discord](https://discord.gg/sdhYArU2jr) — [Solo firmware | Device | MCU | Display | Firmware file | | ------ | --- | ------- | ------------- | | Seeed Wio Tracker L1 (OLED) | nRF52840 | SSD1306 / SH1106 128 × 64 | `solo--WioTrackerL1.uf2` | -| Seeed Wio Tracker L1 (E-ink) | nRF52840 | GxEPD2 250 × 122, 4.2" 400 × 300 or 4.26" 800 × 480 | `solo--WioTrackerL1Eink-landscape.uf2`, `-portrait.uf2`, `solo--WioTrackerL1Eink42.uf2` or `solo--WioTrackerL1Eink426.uf2` | +| Seeed Wio Tracker L1 (E-ink 2.13") | nRF52840 | 250 × 122, landscape or portrait | `solo--WioTrackerL1Eink-landscape.uf2` or `-portrait.uf2` | +| Seeed Wio Tracker L1 (E-ink 4.2") | nRF52840 | 400 × 300 | `solo--WioTrackerL1Eink42.uf2` | +| Seeed Wio Tracker L1 (E-ink 4.26") | nRF52840 | 800 × 480 | `solo--WioTrackerL1Eink426.uf2` | | Seeed Wio Tracker L2 | ESP32-S3 | 320 × 240 touch LCD | `solo--Wio-Tracker-L2-merged.bin` | | GAT562 30S Mesh Kit | nRF52840 | SSD1306 128 × 64 | `solo--GAT562-30S-Mesh-Kit.uf2` | | GAT562 Mesh Watch13 *(experimental)* | nRF52840 | SSD1306 128 × 64 | `solo--GAT562-Mesh-Watch13.uf2` | @@ -27,7 +45,7 @@ Discussion: [MeshCore Discord](https://discord.gg/sdhYArU2jr) — [Solo firmware | LilyGO T-Echo Lite + KeyShield *(experimental)* | nRF52840 | GxEPD2 250 × 122 | `solo--LilyGo-T-Echo-Lite-keyshield.uf2` | | ProMicro *(experimental)* | nRF52840 | SSD1306 128 × 64 | `solo--ProMicro.uf2` | -Firmware files are on the [releases page](https://github.com/MarekZegare4/MeshCore-Solo/releases). Every binary serves the companion app over both BLE and USB serial. +Firmware files are on the [releases page](https://github.com/MarekZegare4/MeshCore-Solo/releases). Every binary serves the companion app over Bluetooth and USB serial at the same time. Heltec V3/V4 need [a keyboard or joystick wired up](./docs/solo/hardware.md#wiring-on-the-heltec-v3--v4); ProMicro needs a CardKB; the T-Echo Lite needs the KeyShield. The rest work out of the box. @@ -42,9 +60,6 @@ Heltec V3/V4 need [a keyboard or joystick wired up](./docs/solo/hardware.md#wiri **ESP32-S3 boards** — flash the `-merged.bin` at offset `0x0` with the [MeshCore Flasher](https://meshcore.io/flasher) or `esptool.py --chip esp32s3 write_flash 0x0 -merged.bin`. The Wio Tracker L2 then updates itself over WiFi (Settings › System › Firmware update). -> [!IMPORTANT] -> BLE has priority over USB serial: while a BLE connection is active the USB protocol is suspended. - --- ## Documentation @@ -68,8 +83,14 @@ This README is protected from upstream merges via `.gitattributes`; after clonin --- +## Community + +Questions and feedback: the [Solo firmware thread](https://discord.com/channels/1495203904898728149/1505294337884553447) on the [MeshCore Discord](https://discord.gg/sdhYArU2jr), or an [issue](https://github.com/MarekZegare4/MeshCore-Solo/issues). + +--- + ## Contributors -Big thanks to [vanous](https://github.com/vanous), [marczykm](https://github.com/marczykm), [tchellow](https://github.com/tchellow) and [3urobeat](https://github.com/3urobeat). +Big thanks to [vanous](https://github.com/vanous), [marczykm](https://github.com/marczykm), [tchellow](https://github.com/tchellow), [3urobeat](https://github.com/3urobeat) and [pmow](https://github.com/pmow). Built on upstream [MeshCore](https://github.com/meshcore-dev/MeshCore) and its [community](https://github.com/meshcore-dev/MeshCore/graphs/contributors). diff --git a/release-notes.md b/release-notes.md index a4789b73..a5d48de8 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,3 +1,154 @@ +## MeshCore Solo Companion Firmware v2.0 + +The biggest Solo release so far: +- the Wio Tracker L2 with a colour touch interface; +- four e-ink builds for the Wio Tracker L1; +- a new interface on the OLED; +- the settings the phone app used to keep to itself, now on the device. + +Built on MeshCore 1.18. This page lists everything new since 1.28. Testers coming from a release candidate will find what changed since rc3 at the end. + +> [!WARNING] +> **Coming from 1.x: your settings start again from the defaults**, apart from the node's name and position, its radio settings (frequency, bandwidth, spreading factor, coding rate, TX power), the Bluetooth PIN and the default scope, which carry over. +> +> **Coming from rc1, rc2 or rc3: every setting starts again from the defaults**, including the **device name, the radio settings and the Bluetooth PIN**. 2.0 saves its settings in a new file, `/prefs.json`, and doesn't read the release candidates' file. **Set your radio first** (Settings › Radio, or the app), or the device won't hear your mesh. +> +> Either way, your identity, contacts, channels, scope list, messages, waypoints and trails stay as they are, and you don't need to erase the flash. + +> [!NOTE] +> **Wio Tracker L2:** from rc1 or later, Settings › Firmware update finds 2.0 and installs it over WiFi. + +### New devices and builds + +- **Wio Tracker L2**, with a 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, which you can arrange. Pull down from the status bar for the quick panel: Bluetooth, WiFi, GPS, sound, trail and live sharing switches, advert, lock and brightness. + - **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. **Layers**: Topo, Light, Dark, Satellite and Esri Topo. + - **Messages**: history kept on the SD card. + - **GPS** on three tabs: Sky, Signal and Details. + - **Diagnostics**: an RF noise tab, and charts with a readout under your finger. + - **Clock**: alarm, timer, stopwatch, calendar, and a big clock in the splash's lettering. + - **A dark and a light theme**, with an accent colour. + - **Flashlight** app. + - Also: a screen PIN, screenshots, the SD card as a USB drive, and firmware updates from GitHub over WiFi. +- **Four Wio Tracker L1 E-ink builds:** + - **2.13" landscape**, with a larger 8 × 13 font. + - **2.13" portrait**: the tall screen fits whole message bubbles, a trail map with a height profile, the clock, the calendar and charts. + - **4.2" 400 × 300** (`WioTrackerL1Eink42`): a 9 × 15 font, its own icons, and screens laid out for the room: status tiles, a node list with a detail pane, charts and the sky view. + - **4.26" 800 × 480** (`WioTrackerL1Eink426`, Good Display GDEQ0426T82), laid out like the 4.2", with **Text size** and **Icon size** in Settings › Display. Contributed by @pmow. + +### A new interface on the OLED and e-ink + +- **Home pages slide sideways**, with quick panels and a map page. Each panel's first row is the way into the full screen ("All settings", "All messages", "All tools"); the rows after it are shortcuts. +- **One 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. +- **Alerts drop in from the top** as a banner and slide away. **Message alert** in Settings › Display picks the banner, a small envelope with a count beside the battery, or no alert. +- **Popups, alerts and bubbles** share one soft-cornered frame. Tab bars glide, and the page below slides in. The screen redraws only the parts that changed. +- **A bolt beside the battery** while USB power is connected (nRF52 boards and the L2). +- **Nearby › Map**: the nodes with a position and you on one view. +- **Clock tools**: a calendar with today and the alarm's days. +- **Tools › Satellites**: a sky plot and a signal bar for each satellite. +- **Tools › System › Flashlight**: the whole screen lit (not on e-ink). +- **The keyboard's cursor mode** marks the place between letters, and Up / Down move a word. + +### The phone app's settings on the device + +- **Privacy**: whether your adverts carry your position, and how exactly: **Exact**, or rounded to about 100 m, 500 m or 1 km on a fixed grid. A fixed position, typed in or taken from a waypoint. Who may ask for your status, location and sensors. The Bluetooth PIN. Precision contributed by @pmow. +- **Adding contacts**: all heard nodes or only some types, up to how many hops, and whether to replace the oldest when the list is full. +- **Advanced radio**, at the end of Radio: path hash size, double ACK, listen before talk, interference threshold, RX boost, RX delay and airtime. +- **Per contact**: who may ask for its telemetry, reset its path, share it with the nodes nearby. +- **Factory reset** in Settings › System, asked twice. +- **A console**: the phone app's console and the site's USB tools take upstream MeshCore's companion commands, plus a key for every setting (`keys`, `get`, `set`). +- **The app on Bluetooth and USB at the same time.** A Bluetooth connection no longer shuts the USB link, and turning Bluetooth off leaves USB on. + +### Messages and contacts + +- **A conversation opens at its first unread message**, under a "New" line. Messages that arrive while the screen is dark or locked stay unread until you see them. +- **The bytes a message has left**, counted as it will go out, shown over the last 40 bytes. Nothing past the limit can be typed or sent. +- **Path and trace**: **Path / trace** in a contact's options (**Route** in a node's card on the L2): + - Edit the repeaters a message goes through. + - Trace the path out and back, with the signal in dB for every hop. + - **Find where** shows where the path stops. + - **Keep** a route, so a path heard from the node doesn't replace it. +- **Channel order** in Settings › Contacts: by slot, newest message first, or by name. A channel's scope can be **Default**, which follows the scope the list marks as default. +- **QR codes**: of this manual, and of your contact for another phone to add (Status › System; Settings › About on the L2). +- **Unread counts show a "+"** when a full history has dropped older messages. +- **Quiet hours** mute the device on a schedule and keep the screen dark for new messages. The alarm still rings. + +### Navigation and the map + +- **Pointers to other nodes**: Nodes shows an arrow to each node beside its distance. Node detail shows how many repeaters a message takes to reach it. The L2 and the e-ink also draw a compass. +- **Packet flow**: every packet the radio hears is drawn as a line from its origin, through the repeaters, to you, in a colour for each kind, with a legend. Off by default: **Flow** in the Nodes map's options, Map options › On the map › **Packet flow** on the L2. +- **Trails record altitude**, with a height profile showing the climb and the highest and lowest points. GPX exports carry the altitude. +- **Live location sharing has its own scope**, and each session ends by itself after 1–12 h. + +### Device + +- **A screen-lock PIN**, including at boot. The radio and the app keep working while the screen is locked. Contributed by @3urobeat. +- **Battery curve**: set your cell's voltage at each 10 % step. +- **The clock survives a power loss**: it is saved every 30 minutes and restored on the next start. + +### Fixes + +- **Pwr save (RX duty-cycle) is disabled.** With it on, the radio missed every packet from a sender with a different preamble length, such as a repeater on firmware before 1.16. +- **Signing from the app failed on the L1**: the device promised a buffer it couldn't allocate. +- **GPS power saving never updated the position**: it put the receiver back to sleep before a new fix. +- **Sending no longer stutters** while the contact list is saved. +- **Each packet heard could hold the device up for up to 300 ms** when no app was connected over USB. +- **Settings were lost on restart on a device that had run Meshtastic.** +- **Settings, contacts, channels, trails and waypoints could be lost** if the power went at the wrong moment while saving. +- **The radio stays serviced while the e-ink screen refreshes**, so a long refresh no longer misses packets. +- **ESP32 boards stay findable over Bluetooth** after the Bluetooth stack restarts. +- **Bluetooth switched off stays off** over a reboot or hibernation. +- **Messages:** + - A flood DM's acknowledgement folded into the return path now reaches the screen. + - A late acknowledgement for an earlier attempt marks the message delivered. + - A direct message's last retry drops the direct path and floods. + - A failed send keeps the text you typed. + - A message from someone named "Me" is no longer shown as yours. +- **Scopes:** removing a scope moves its channels to the default, not to unscoped, and adverts use the default scope too. +- **Channels:** joining a #channel trims spaces and keeps the case, as the app does. +- **The room bot** no longer answers the old posts a room replays after login. +- **The alarm** follows a change of time zone. +- **A new auto-advert interval** counts from the last advert. +- **The nRF52 builds queue up to 128 messages** for the app while it is disconnected. +- **Wio Tracker L2:** + - WiFi could fail to start or join after opening the map. + - Fast typing: a second finger is a new tap, not a slide. + - The SD card isn't remounted while it's a USB drive. +- **Upstream MeshCore 1.18 fixes**, among them security fixes (a buffer overflow in decryption, console buffers), the ESP32 clock reading 1970 after a crash, and the TX power on LR1121 radios. + +
+Changes since rc3 + +- **Settings are saved in `/prefs.json`** (see the warning above). +- **The app on Bluetooth and USB at the same time.** +- **Path and trace**, **packet flow**, **flashlight**, **channel order**, gliding tab bars, and the lettering clock on the portrait e-ink. +- **Console**: `txdelay`, `direct.txdelay` and `agc.reset.interval`. +- **Wio Tracker L2:** + - A light theme and map layers. + - A title bar with the clock on screens with a title, controls in one shape, and the Nodes filters in one row. + - The quick panel no longer stalls or tears when pulled. + - The GPS sky plot is no longer cut off. +- **4.26" e-ink**: lines and outlines are drawn at the panel's scale, and a conversation no longer jumps on opening. +- **Fixes**: + - GPS power saving. + - The 300 ms USB hold-up. + - Saving when the power goes. + - Scopes and the room bot. + - DM retries and late ACKs. + - #channel names. + - The alarm and the time zone. + - The auto-advert interval. + - "Me". + - `nan` in the console. + - Auto pwr after a TX power change. + - WiFi, fast typing and the SD card on the L2. + - Upstream 1.18. + +
+ +--- + ## MeshCore Solo Companion Firmware v2.0-rc3 The third release candidate for 2.0. Settings carry over from rc1 and rc2; coming from 1.x, read the rc1 notes below first.