Commit Graph
378 Commits
Author SHA1 Message Date
Kaj SchittecatandClaude Opus 5.5 53d17d0b0f chore: Mesh America catalog uses the cumulative stable notes for beta_101
The catalog only lists stable builds, but it read the test-build notes
("Test build ... stable stays beta_85"). Prefer <tag>-stable.txt when a
promote wrote one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 14:43:28 +01:00
Kaj Schittecat a4f2a2c8c2 chore: refresh Mesh America catalog for beta_101 2026-10-31 14:21:11 +01:00
Kaj SchittecatandClaude Opus 5.5 e119ff8a8d lang: placeholder rows for the strings #753 adds
49 new TR() keys (the Pager key help, Quiet now, Shift + knob level pill,
emoji and quick-reply hints, lock and theme notes), appended as key<TAB>key
to the 14 files #755 did not translate, and the 3 invariant ones (Backspace,
N, M C H A S) to de.lang, only where the key is absent. i18n-audit is clean;
i18n_builtin.h regenerated: unchanged (placeholders are not baked).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 10:30:48 +01:00
Kaj SchittecatandClaude Opus 5.5 b308c3311e Merge #755: German strings for the T-LoRa Pager (MrYoshii)
de.lang conflict: main's rows since the PR's base (picture dimming, the 19
missing rows) and the PR's German rows unioned, one row per key, the later
(translated) row kept. Header stays at main's ver: 31. i18n_builtin.h
regenerated with scripts/build/gen-lang-builtin.py; only the German table
changes (1334 rows).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 10:27:58 +01:00
Kaj SchittecatandClaude Opus 5.5 f6bcb445f8 apps: language store v31 (22 new rows: settings, map and dimming strings)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 10:18:37 +01:00
Kaj SchittecatandClaude Opus 5.5 4a526b098c Merge wip/keypad-2026-10-28: M9 keypad navigation batch (#764, #765, telemetry, page stepping, key docs)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 10:17:10 +01:00
Kaj SchittecatandClaude Opus 5.5 c60c3be4ca site: docs for the ThinkNode M9, T-Deck keyboard and Tanmatsu keys
The Pager had its own section; the other keyboard boards did not. Three new
sections next to it, written from the key handling in UITask.cpp:
- ThinkNode M9: every function key (MSG now also opens Contacts), the
  triangle key as the hold / right-click action, Space to lock, OK twice or
  held to unlock, the message walk and the jump arrow in a conversation.
- T-Deck keyboard: Space lock, the popup-dismiss keys, double Space for the
  next layout, and Keyboard navigation's default letters (W Z A D S Q F C,
  E R T U I for the tabs).
- Tanmatsu: the coloured keys on a screen and in a conversation, holding the
  green key or Vol+ for the control panel, the red X and its hold, Vol-, Ctrl
  with the arrows, the extra navigation letters.
The cursor paragraph says Up and Down now scroll text and charts into view.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 10:14:46 +01:00
Kaj Schittecat add2104012 Merge wip/locale-2026-10-28: 25 more time zones, GPS wake and SNTP clock fixes (M9 half hour), size-matched accented letters, 19 missing language rows, Peers without rooms
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	deploy/apps/lang/bg.lang
#	deploy/apps/lang/cs.lang
#	deploy/apps/lang/de.lang
#	deploy/apps/lang/el.lang
#	deploy/apps/lang/es.lang
#	deploy/apps/lang/fr.lang
#	deploy/apps/lang/hu.lang
#	deploy/apps/lang/it.lang
#	deploy/apps/lang/nl.lang
#	deploy/apps/lang/pl.lang
#	deploy/apps/lang/pt-br.lang
#	deploy/apps/lang/ro.lang
#	deploy/apps/lang/ru.lang
#	deploy/apps/lang/sr.lang
#	deploy/apps/lang/uk.lang
#	src/ui-touch/i18n_builtin.h
2026-10-28 08:49:39 +01:00
Kaj SchittecatandClaude Opus 5.5 879a452300 lang: rows for every TR() key the files were missing, "Connections" among them
The Settings group heading "Connections" had no row in any language, so it
stayed English (CONNECTIONS above Polish rows). The headings come from
kSettingsGroups through `for (const SettingsGroupDef& g : kSettingsGroups)
... TR(g.title)`, and i18n-audit.py's range-for rule only recognised
`for (auto& x : table)`, so the key never reached the audit. The rule now
takes any element type.

