Skip to content

v0.9.12.1

Choose a tag to compare

@dabeani dabeani released this 27 May 22:00
· 3 commits to main since this release
28f9a84

** NEW HOTFIX v0.9.12.2 **
go here: https://github.com/dabeani/meshcoreterm/releases/tag/v0.9.12.2

This is v0.9.12.1 from 27.05.2026, release for critical bugs in the v0.9.12. The main focus is on fixing the T-Deck Plus keyboard and blink behavior, improving the SD card support and backup/restore flows, and addressing various UI issues and inconsistencies across the on-device UI and WebUI. The update also includes some new features like WiFi Access Point mode per profile and a new boot console screen, as well as improvements to the map rendering and message handling.

Please have a look at the filename, to download the correct variant for your device!

Important for SenseCap Indicator: There is a new RP2040 image, which is needed to support the new SD card features. Please make sure to use the correct image for your device when updating.

NO ONLINE UPDATE available right now - it would only download outdated image!

[v0.9.12.1]

Changed / Improved

  • Repeater Admin Menu (WebUI): Improved Device, Status, ACL, Neighbors, Regions.
  • Mgmt / Global: Firmware update uploader implemented. Take care about the Device-Type.
  • #184 — Light color scheme: clearer outdoor readability across the on-device UI.
  • WebUI WebSocket sync: Contacts and Mgmt / Log now stay subscribed in the browser background after the first full sync, so switching tabs does not repeatedly reload the full contacts list. Log and contacts updates use sequence checks with resync on gaps, and normal contact changes are sent as bounded deltas instead of whole-list broadcasts unless a full resync is required.
  • Mgmt / Lock and WebUI: added lock-screen PNG upload to /MCTerm/lockscreen.png with a visible ? limits hint. Uploads accept PNG only, require exact current display dimensions, reject files over 512 KiB, enable the picture background after a successful upload, and persist the selected path/color settings through the existing UI prefs flow.
  • Mgmt / Lock: lock-screen background selection is now None or a bounded PNG picture path, following the SenseCAP photo-demo model without keeping a large image buffer in RAM. The selected PNG must match the active lock-screen dimensions, is capped at 512 KiB, defaults to /MCTerm/lockscreen.png, and persists through Internal and SD prefs with WebUI parity. Lock-screen text color selection remains available (White, Blue, Green, Yellow, Orange, Red). Sample Pictures -> https://github.com/Seeed-Solution/SenseCAP_Indicator_ESP32/tree/main/examples/photo_demo/spiffs
  • #22 — SD Card support implemented for Backup/Data Storage (needs to be selected in Mgmt / Global -> Primary Disk).
  • #176 — Store all data primarily on SD Card. Mgmt / Backup
  • #177 — Backup and restore to/from SD Card.
  • #238 — Msgs / DM room separation: split room-server chats out of the normal DM list into a dedicated Rooms frame in both the on-device ui-modern Msgs screen and the WebUI, so user DMs and room-server conversations are no longer mixed together (#238).
  • #252 — Mgmt/Channels/Regions: show a distinct "Max regions reached" popup (instead of the misleading "Invalid or duplicate") when the user attempts to add a region beyond the maximum allowed count, both on-device and in the WebUI (#252). Mgmt/Channels/Regions: raise the maximum number of region scope definitions from 12 to 15 (#252).
  • #125 — Map tab: use each device marker border color for hop count while keeping the marker fill tied to the device type (#125).
  • #199 — Map tab: render 2-byte and 3-byte hash badges on two compact lines so multibyte node markers stay readable without widening as much (#199).
  • #196 — T-Deck Plus sounds: prioritized T-Deck I2S audio refills ahead of WebUI/SD-store work and deferred SD journal flushes until playback ends, eliminating the remaining preview stutter on hardware (#196).
  • #191 — Mgmt/Global: restore the Load key action to the default blue button styling for consistent readability (#191).
  • #192 — Mgmt/Global: make the SD key filename editable for Save/Load from the on-device UI while keeping the current path visible in Identity details and related copy flows (#192).
  • Mgmt/Channels: label scope lists Scopes (not Regions), without leading hash; message detail uses Scope.
  • WebUI Repeater Admin: some improvements are done, but WIP!
  • Msgs: channel scope, unread, and total shown as list badges.
  • Map tiles: Local Tiles and Network Tiles toggles (four combinations, device + WebUI); WebUI device search, map layers, popups, and local tile API.
  • Mgmt / DateTime: readjusted Texts!
  • Mgmt overview: UI, Light, Lock, Map, and Sound are separate pages (20 tiles); UI keeps brightness, display timeout, and zoom; Light and Lock hold blink/backlight and autolock settings formerly under UI.
  • Mgmt / UI and WebUI: display brightness is a 0–100% slider (not a 0–255 numeric field).
  • Mgmt / Light (T-Deck+): Keyboard Light slider (0–100%, default 50%) is independent of display brightness; persisted in Internal, SD prefs, and backup.
  • Mgmt / Light and WebUI: Blink Bright uses the same percent slider as display brightness (replaces numeric Set on device).

