From ddac8fe3eeeab0fb7e7f3408879e7b3eef6abcad Mon Sep 17 00:00:00 2001 From: Jakub <106778416+MarekZegare4@users.noreply.github.com> Date: Sat, 23 May 2026 00:07:41 +0200 Subject: [PATCH 1/3] =?UTF-8?q?docs:=20update=20README=20for=20v1.10=20?= =?UTF-8?q?=E2=80=94=20e-ink=20support,=20font=20switcher,=20home=20page?= =?UTF-8?q?=20ordering?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add Firmware Variants table (OLED vs e-ink) with filenames - Add E-ink Display section covering adaptive layout, rotation, scaled dots, suppressed clock seconds - Update Settings > Display: add Display rotation (e-ink only) entry, update Font entry to reflect it's now built into all builds - Update Settings > Home Pages: document LEFT/RIGHT ordering and always-visible Settings/Messages pages - Replace "Font Switcher Build" section with "Font Switcher" — font is now built into every variant, no separate download needed Co-Authored-By: Claude Sonnet 4.6 --- README.md | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e86f031d..aedd4e9c 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,28 @@ This branch extends the official MeshCore companion radio firmware for the **See Join the discussion on offical MeshCore discord: https://discord.gg/sdhYArU2jr +## Firmware Variants + +Two firmware builds are published with each release: + +| Variant | Display | File | +|---------|---------|------| +| **OLED** | SSD1306 / SH1106 128 × 64 | `WioTrackerL1_companion_radio_dual_*.uf2` | +| **E-ink** | GxEPD2 250 × 122 | `WioTrackerL1Eink_companion_radio_dual_*.uf2` | + +Both variants are built from a single codebase and share the same feature set. The `dual` in the filename means a single binary supports both BLE and USB serial — there are no separate BLE/USB builds. + +### E-ink Display + +The e-ink variant targets the Wio Tracker L1 fitted with a 2.13″ GxEPD2 panel (250 × 122 px). All screens have been adapted for the e-ink panel: + +- **Adaptive layout** — every screen reflows correctly in both landscape (250 × 122) and portrait (122 × 250) orientations +- **Display rotation** — configurable in Settings › Display; applied immediately and persisted across reboots +- **Scaled navigation dots** — dot indicators on the home screen scale with line height so they remain visible at all orientations +- **Clock seconds suppressed by default** — seconds are hidden to reduce per-second panel refreshes and extend display lifetime; re-enable in Settings › Display + +--- + ## New Features ### Messages Screen @@ -66,13 +88,14 @@ All settings are saved to flash and restored on next boot. - Auto-off timeout - Battery display mode (icon, %, V) - Clock seconds (show/hide — hiding reduces display refresh from 1 s to 60 s) - - Font — **Default** (5×7 Adafruit, ASCII + transliteration) or **Lemon** (native Unicode, available in the `font-switcher` build only) + - Font — **Default** (5×7 Adafruit, ASCII + transliteration) or **Lemon** (native Unicode, pixel-accurate wrap) + - Display rotation *(e-ink only)* — 0 ° / 90 ° / 180 ° / 270 °; applied immediately - **Sound** - Buzzer: On / Off / **Auto** — Auto mode silences the device while connected via Bluetooth, and re-enables sound when the connection drops - Volume (1–5; preview tone plays on each change) - DM Melody — notification sound for incoming private messages: built-in, Melody 1, or Melody 2 - Channel Melody — notification sound for incoming channel messages: built-in, Melody 1, or Melody 2 -- **Home Pages** — toggle visibility of individual home screen pages +- **Home Pages** — toggle visibility and reorder individual home screen pages; press LEFT / RIGHT on any entry to move it earlier or later in the navigation sequence; press ENTER to toggle ON / OFF (Settings and Messages are always visible and cannot be disabled) - **Radio** - TX power - **System** @@ -180,9 +203,9 @@ Automatically replies to incoming messages that contain a configured trigger wor --- -## Font Switcher Build +## Font Switcher -An alternative firmware build is available (`font-switcher` in the filename). It includes both the default 5×7 Adafruit font and the [Lemon bitmap font](https://github.com/cmvnd/fonts), switchable at runtime in **Settings → Display → Font** without reflashing. The selected font is saved to flash and takes effect immediately. +Both the default font and the [Lemon bitmap font](https://github.com/cmvnd/fonts) are built into every firmware variant. Switch between them at runtime in **Settings → Display → Font** — no reflashing required. The selected font is saved to flash and takes effect immediately. The Lemon font offers: @@ -190,8 +213,6 @@ The Lemon font offers: - **Pixel-accurate word wrap** — text wraps based on actual glyph widths rather than a fixed character count. - **Slightly taller glyphs** — the font uses a 10 px line height compared to 8 px for the default font. -Prebuilt `.uf2` files for the font-switcher variant are included in each release alongside the standard builds and are identified by `font-switcher` in the filename. - --- Feel free to explore, share feedback and feature requests! From d3589e293fb8d0403ca01dc4b61835511a516e45 Mon Sep 17 00:00:00 2001 From: Jakub <106778416+MarekZegare4@users.noreply.github.com> Date: Sat, 23 May 2026 09:19:27 +0200 Subject: [PATCH 2/3] feat: sort DM contact list by message count (most messages first) Contacts with at least one message float to the top, ordered by total message count descending. Contacts with no messages keep their original relative order. Sorting is applied each time the message screen is opened (buildContactList), so the list always reflects the current session's activity. Co-Authored-By: Claude Sonnet 4.6 --- examples/companion_radio/ui-new/QuickMsgScreen.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/examples/companion_radio/ui-new/QuickMsgScreen.h b/examples/companion_radio/ui-new/QuickMsgScreen.h index 6febeba3..e0c5997f 100644 --- a/examples/companion_radio/ui-new/QuickMsgScreen.h +++ b/examples/companion_radio/ui-new/QuickMsgScreen.h @@ -266,6 +266,21 @@ class QuickMsgScreen : public UIScreen { if (!show_all && !(c.flags & 0x01)) continue; _sorted[_num_contacts++] = i; } + // Sort by message count descending; contacts with no messages keep original order. + int counts[MAX_CONTACTS]; + for (int i = 0; i < _num_contacts; i++) { + the_mesh.getContactByIdx(_sorted[i], c); + counts[i] = dmHistCountForContact(c.id.pub_key); + } + for (int i = 1; i < _num_contacts; i++) { + if (counts[i] == 0) continue; + uint16_t key = _sorted[i]; int kc = counts[i]; + int j = i; + while (j > 0 && counts[j-1] < kc) { + _sorted[j] = _sorted[j-1]; counts[j] = counts[j-1]; j--; + } + _sorted[j] = key; counts[j] = kc; + } } } From a0a74fe5d347b16c37b805b653e21a0ec028fb52 Mon Sep 17 00:00:00 2001 From: Jakub <106778416+MarekZegare4@users.noreply.github.com> Date: Sat, 23 May 2026 10:14:05 +0200 Subject: [PATCH 3/3] fix(eink): replace mute bitmap icon with text letter M Co-Authored-By: Claude Sonnet 4.6 --- examples/companion_radio/ui-new/UITask.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 20a617a0..aa9d7c9f 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -303,7 +303,11 @@ class HomeScreen : public UIScreen { #ifdef PIN_BUZZER if (_task->isBuzzerQuiet()) { display.setColor(DisplayDriver::LIGHT); - display.drawXbm(battLeftX - 9, 0, muted_icon, 8, 8); + display.fillRect(battLeftX - 9, 0, 7, 7); + display.setColor(DisplayDriver::DARK); + display.setCursor(battLeftX - 9, 0); + display.print("M"); + display.setColor(DisplayDriver::LIGHT); } #endif