The audit then lists 18 more keys added since the last pass (the old-contact
purge, vibration, browser-build notes, the web location prompt). All 19 get
a row in all 15 files: real translations in de, nl, fr, es, it, pt-br and pl,
English placeholders elsewhere. i18n_builtin.h regenerated (V4 +3.9 KB).
i18n-audit.py: every file ok.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:47:50 +01:00
Kaj SchittecatandClaude Opus 5.5 04eb0ffcea Merge wip/mapwall-2026-10-28: offline map fills missing tiles from a scaled parent, adjustable picture and wallpaper dimming
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:36:57 +01:00
Kaj SchittecatandClaude Opus 5.5 841258284a touch(theme): adjustable picture dimming for the background and the lock wallpaper
A background picture was always toned down by a fixed amount (night: x107/256,
then every pixel held to a luma of 64; day: lifted 60% toward white, held up to
200), and the lock-screen wallpaper always sat under a black veil of 105/255.
On a dark theme that left a picture barely visible. Both now take a step: Off,
Light, Medium or Strong.

- Settings > Theme > Background: "Picture dimming" under the picture's button,
  shown while Image is picked; part of the page's pending choices, saved by
  Apply and restart (bgImageFit applies it once at boot).
- Settings > Lock screen > Look: "Wallpaper dimming", applies the next time the
  lock screen shows (veil 0 / 40 / 72 / 105).

Strong is the default and an absent key reads as Strong, so nothing changes for
anyone until they pick a step: PictureDim.h holds the per-pixel step, and
test/test_picture_dim.cpp checks Strong against the old formula on 281k
samples, plus range, ordering and the per-step readability bounds. New keys
bg_dim and lock_dim are standalone uchar keys in the settings backup list.
Three new strings, rows in every .lang, i18n_builtin.h regenerated.
V4 (no picture option there): +1624 B flash, the string table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:27:17 +01:00
Kaj SchittecatandClaude Opus 5.5 337dba4196 touch: USB Files on the T-Deck Pro and Max, paced for e-paper
The Pro family was left out of USB Files from the start because e-paper
refresh during a transfer was untested. They run the T-Deck's serial driver
(ARDUINO_USB_CDC_ON_BOOT with HW-CDC), the one USB Files is proven on, so the
open question was the panel. Two things kept it refreshing during a transfer,
and every update blocks the loop that also serves the transfer for ~0.65 s:

- the USB Files screen set its status line and bar every 300 ms tick; on
  e-paper the bar now moves in quarters, nothing repaints more than once every
  3 s while bytes move, and a change of state shows at once (UsbFilesPaint.h,
  host-tested). LCD boards repaint every tick as before.
- the status bar's SD activity light, two panel updates per 180 ms blink for
  every card write. It stays off on e-paper (CAP_EPAPER).

With that, CAP_USB_FILES covers the Pro and Max, the session reports them by
name, and files.wadamesh.com lists them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:20:19 +01:00
Kaj SchittecatandClaude Opus 5.5 1ee32105de touch(clock): Central Africa and 24 more zones, GPS wake no longer sets a stale time, every SNTP sync reaches the clock
Discord (gadgeteerza, ThinkNode M9, beta_100): no Central Africa zone, the
clock often half an hour behind on a Custom UTC offset, and "Sync clock from
system" with Wi-Fi on not always setting it.

