99 Commits
Author SHA1 Message Date
Kaj SchittecatandClaude Opus 5 df99548a10 touch: text sizes on the M9, landscape on the T-Display P4
The M9 gets the V4-R8's text-size presets verbatim, because it is the same
240x320 panel and two tables for one screen size is two things to keep in step.
Fonts grow, geometry does not: rows, cards and controls keep their dimensions
and stay reachable, which is why the labels say "Large text" rather than a
percentage.

⚠️ The migration matters more than the feature. ui_scale has been in the saved
blob since v8 and every M9 carries the large-screen default of 1 that this board
never applied, so exposing the selector without resetting it once would bring
every M9 back from the update rendering Large text nobody chose. Prefs go to v65
with that one-time reset, which is the same correction v63 had to make for the
V4-R8 after it happened to them.

The P4 can run landscape. Its MIPI-DSI panel has no MADCTL to rotate, so LVGL
rotates each flushed area into panel coordinates, exactly as the Tanmatsu
already does on the same silicon; the difference is that the P4 reads the saved
preference instead of pinning one rotation. Portrait stays the default and the
existing Orientation button does the rest.

The rotated branch of the P4 touch mapping had never run: it was carried "for
parity" while the panel was portrait-only, and it clamped rotated coordinates
against the portrait bounds, so every landscape touch past x=284 would have
pinned to the screen edge. It clamps against the swapped space now.

Landscape is UNTESTED on hardware: Kaj did not have his P4 with him, and it
ships that way deliberately, with the release notes saying so and asking P4
owners to report smoothness and touch accuracy near the edges.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 13:58:31 +02:00
Kaj SchittecatandClaude Opus 5 cf0c8da0ff touch: the report form swallowed taps meant for it, and its name was odd
Two things Kaj hit on a T-Deck within a minute of the first flash.

Taps that missed a checkbox went through the card to whatever sat behind the
popup. The card had LV_OBJ_FLAG_CLICKABLE cleared, copied from the version
picker, and a non-clickable object is invisible to hit-testing, so the tap
carried on to the page underneath. The card is clickable again, and tap-outside
now compares the point against the card's own area rather than assuming nothing
inside it can reach the backdrop. Events do not bubble in LVGL 8 unless asked,
so the clear was never needed for its stated purpose.

The card is also explicitly scrollable and capped to the panel height. Eleven
rows do not fit 240 px, and a card taller than its backdrop puts its own
controls outside the area that catches taps.

"Report this build" reads like reporting a fault with it, which is the opposite
of what the button is for. It is "Send a test report" now, "Send another test
report" once you have, and the form is titled "Test report: <tag>". Renamed in
the docs, the site, the issue template and the tracking-issue text too, so the
instruction people are given matches the button they are looking for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 13:39:58 +02:00
Kaj SchittecatandClaude Opus 5 96a7e4a9b4 release: draft notes for beta_85
Not cut. The slice is staged and every target builds; this is the changelog for
whenever it goes out. It leads with reporting from the device, then the T-Deck
Max OTA fix and the instruction that a Max on beta_84 must be flashed over USB
rather than from the device, because publishing a newer build is what exposes
that bug.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 13:22:01 +02:00
Kaj SchittecatandClaude Opus 5 e084b1d3bf release: cumulative stable notes for beta_83 (beta_66..83)
The promote reused the single-tag notes, so the stable feed and the GitHub
body only covered beta_83 itself. This is the curated beta_66..83 delta,
136 notes: per-build framing and the still-open lists dropped, supersessions
collapsed to what actually ships.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 15:14:57 +02:00
Kaj SchittecatandClaude Opus 5 5d5f7bc638 release: beta_84 notes, and let a promotion skip boards it predates
A board added mid-cycle (the T-Deck Max) has no images in an older tag, so
promoting that tag copied a file that does not exist and, with set -e, took
the whole promotion down. It is skipped with a note now, and the flasher
manifest generator leaves out any board with no image in the channel it is
writing, rather than handing the flasher a 404.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 14:39:22 +02:00
Kaj SchittecatandClaude Opus 5 6fe6b9f063 touch: beta_83, USB Files (files.wadamesh.com over the USB cable)
A built-in USB Files app (T-Deck and Heltec V4 for now) lets the page at
files.wadamesh.com browse, upload, download, rename and delete files on the
SD card, internal storage and the map tiles over Web Serial. File level, not
USB mass storage: the device keeps its filesystems mounted, the radio keeps
running, and the firmware enforces what may change. Live data (identity,
contacts, settings, history; /meshcomod on the card) is download-only.

