github MarekZegare4/MeshCore-Solo v1.23
Solo v1.23

7 hours ago

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 #topic channels), 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. holding a offers á à â ã ä å ą — 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 the top letter row enters a cursor-positioning mode (LEFT/RIGHT move; UP/DOWN jump to start/end, then continue on to the special row / letter grid if pressed again once already there) so you can edit or insert anywhere in what you've typed, not just at the end.
  • Messages get a messenger-style history. History bubbles are now sized to their content and anchored right (outgoing) / left (incoming); the list runs newest at the bottom, growing upward as you scroll into the past; the [+ send] compose button moved to the right edge to match.
  • Clock Tools: alarm repeat. The Alarm screen gains a Repeat row (Off/Daily/Weekdays/Weekends) — Hour/Minute merge into one Time row edited with an HH:MM digit cursor, and Repeat/Armed now respond to LEFT/RIGHT like every other Settings field instead of Enter-only.
  • Diagnostics becomes a tab carousel (Live/System/Font): System adds firmware version + build date, device model and the active radio parameters; Font is a rendering test card with one sample line per script the on-device font covers, so coverage can be eyeballed directly.
  • One unified display font. OLED and e-ink now both draw a single misc-fixed 6×9 font (full Latin/Greek/Cyrillic coverage) generated by a new BDF-to-GFX converter (tools/bdf2gfx.py), retiring the old Default/Lemon switch and the keyboard's per-render font-swap workaround.
  • Discoverable context menus. Every screen with a Hold Enter action menu now shows a small glyph in its header, which highlights while the menu is open — so the shortcut no longer has to be guessed.
  • Status bar and list polish — background-mode icons (Bluetooth/GPS fix/alarm/mute/auto-advert/trail/live-share/repeater/battery) now drop by priority once space runs out, instead of crushing the node name down to a couple of characters; unread counts everywhere are drawn as a filled pill badge; DM/Channel history headers match every other screen's header style; the default home-page carousel is trimmed to Clock/Tools/Shutdown/Favourites/Map (Recent/Radio/BT/Advert/GPS/Sensors are still available, just opt-in under Settings › Home Pages — existing users' saved layouts are unaffected).
  • On-device room Logout — Messages' room context menu gains a Logout entry (mirrors the app's own logout) alongside the existing Login…, forgetting the saved password so the next open prompts for one again.

Under the hood

  • Shared TabBar.h extracted from Nodes/Bot's independently duplicated tab-carousel rendering (Admin and Diagnostics are now the 3rd/4th consumers) — also fixes a tab that didn't quite fit vanishing outright instead of ellipsizing.
  • MyMesh::setChannelLocal() factors out the setChannel/saveChannels/onChannelRemoved sequence previously duplicated across the BLE app's two CMD_SET_CHANNEL branches, now shared with the new on-device channel editor.
  • One canonical Admin entry pointUITask::openAdminFor() / AdminScreen::startFor() — reached identically whether Admin is opened from Nodes' Hold-Enter action or the target picker.
  • KeyboardWidget reworked to UTF-8 codepoints throughout (insert, backspace, T9 in-place cycling), so a multi-byte alt-alphabet character can never be split.
  • NodePrefs schema grew twice this cyclealarm_repeat_mask/keyboard_alt_alphabet, then the bot room-target/per-target-independence fields — each verified via a standalone host compile and sizeof/offsetof check, with the schema sentinel bumped both times; existing users' prefs upgrade in place with safe defaults.

Don't miss a new MeshCore-Solo release

NewReleases is sending notifications on new releases.