Zones: the saved setting is an index into the zone table, and Custom used to
be "one past the list", so appending zones would have moved it. Custom now
keeps its id (16) forever and the new zones (Central/South/East/West Africa,
Egypt, Eastern/Western Europe, Moscow, Turkey, Arabia, Iran, Gulf, Pakistan,
Nepal, Bangladesh, Indochina, Singapore, Perth, Korea, Adelaide, Brisbane,
New Zealand, Argentina, Mexico City, Newfoundland) sit after it. The picker
shows its own west-to-east order and opens on the current zone.

Half an hour behind: not the offset. WadaNmeaLocationProvider::begin() kept
the parser's pre-rest sentence, so after a GPS saver rest the first loop pass
saw a "valid" fix, the 30-minute re-sync was due, and the clock was set to
the moment the receiver went to rest. begin() now clears the parser, and
UITask::setGpsPower(true) calls syncTime() so the core provider (V4 and
others) gets the same. test_gps_time_sync runs the real provider against a
receiver sending true UTC: the pre-fix provider set the clock 1801 s behind
after a 30-minute rest; now every set is within 1 s.

Sync from system: on the M9 the system clock is the device clock, so the
button copied a clock onto itself. And the Wi-Fi loop wrote only the FIRST
SNTP result into the mesh clock: SNTP's hourly re-syncs set the system clock
only, the PCF8563 kept its old value, and the hourly chip resync (#583)
pulled the clock back to it. Every completed sync is now written through
(SntpClockPush.h, test_sntp_clock_push), and the button with Wi-Fi up
restarts SNTP and says "Clock synced" when the answer lands.

test_time_zones: the legacy ids keep their zones, every zone's offset in
January/July/October, Egypt's DST edges, and all 65536 saved
(tz_zone, time_offs) byte pairs through the exact prefs path to localtime().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:19:39 +01:00
JoshandClaude Opus 5.5 0ad5c90fb4 i18n(de): translate the T-LoRa Pager strings
German rows for the strings the Pager work added: vibration settings, the
battery gauge lines in the popup, chart, lock screen and screensaver, charge
limits, battery care and the low-battery warnings, the battery pack capacity,
the motion settings, the shortcuts and key help, the ship-mode power-off
notice, the knob hint in the emoji picker, the lock and battery settings
notes. Also translates two rows that still carried the English text ("Sound is
off", "Do Not Disturb is on").

The English placeholder rows main appended for #748 to #751 are replaced in
place (the last row wins), the new ones are appended, and the file's version is
left as it is. i18n_builtin.h regenerated with scripts/build/gen-lang-builtin.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Josh <8422439+MrYoshii@users.noreply.github.com>
2026-10-26 16:35:53 +01:00
Kaj SchittecatandClaude Opus 5.5 95a9481589 touch: beta_100 - release notes, language store v30 (Polish)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 15:04:51 +01:00
Kaj SchittecatandClaude Opus 5.5 a662ed1e7f site: WADAMESH-TAK section, and a phone menu with every page
The home page gets a WADAMESH-TAK section after the install options: what the
Cascadia Mesh build adds (MediaMesh, Team, OTP messenger, detection, Sound
link, the MeshCore Open TAK app), with its flasher, user guide and source, and
a quick link in the icon rail. The question in the FAQ now points to it.

On a phone (760 px and narrower) one Menu button replaces the row of
unlabelled icons on the home page and the Home link in the other pages' top
bars: a sheet with every page and link, named and described, plus the light
or dark switch. menu.js holds the one list for all pages; the generated
changelog and apps pages include it from their generators. Wider screens are
unchanged. The Tanmatsu page's top bar said Lua SDK.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:53:00 +01:00
Kaj SchittecatandClaude Opus 5.5 01f4a3bfb7 site: the questions name WADAMESH-TAK (Cascadia Mesh), with MediaMesh as one of its features
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:44:39 +01:00
Kaj SchittecatandClaude Opus 5.5 e407ef9ca9 site: Space Invaders 1.1 under Games on the apps page; local previews stay on http
The apps page was generated before #729 landed and had no site entry for the
game, so it showed v1.0 under Tools. The https redirect on the home page and
the flasher now skips localhost, so a local preview of the site opens
(Web Serial works on http://localhost too).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:41:39 +01:00
Kaj Schittecat 1afa19a35e Merge Pager PRs #748-#752 (MrYoshii): vibration, charger + fuel gauge, ship mode, BHI260AP motion, lock-screen wallpaper
Reviewed with follow-ups: shared vibrate key with #730, CAP_CST_BATT_NOTE
(Pager only), backup key cap 192, host tests against fake chips.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	deploy/apps/lang/bg.lang
#	deploy/apps/lang/cs.lang
#	deploy/apps/lang/de.lang
#	deploy/apps/lang/el.lang
#	deploy/apps/lang/es.lang
#	deploy/apps/lang/fr.lang
#	deploy/apps/lang/hu.lang
#	deploy/apps/lang/it.lang
#	deploy/apps/lang/nl.lang
#	deploy/apps/lang/pl.lang
#	deploy/apps/lang/pt-br.lang
#	deploy/apps/lang/ro.lang
#	deploy/apps/lang/ru.lang
#	deploy/apps/lang/sr.lang
#	deploy/apps/lang/uk.lang
#	scripts/run-host-tests.sh
2026-10-26 14:19:25 +01:00
Kaj SchittecatandClaude Opus 5.5 7fb164a0e5 lang: placeholder rows for the strings #748-#751 add
73 new TR() keys (vibration, charger and gauge, battery care, low battery,
motion settings, ship-mode power-off), appended as key<TAB>key to all 15
.lang files so translators see them; English until translated. Appended at
the end and only where the key is absent, so no existing translation is
shadowed. i18n_builtin.h regenerated: unchanged (placeholders are not baked).
The 17 keys i18n-audit already reported missing on main are left as they were.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:09:22 +01:00
Kaj Schittecat a341dc759d Merge PR #759 (kremers): PMTiles raster archives on the SD card, with zoom limits
Reviewed with follow-ups: CAP_MAP_PMTILES (off on the Tanmatsu), bounded
directories, uncompressed directories accepted, one log per bad archive, the
Map file row only with SD tiles on, host test with generated archives.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	deploy/apps/lang/bg.lang
#	deploy/apps/lang/cs.lang
#	deploy/apps/lang/de.lang
#	deploy/apps/lang/el.lang
#	deploy/apps/lang/es.lang
#	deploy/apps/lang/fr.lang
#	deploy/apps/lang/hu.lang
#	deploy/apps/lang/it.lang
#	deploy/apps/lang/nl.lang
#	deploy/apps/lang/pl.lang
#	deploy/apps/lang/pt-br.lang
#	deploy/apps/lang/ro.lang
#	deploy/apps/lang/ru.lang
#	deploy/apps/lang/sr.lang
#	deploy/apps/lang/uk.lang
#	src/ui-touch/i18n_builtin.h
2026-10-26 14:05:45 +01:00
Kaj SchittecatandClaude Opus 5.5 0074940d9d lang: rows for the PMTiles map picker strings (#759)
The nine new strings of @kremers' Map file picker and zoom limit had no rows in
the .lang files. nl, de, fr, es, it and pt-br are translated, the other
languages carry the English text until a translator picks them up.
i18n_builtin.h regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:57:49 +01:00
Kaj Schittecat 2f47c9bc93 Merge wip/backup-2026-10-26: #734 SD bin download, #708 P4 SD after Launcher + honest restore, #692 Indicator map storage
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	src/ui-touch/i18n_builtin.h
2026-10-26 13:57:20 +01:00
Kaj SchittecatandClaude Opus 5.5 dcdd72aab1 touch: Indicator map says it has no tile storage, not "reflash the tiles partition" (#692)
The SenseCAP Indicator's partition table has no tiles partition by design,
and its microSD slot is wired to the RP2040 co-processor, which this build
does not drive. The map fell through to the generic "Map storage error.
Reflash the tiles partition." advice, which no reflash can satisfy.

New CAP_TILE_STORAGE (default 1, 0 on the Indicator) picks an honest
message instead. New string in all 15 .lang files (de, es, fr, nl
translated).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:49:12 +01:00
Kaj SchittecatandClaude Opus 5.5 a57d1f2057 touch: screensaver option to keep north up (#706)
The Constellation is not heading-up: it places nodes by true bearing, but
for burn-in the whole picture turns slowly about you (half a degree every
5 s, a turn an hour, following the time since boot), so north and its N
marker go round with it.

Settings > Display > Screensaver gets "Keep north up" (off by default):
the turn stays at 0 degrees, so north is at the top. The few-pixel drift,
your own node's pulse and the status changing corners still keep pixels
moving. Stored as a standalone key (ssaver_north) like the other
screensaver settings: no schema bump, no migration. The row greys out with
the screensaver off, like the others.

CAP_SSAVER_NORTH_LOCK gates it, 0 on the Tanmatsu for its AppFS ceiling
(its screensaver keeps turning, as before). nl, de, fr, es, it and pt-br
translated; the other languages carry the English for now.

test/constellation_render's render takes CST_UPTIME_MS and
CST_NORTH_LOCK=1, to render the turn 45 minutes in, with and without it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:41:06 +01:00
Kaj SchittecatandClaude Opus 5.5 698546011c touch: T-Display P4 under Launcher: SD after a cold boot, missing store, honest restore (#708)
Based on @oumike's draft PR #709, made to compile and checked off-device.

- P4 SD: Launcher reads the card over SPI, and a card in SPI mode ignores the
  native-mode CMD0 every SD_MMC mount starts with until it loses power. After
  a failed first mount, power the slot off with all six SD lines driven low
  for 300 ms, then retry the first rung before the slower ones.
- P4 store: the boot log names the 'storage' partition and its size, or says
  it is missing (Launcher's own partition table from the app-only .bin), and
  a boot alert says identity, channels and contacts cannot be saved. No
  fallback onto another data partition: under Launcher that belongs to
  another app.
- Restore: uiImportBackup reports when the identity or node prefs could not
  be written (out_saved). The picker and File Transfer's Restore then say so
  instead of "Imported N contacts" and a reboot into an empty store. The
  BackupImport enum now sits outside the WADA_WEB_FILE_TRANSFER block (the
  draft did not build without it), and the web stand-in mirrors out_saved.
- Two new strings in all 15 .lang files (de, es, fr, nl translated).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 13:34:36 +01:00
Kaj SchittecatandClaude Opus 5.5 882a2046cf lua: wada.sys.random(n) gives 1..n, random(lo, lo) gives lo
A single argument landed in lo with hi = 0, and any empty range returned a
raw 32-bit value, so the documented random(n) never gave 1..n and a shuffle's
last random(1, i) with i = 1 gave a huge index (the Space Invaders crash,
#729, worked around in the app). random() alone still returns the raw value,
and a reversed range is swapped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 12:29:31 +01:00
Kaj Schittecat 1e9282125b Merge PR batch 2026-10-26: #738 #744 #741 #756 #740 #742 #731 #735 #730 #729
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	deploy/apps/lang/bg.lang
#	deploy/apps/lang/cs.lang
#	deploy/apps/lang/de.lang
#	deploy/apps/lang/el.lang
#	deploy/apps/lang/es.lang
#	deploy/apps/lang/fr.lang
#	deploy/apps/lang/hu.lang
#	deploy/apps/lang/it.lang
#	deploy/apps/lang/nl.lang
#	deploy/apps/lang/pl.lang
#	deploy/apps/lang/pt-br.lang
#	deploy/apps/lang/ro.lang
#	deploy/apps/lang/ru.lang
#	deploy/apps/lang/sr.lang
#	deploy/apps/lang/uk.lang
#	src/ui-touch/i18n_builtin.h
2026-10-26 12:23:54 +01:00
Kaj Schittecat 7a28c7fb58 Merge fix/small-batch-2026-10-26: GPS Auto speed, older T-Deck keyboard, Wi-Fi from Home, #747 digits, wada.ui.input
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	deploy/apps/lang/pl.lang
2026-10-26 12:00:26 +01:00
Kaj SchittecatandClaude Opus 5.5 d9f763a24a lua: wada.ui.input returns the text on Enter, takes an optional max_len
On a physical keyboard Enter in the dialog took the generic field path,
which moves the focus to the next control. That control is Cancel, so a
second Enter cancelled and the app got nil instead of what was typed (the
file manager's rename and new-folder prompts had the same trap). Enter in
that dialog is now OK.

wada.ui.input(title, initial, cb [, max_len]): max_len in characters, 63
when left out (unchanged for existing apps), capped at 2000. The text is
copied whole on OK instead of through an 80-byte buffer, which also cut a
63-character field of non-ASCII text short. caps().input_len tells an app
the argument is understood; the SDK page documents both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:53:07 +01:00
Kaj SchittecatandClaude Opus 5.5 32533c45dc touch: the T-Deck and the M9 find their GPS speed (Auto)
T-Deck Plus receivers talk 38400 or 9600 depending on the unit, and newer
ThinkNode M9s 115200, so owners had to find Settings > GPS > Serial speed.
Both boards now build their GPS on WadaNmeaLocationProvider with the UART
probe the Pager, T-Deck Pro and P4 use: it tries 9600, 19200, 38400, 57600
and 115200 until a sentence with a valid checksum arrives, and locks there.

Unlike those boards it runs only while the user has not picked a speed
(CAP_GPS_BAUD_FIND): Serial speed gets an Auto tile, the default, and a picked
speed is used as it is. The speed Auto finds is kept in its own NVS key
(gps_bd_fd), apart from the user's choice and outside the settings blob, so
an older firmware never reads it as a choice; touchPrefsGetGpsBaud returns it
when nothing is picked, so the core opens the UART at the right speed on the
next start. It is written once per change of receiver, from the loop task.

The T-Deck also gets the provider's u-blox GNSS stop/start while GPS rests
(it has no enable line); receivers that do not speak UBX ignore it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:45:09 +01:00
Kaj SchittecatandClaude Opus 5.5 ac14dbbea7 site: MediaMesh in the questions, pointing to the Cascadia Mesh flasher
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:38:59 +01:00
Kaj SchittecatandClaude Opus 5.5 c9a0afe234 lang: translations for the strings #731 and #730 add
Contact Management (the renamed Auto-add page, which lost its old
translations with the rename), the auto-delete toasts and the four
vibration pattern names. Keeps the audit at main's count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:38:29 +01:00
Kaj Schittecat c1bc433a46 Merge PR #729 (JackCortines): fix(apps): Space Invaders crash with a few aliens left 2026-10-26 11:33:32 +01:00
Kaj Schittecat 755fe547a1 Merge PR #735 (SebRut): wardrive: the start/stop button names the next press 2026-10-26 11:33:32 +01:00
Kaj Schittecat 5a3b10acee Merge PR #740 (oumike): "Rooms" filter for Contacts (#736) 2026-10-26 11:32:56 +01:00
Kaj SchittecatandClaude Opus 5.5 df7cb4092d lang: Polish translation by tom73god; apps page for the 18 Store apps
pl.lang: 2,132 of 2,174 strings translated (tom73god on Discord), no
format-specifier mismatches. It joins the language store at the next bump.
apps.html is the page deploy-site regenerated for beta_99.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:29:13 +01:00
Michael A. CojocariandClaude Opus 5.5 63359e8875 lang: "Default" row under "Built-in (default)", not at the end (#739)
#740 adds its "Rooms" row at the end of the same 15 files, so whichever
merged second would conflict in all of them. The row sits next to the
other "default" wording now, away from every open PR's language hunks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJdUwLehmpBq5ea6Xbpeg2
2026-10-24 13:39:10 -04:00
Michael A. CojocariandClaude Opus 5.5 a1cbe44868 touch: backups listed by date, or "Default", instead of file name (#739)
The Import picker and the Saved backups list on Settings > Backups showed
each backup's full file name, cut off with "..." on most screens. Rows now
show the date stamped into the name ("2026-06-12"), or "Default" when the
name has none (meshcore-backup.json, nodate-N, any copied .json).

Rows that would read the same gain the time (12/24 h setting), then where
the file is (SD / Internal), then a running number. Both lists share
backupListLabels(); on OOM they fall back to the file names. "Default"
added to all 15 language files.

Fixes #739

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJdUwLehmpBq5ea6Xbpeg2
2026-10-23 20:27:24 -04:00
Michael A. CojocariandClaude Opus 5.5 1b15c79728 touch: "Rooms" filter for Contacts (#736)
The Contacts Filter sheet gets a Rooms option, listed under Repeaters, that
shows only room servers (ADV_TYPE_ROOM); the header button reads "Room".
It is filter value 6 in ctPassesFilter(), so the list, Select-all and
search all follow it. Peers is unchanged and still includes rooms.
Language rows added for all 15 languages (kept as "Rooms", like "Room").

Fixes #736

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LJdUwLehmpBq5ea6Xbpeg2
2026-10-23 20:08:55 -04:00
Sebastian Rutofski bcc2bfb94a wardrive: make the start/stop button name the next press
The button now names the next press: "Stop" while a survey runs, "Start" when
it is idle, instead of always reading "Start". Keep the button handle and
relabel it on toggle rather than rebuilding the screen, which would reset the
page scroll.

Relabelling a button is only safe on firmware that carries the button:set fix,
so gate it on caps().panel, the same guard the music app uses; older firmware
keeps the fixed label and reports the state by toast.

Assisted-by: OpenCode:deepseek-v4.1-flash
Signed-off-by: Sebastian Rutofski <kontakt@sebastian-rutofski.de>
2026-10-23 11:55:43 +02:00
Sebastian Rutofski 849d0c47ae wardrive: bump version to 1.3
Signed-off-by: Sebastian Rutofski <kontakt@sebastian-rutofski.de>
2026-10-23 10:56:12 +02:00
Jack Cortines 511516f140 Refactor rnd function for random number generation 2026-10-21 19:38:29 -04:00
Jack Cortines 674f9dcdfc Update Space Invaders version to 1.1 2026-10-21 17:44:44 -04:00
Jack Cortines 01704a3f1a Add spaceinvaders.json for Space Invaders game 2026-10-21 17:43:55 -04:00
Jack Cortines ea0243aad9 Add Space Invaders 1.1. Fixes a bug causing it to crash near the game end.
Signed-off-by: Jack Cortines
326212311+JackCortines@users.noreply.github.com
2026-10-21 17:43:16 -04:00
Kaj SchittecatandClaude Opus 5.5 08c5c80311 touch: beta_99 - release notes, language store v29
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 18:13:29 +02:00
Kaj SchittecatandClaude Opus 5.5 277ccd106e web: merge main (P4 Wi-Fi off after crashes with it on)
No conflicts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 15:07:03 +02:00
Kaj SchittecatandClaude Opus 5.5 3aa49443bc p4: switch Wi-Fi off after crashes with it on (old C6 firmware)
A CrowPanel 10.1 with a C6 on esp-hosted 2.3.0 (host 2.12) ran fine for a day,
then crashed or hung at every boot once a network was saved, since Wi-Fi then
starts on every boot; Wi-Fi scans and BLE never worked on it either. Now that a
crash restarts the device instead of halting, it would loop.

WifiCrashGuard keeps a marker in RTC no-init memory while Wi-Fi runs. A panic or
watchdog reset within 60 s of starting Wi-Fi, or a second one with Wi-Fi on
within 30 minutes, switches Wi-Fi off in the settings and the next boot says so.
With Wi-Fi and BLE off the C6 is not started at all. T-Display P4 and CrowPanel
P4 10.1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:46:15 +02:00
Kaj SchittecatandClaude Opus 5.5 6f8dc88008 web: merge main (trackball off switch, P4 keyboard light)
No conflicts; i18n_builtin.h and lua_builtin.h regenerate unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:03:50 +02:00