- UsbFilesProtocol.h: framed messages (E7 5A, CRC32), a resyncing parser,
  path checks and the access policy; host tests in test/.
- UsbFilesSession: one request at a time (both Arduino USB serial drivers
  drop bytes when their RX queue is full), RX queue sized per session, SD
  data through a DMA-capable bounce buffer, FatFs listings with sizes, a
  beacon so the page never talks first, SD Scan's malware verdict per file.
- The companion link and MyMesh's console step off USB while it runs.
- Website: labelled side buttons, a USB Files button and card; the
  files.wadamesh.com page, vhost and deploy script.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-19 11:52:34 +02:00
Kaj SchittecatandClaude Opus 5 803a4ebfc7 release: beta_82 notes
SD Scan for the ThinkNode M9 SD-card worm, the firmware calls behind it,
and the startup warning.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 13:34:09 +02:00
Kaj SchittecatandClaude Opus 5 77f0a8893a release: beta_81 notes
Bluetooth keyboards on every S3 board, PR #523 from oumike, and the web
unlock / console escape / paste key / M9 update notice fixes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 21:53:05 +02:00
Kaj SchittecatandClaude Opus 5 e98bfceba7 touch: beta_80 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 12:24:44 +02:00
Kaj SchittecatandClaude Opus 5 16d09696ca touch: beta_79 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 13:06:36 +02:00
Kaj Schittecat ba1667b4d1 touch: beta_78 release notes 2026-09-07 16:43:11 +02:00
Kaj Schittecat 8e94e25036 beta_77 notes: add the download-mode change 2026-09-06 18:16:48 +02:00
Kaj SchittecatandClaude Opus 5 2d6536af7a beta_77 release notes, ready for the slice
Written now so cutting it is a build and a publish rather than a writing session.
Not tagged and not published.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-06 14:17:54 +02:00
Kaj SchittecatandClaude Opus 5 9b4f8cfaa0 touch: beta_76 release notes
Day/Night themes, the Seeed Wio Tracker L2, the M9 panel actually sleeping,
P4 Wi-Fi honouring its own setting, three Lua SDK fixes, and reboot notices
that are visible.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 10:50:53 +02:00
Kaj SchittecatandClaude Opus 5 43c0a9ed70 touch: beta_75 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 12:43:07 +02:00
Kaj SchittecatandClaude Opus 5 b877e43d5e touch: beta_74 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 18:49:27 +02:00
Kaj SchittecatandClaude Opus 5 708f4434f5 touch: beta_73 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 10:32:19 +02:00
Kaj SchittecatandClaude Opus 5 2d94be4511 touch: beta_72 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 22:06:03 +02:00
Kaj SchittecatandClaude Opus 5 11d826bdfe touch: beta_71 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 13:52:38 +02:00
Kaj SchittecatandClaude Opus 5 867030ab58 touch: beta_70 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-27 10:55:20 +02:00
Kaj SchittecatandClaude Opus 5 9343e27bba touch: beta_69 release notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 23:42:43 +02:00
Kaj SchittecatandClaude Opus 5 b15d422bdc touch: beta_68 — Lua SDK gains the map, lists, packet delivery and discovery
The four capabilities that kept third-party apps a sketch of a built-in one:

* wada.map      the firmware's own tiles, projection and cache inside an app
                page, with its own capped pool so it never evicts the Map tab's
* wada.ui.list  the missing "pick one of N" widget; rows are real buttons, so
                keyboard and trackball nav walk them for free
* on_packet     each frame delivered once instead of polling a 16-deep ring,
                which sampled rather than observed
* wada.mesh.discover  the active zero-hop probe, behind its own permission
                because it spends every neighbour's airtime, not just ours