Added

  • Mgmt/WebUI WiFi Access Point mode per WiFi profile (MWP2): each profile stores AP/STA mode, STA SSID/password, and AP SSID/password; profile picker shows AP/STA tag; DHCP 192.168.4.1/24; max 3 AP clients.
  • BootConsole: New boot "console style" screen implemented.
  • #264 — implemented Lockscreen Image with selectable color of Text. More to come later!

Fixed

  • SenseCap Indicator TFT WebUI improvements.
  • Mgmt / Lock: corrected lock-screen text color interpretation so the Blue selection uses the actual blue display color instead of light blue, and added a matching WebUI color swatch/select background for the lock text color picker.
  • #141 — would be fixed with #203, #213.
  • #144 — MeshCore app / direct messages: keep app-side pending delivery waits conservative for ACK-tracked sends so flood-routed DMs are no longer reported failed before their ACK can return (#144).
  • #174 — T-Deck Plus UI blink: when Keyboard Blink or Display Blink is disabled, pending blink state is now cancelled both at notification time and in the runtime blink drivers, preventing random short display/keyboard flashes from queued message activity (#174).
  • #186 — T-Deck Plus keyboard: keep the hardware keyboard in byte-stream mode while draining input, using only idle-time modifier sampling for Alt+S and global Alt+L lock/unlock, restoring responsive backspace/text entry (after 0.9.12 introduced key/event lag) (#186).
  • #187 — Messages/WebUI: derive DM and channel composer counters from MeshCore's 160-byte message limit, the current node-name prefix, and the local mirrored-message buffers so device UI and WebUI match the real send/storage cap (#187).
  • #190 — T-Deck Plus keyboard: only cycle the on-screen SYM picker on a pure SYM tap/release, so held sym compose chords no longer retrigger the picker on each keypress (#190).
  • #194 — Mgmt/UI: remove the stray separator line above the Color Scheme row (#194).
  • #197 — Mgmt/CLI: stop truncating long local command replies in the on-device CLI transcript by wrapping them across multiple output rows (#197).
  • #198 — Mgmt/Channels: restore the visible Default Scope row so channel scope and delete taps target the intended channel instead of the row above (#198).
  • #202 — Messages: force an immediate redraw when entering message detail so hidden detail state cannot keep acting on a stale Msgs list frame (#202).
  • #203 — Clock jumps when receiving room or repeater-admin traffic (duplicate of #213; closed). See #213
  • #206 — Ack sound now plays when a pending DM becomes Delivered if its activated in Mgmt / Sound -> All Sounds + Ack.
  • #207 — Contacts/Discovered: unified node-type badge rendering so colors, borders, labels, and sizing match across both screens (#207).
  • #208 — Identity view: fixed public-key detail hold-to-copy so it no longer copies the private key when the public key is selected, and fixed detail scrolling so the SD key file rows remain reachable (#208).
  • #209 — Manual add contact: fixed the name-entry OK flow so a successful add closes cleanly instead of leaving a second OK press to trigger a spurious pubkey-first error (#209).
  • #210 — Mgmt/Global copy flow: fixed stale DM detail state leaking across touch tab switches and hijacking later long-press copy actions on other screens (#210).
  • #211 — Messages/DM detail: fix sent and received direct messages (#211).
  • #213 — Time sync: stop trusting room-server and repeater-admin traffic as RTC authorities, so room/repeater replies can no longer trigger large local clock jumps (#203, narrowed scope, see #213). Time sync (ui-modern): added a Sync from Msg toggle in Mgmt -> Date/Time (default Disabled) that gates whether received message timestamps are allowed to update the on-device RTC at all, and made the NTP Status row report No response whenever the clock is changed by manual edit or by a non-NTP message-driven sync, so the indicator no longer keeps claiming Synced after such overrides. WebUI mirrors the toggle in Settings -> Date/Time (#213).
  • #214 — Direct messages: honor Auto Retry and Auto Reset Path on ACK timeout, including resetting known routed paths before the final retry/failure instead of leaving stale multi-hop routes in place (#214).
  • #215 — In v0.9.12.1 the misplaced allowf/denyf flood controls are moved out of Mgmt/Channels/Regions; Repeater Admin got now the implementation for Regions (#215).
  • #219 — T-Deck Plus: make the trackball click consistently switch the display off from edit fields instead of activating the on-screen key cursor and inserting 1 (#219).
  • #222 — Repeater Admin: keep GUI-generated command replies out of the visible CLI transcript (#222).
  • #230 — Messages: align on-device channel transcript tap/hold hit-testing with the timestamp-sorted rendered rows and unread separator so Quick Reply echoes stay selectable as the visible message instead of opening a different hidden row (#230).
  • #233 — Discovered: shorten the status-bar sort hint so it fits (#233).
  • #242 — Map / advert path cache: receiving a zero-hop advert from a repeater no longer resets its map icon to a 1-byte ID. A zero-hop packet carries no hash-size information; the cached path_len (and therefore the hash badge) is now preserved whenever the existing entry already has hop info, in both the raw-RX and the decoded-advert update paths (#242).
  • #243 — Message detail / Sent timestamp: add a "Sent:" line to the message detail view showing the sender's embedded timestamp alongside the existing "Received:" line (device time when the packet arrived), for both the on-device UI and the WebUI. Allows users to compare the sender's claimed send time against the local receive time and diagnose clock discrepancies (#243).
  • #248 — Room server messages: fix the message body being rendered in the sender-name field when the room server uses signed-plain delivery (i.e., the actual sender was resolved from the signing key prefix) (#248).
  • #251 — Map: stop map badge text from wrapping to the opposite screen edge or overflowing outside the badge border when a node marker is partially scrolled off-screen; badges whose box clips the map viewport boundary are now suppressed cleanly (#251).
  • #256 — Mgmt/Messages quick replies: clearing Custom QuickR1 or Custom QuickR2 now persists across reboot instead of being treated as missing and restored to the factory default; legacy prefs that do not contain quick-reply fields still keep the defaults (#256).
  • #257 — DM and room threads no longer disappear from the Msgs list while the contact still exists (#257).
  • Mgmt/Channels: channel scope assignment Mgmt / Channels -> Scopes.
  • Mgmt / Log: RX and TX raw packet log (48-entry ring); path/hash metadata on device and WebUI.
  • Mgmt / UI (device): brightness slider uses the full row width;
  • Mgmt / UI (device): changing display brightness no longer changes T-Deck keyboard backlight; keyboard level follows Keyboard Light on Mgmt / Light only.
  • Mgmt / Light and UI (device): percent sliders no longer change while vertically scrolling the list.
  • Mgmt / Global Device ID and map hash badges: width follows Path Hash Mode (1/2/3 bytes); remote markers prefer advert path metadata (device + WebUI).

Questions

  • #205 — Contact Colors: contact and sender name colors are random identity colors, not presence or delivery-state indicators (#205).