Plus the surface those need to be useful: packet identity reported only where
the frame actually carries it, exact micro-degree coordinates (Lua is built
LUA_32BITS, so its floats were quietly costing a metre), altitude and satellite
time, wada.geo, wada.ui.input, named and one-shot timers, http_post, windowed
fs.read, and wada.sys.env on a hardware gate rather than the memory one.

Fixes:
* Both ESP32-P4 targets could not link. g_wifi_last_disc_reason was defined in
  src/main.cpp, which the IDF builds never compile, so all nine S3 envs stayed
  green while Tanmatsu and T-Display P4 were dead.
* Map zoom level was invisible in +/- buttons mode; the readout was hidden with
  the slider it was anchored to.
* Hungarian and Dutch held each other's "No SD card" translation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 21:50:01 +02:00
Kaj SchittecatandClaude Opus 5 4ab3ab98a4 credits: istvan and pisti87 are one person, and stop @-mentioning chat handles
Two corrections from Kaj, both mine.

istvan is pisti87. I had been thanking them as two people across beta_64 and the
beta_65 stable notes, which splits one person's contribution in half and reads as
if a second reporter existed. Merged into pisti87 everywhere: both notes files,
the source comment that cited the report, both published GitHub bodies, and the
on-device stable notes, which are generated from the cumulative notes file and
had to be regenerated and redeployed.

And in beta_67 I turned Discord names into GitHub @-mentions. "@Jade" resolves to
an unrelated GitHub account, so a stranger got tagged on our release, and the
handle credited was not the person who did the work. The names stay, as plain
text, and the @ is gone.

The rule I should have been following: an @-mention is only safe when the handle
came from GitHub itself, i.e. the author of a PR, issue or commit. @cvhviz,
@pisti87, @oumike, @wb6zsu, @Yoss101 all came from GitHub and are fine. A name
seen in chat is a display name, not a handle, and mapping one to the other is a
guess that lands on somebody real.

Not rewritten: commit messages already pushed that mention istvan. History stays
as it is; the user-facing credits are what matter and those are corrected.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 18:43:57 +02:00
Kaj SchittecatandClaude Opus 5 5e33e341cb release: beta_67 notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 18:04:58 +02:00
Kaj SchittecatandClaude Opus 5 3499ae5b2e release: beta_66 notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 16:28:49 +02:00
Kaj SchittecatandClaude Opus 5 193e09e1e4 release: cumulative stable notes for beta_65 (covers beta_64..65)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 16:24:27 +02:00
Kaj SchittecatandClaude Opus 5 de45b1b158 release: beta_65 notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 19:22:47 +02:00
Kaj SchittecatandClaude Opus 5 2effe9497a release: beta_64 notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 17:07:14 +02:00
Kaj SchittecatandClaude Opus 5 cbdf809932 release: cumulative stable notes for beta_63 (covers beta_51..63)
Curated rather than concatenated: beta_52's test-build warnings are dropped,
and two statements that later changed are corrected to what actually ships —
the save chip is text not a floppy icon (#263), and About reports v1.17.4-touch
not v1.17.0. The upgrade-affecting items lead: the one-way chat-history format
change, the 250-message default cap, and the region-preset TX power fix.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 11:36:52 +02:00
Kaj SchittecatandClaude Opus 5 f78d0e379d release: beta_63 notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 12:57:55 +02:00
Kaj SchittecatandClaude Opus 5 293830a172 release: beta_62 notes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 10:12:10 +02:00
Kaj SchittecatandClaude Opus 5 d22c200932 touch: fetch-deps integrity guard + beta_61 note for the P4 receive fix
The vendored core is gitignored and fetch-deps rm -rf's it, so a hand-edit
there dies with no history. That cost us the esp-nimble-cpp 2.x port and then
the P4's polled receive. Both live in the core now; fetch-deps verifies they
survived the copy and fails loudly if not.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 12:40:15 +02:00
Kaj SchittecatandClaude Opus 5 335a64c118 touch: core-v1.17.1 (beta_60 boot loop + unreachable contacts) + release firmware-data gate
Core (core-v1.17.1, meshcomod 5406093): 1.17 reserved MAX_ANON_CONTACTS slots
at the head of contacts[], which broke two things in beta_60 —

- resetContacts() claimed those slots while the lazily-allocated PSRAM table was
  still NULL, so the new bootstrapRTCfromContacts() NULL-deref'd at boot on any
  device whose contact store loaded nothing: fresh install, erase-flash, or SD
  not mounted yet (#249). Boards with saved contacts booted fine, which is how
  it passed bench testing.
- getContactByIdx() stayed raw while getNumContacts() excludes the reserved
  slots, so every pairing of the two — contact list, action sheets, phone-app
  sync, getContactForSave — read empty slots and could not reach the newest 8
  real contacts. A just-added contact was invisible and its action-sheet
  operations resolved to a blank slot (#252).

Fork side:
- loadContacts() skips blank records, clearing the placeholder contacts beta_60
  wrote into the contacts file (the next save drops them permanently).
- Chat threads follow a peer's rename. The thread is matched by key but its name
  was never updated, while inbound messages are filed by sender name — so the
  first message after a rename created a duplicate thread (#252).
- release.sh derives FIRMWARE_VERSION / build date / core version from the tag
  and the pinned core, keeps the in-tree dev default in step, and ABORTS the
  release if any staged image does not embed its own tag. beta_60 shipped
  reporting v1.16.0-touch because that value was hand-maintained.

All 8 S3 envs build green on core-v1.17.1.

Reported-by: Pierre747, rustinmyeye, myshoeisonfire

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 08:20:00 +02:00
Kaj SchittecatandClaude Fable 5 8cd14d2aea touch: beta_60 — MeshCore 1.17 rebase
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 18:09:55 +02:00
Kaj SchittecatandClaude Opus 4.8 dbff43dbd7 beta_59 prep: language files v8, the SDK docs page, and device-status corrections
The audit found three keys the Store work added or renamed since v7 -- Store,
the out-of-memory message and the Languages hint -- untranslated in all 13
languages. Filled, using each language's own word for the Use button so the
hint matches the control it points at, and bumped the files to v8. Every
language is back to full coverage at 856 keys.

New deploy/site/sdk.html: the wada.* reference. The beta ships a public API and
had no user-facing documentation for it, so nobody outside the repo could write
an app. Covers the lifecycle, all seven tables, the app format, side-loading and
how to publish, plus the two constraints that surprise people -- the mesh is
read-only in v1 and http_get is plain HTTP because TLS does not fit in the heap
left after Wi-Fi associates.

Site device list: the Attaky Core and the T-Display P4 are fully supported now
(Kaj's call), so their not-hardware-verified caveats are gone. Dropped the "one
of the two primary development boards" wording, which stopped being true once
the P4 joined the test loop. The terms section named only the T-Deck and Heltec
V4 as flashable when the flasher offers ten boards; it now points at the list on
the page instead of going stale again.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-05 00:37:22 +02:00
Kaj SchittecatandClaude Opus 4.8 3708eb1811 touch: beta_58 — beta_57 upgrade-bug repair (#229/#230), retry opt-in, Hungarian (#227), lock wallpaper (#228), P4 backups (#231)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-04 11:00:45 +02:00
Kaj SchittecatandClaude Opus 4.8 84378c06b9 touch: beta_57 notes rewritten to the house style (fuller why-focused prose)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 18:02:31 +02:00
Kaj SchittecatandClaude Opus 4.8 3c0f454d32 touch: beta_57 — community drop: auto-retry (#207), Pager TCXO (#209), SD-store fixes (#211/#212/#213), Discover emoji + SD format fixes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 17:10:10 +02:00
Kaj SchittecatandClaude Opus 4.8 a68ea66805 touch: beta_56 — duty-cycle preset fix, Pager SD storage, issue-sweep batch
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-01 12:28:58 +02:00
Kaj SchittecatandClaude Opus 4.8 f0fc356a05 touch: beta_55 — prefs crash-safety + Pager UI sizes (PixPMusic), SD clock renegotiation, R8 buzzer
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-01 11:39:34 +02:00
Kaj SchittecatandClaude Opus 4.8 d52fcc47a5 touch: beta_54 — P4 screen-flash + GPS fixes, Romanian (jcyrio), V4-R8 landscape rescue
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-31 17:45:18 +02:00
Kaj SchittecatandClaude Opus 4.8 1863ebdd2c touch: beta_53 release notes
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 17:39:18 +02:00
Kaj Schittecat 8fff2811ed release-notes: beta_52 (RISKY - #179 storage rework, needs testing) 2026-07-29 17:08:50 +02:00
Kaj Schittecat 0a51e7e504 release-notes: beta_51 2026-07-29 14:32:47 +02:00
Kaj Schittecat 2b554940af release-notes: beta_50 2026-07-22 22:48:39 +02:00
Kaj SchittecatandClaude Opus 4.8 4e6a9e0108 touch: beta_49 - T-Display P4 fixes (exit traps, screen timeout, UI scale, GPS, control center)
P4-focused beta. Non-P4 boards only pick up minor shared exit-trap code, nothing user-facing.

- Snake + full-screen apps (Monitor/Spectrum/Discover/Web mirror/Advert) exit on status-bar tap
- Screen timeout / standby / burn-in dimming wired for the AMOLED (setBrightness path)
- UI scale pinned to 100% on the P4 (text overflow above 100%)
- No hard-lock on screen-off (P4 has no lock screen yet)
- GPS: L76K detect at 9600 baud, skip boot-detect race, 4096 RX buffer
- Control center dropdown taller on tall screens so the GPS line clears the toggle buttons
- P4 LCD SKU: HI8561 backlight PWM on GPIO51 (fixes the black screen)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:34:17 +02:00
Kaj SchittecatandClaude Opus 4.8 5e4f9a221e touch: beta_48 fixes - crash, boot hang, MQTT save, message times, keyboard, more
Chat typing crash (#98), SD boot hang after update (#142, #148), MQTT
settings not saving (#128), wrong message times (#100, #152), Dutch keys
1 and ! typing ij (#144, #164), compose length limit (#119), clipboard
truncation (#120), quick messages scroll (#151), Join screen name glyph
(#116), Tanmatsu emoji picker nav (#141).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 11:24:31 +02:00
Kaj SchittecatandClaude Opus 4.8 99423e5bf8 touch: beta_47 — Discover app (find/list/map nearby nodes + wardriving), Attaky release wiring, P4 LCD
- New Discover app: active NODE_DISCOVER sweep -> signal-ranked nearby list, tap-to-add-contact, GPS wardriving log (SD CSV) + signal-coloured coverage overlay on the map. Board-agnostic.
- T-Display P4 TFT-LCD (HI8561) variant support (WADA_P4_LCD build; AMOLED bin untouched).
- Wire the Attaky Core board (#158, @attakygit) into the release matrix + web flasher.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 17:45:05 +02:00
Kaj SchittecatandClaude Opus 4.8 22a08c6df6 release-notes: beta_45 -> cumulative stable changelog (since beta_40)
Rewrites the beta_45 notes as the full delta since the last stable (beta_40)
for the stable promotion: browser remote control (VNC/REMOTE + web app), the
on-device Web browser + tappable chat links, three new boards (T-LoRa Pager,
T-Display P4, V4-R8), and fixes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 23:02:43 +02:00
041dd60b8d touch: beta_46 — control-center redesign, Do Not Disturb, contact safety + board fixes
- Contact-loss fix (microSD devices): atomic temp+swap saveContacts, unified robust
  boot SD-mount ladder, and a storage-truth line in the Store-on-SD setting.
- Heltec V4-R8: route MISO for the shared FSPI bus so the microSD mounts; wake-from-sleep
  freeze fixed (panel sleep goes through LovyanGFX's own bus, not the HSPI shim).
- Do Not Disturb (originally PR #156 by Tesso Codemonkey / @codemonkeybr): scheduled
  sound-silencing window in Settings > Sound + a status-bar bell.
- Control-center redesign: round icon-only chips that spread to fill each row (T-Deck 2x4,
  V4 portrait 2 rows), frosted-glass panel, real lock glyph + dynamic bell/bell-slash DND
  chip + keyboard icon+word chip (new cc_icons_16 FontAwesome font), per-chip confirmation
  toasts, press-grow clip fix, and a V4-portrait status-bar BLE/clock overlap fix.
- LilyGo T-Pager: map tile cache falls back to the microSD under the launcher (fixes the
  "storage error / reflash the tiles partition" dead-end).

Co-Authored-By: Tesso Codemonkey <798026+codemonkeybr@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 22:30:05 +02:00