4679 Commits
Author SHA1 Message Date
MarekZegare4 fc92dd8ea6 fix(heltec): drop broken -U/-D pin override, real build was failing
PlatformIO's SCons flag processing mishandles a two-token "-U MACRO"
in build_flags: it drops the macro name and leaves a bare -U that
swallows the next flag (-Iinclude) as its argument, producing
"macro names must be identifiers" for every companion_radio source
file. The -U was unnecessary anyway -- this whole project builds
with -w, so a later -D silently wins with no warning to suppress.

Verified with a real pio build (not available earlier this session):
Heltec_v3/v4, Cardputer ADV, and T-Echo Lite KeyShield solo envs all
compile clean now.
2026-08-14 11:21:16 +02:00
Scott Powell fcb9bdf209 * combine radio's entropy with CC310 RNG 2026-08-14 17:46:43 +10:00
Huw DuddyandGitHub 50a51a6479 Merge pull request #3203 from meshcore-dev/companion-fem-pref-fix
commenting out the load/save of the fem_ properties
2026-08-14 16:44:59 +10:00
Scott Powell e78bff0041 * unit test no longer valid 2026-08-14 16:42:54 +10:00
Scott Powell 890a2e2cff * commenting out the load/save of the fem_ properties, until they can be set 2026-08-14 16:30:12 +10:00
MarekZegare4 64d4b2982b fix(ui): wake display on T-Echo KeyShield Home key, drop dead code
Home key toggles the keyboard backlight but wasn't going through
checkDisplayOn() like every other TCA8418 key, so it couldn't wake a
sleeping display or extend the auto-off timer.

Also: removed a no-op #elif branch in ST7789Display.cpp (same values as
the #else it duplicated), and ENABLE_SCREENSHOT on the Cardputer ADV
solo env, which does nothing since ST7789Display has no getBuffer().
2026-08-14 01:07:06 +02:00
F4FPRandGitHub bb7a324471 Update variant.h 2026-08-14 00:45:22 +02:00
F4FPRandGitHub 33239520e1 Update ThinkNodeM6Board.h 2026-08-14 00:44:43 +02:00
F4FPRandGitHub 4c4497d077 Update ThinkNodeM6Board.cpp 2026-08-14 00:44:16 +02:00
F4FPRandGitHub 77057aefdd Update CommonCLI.cpp 2026-08-14 00:43:33 +02:00
F4FPRandGitHub 3bcfb70141 Update MeshCore.h 2026-08-14 00:42:57 +02:00
MarekZegare4 55cb5d25d3 fix(gps): hold GPS awake during waypoint nav/avg/track-back and message-location navigate
These views run the same live bearing/distance readout as Compass/Nearby's
navigate mode, which already held GPS awake -- these three didn't, so
duty-cycling could leave them stuck on a stale fix until the next scheduled
wake (up to the configured sleep interval).
2026-08-14 00:40:50 +02:00
F4FPRandGitHub 0a28016496 Update MicroNMEALocationProvider.h 2026-08-14 00:20:11 +02:00
F4FPRandGitHub f110ce735c Update CommonCLI.cpp 2026-08-13 23:52:58 +02:00
F4FPRandGitHub dcd601135e Update MicroNMEALocationProvider.h 2026-08-13 23:52:31 +02:00
F4FPRandGitHub fc26cae198 Update LocationProvider.h 2026-08-13 23:52:02 +02:00
ripplebizandGitHub b09cb27a1f Merge pull request #3106 from ViezeVingertjes/fix/scoped-reply-routing
Fix replies dropped when flood.max.unscoped is low
2026-08-13 15:00:37 +10:00
ripplebizandGitHub abd3546d75 Merge pull request #3189 from oltaco/nrf52-unused-pin-sweep
Fix unused pin definitions on some NRF52 boards
2026-08-13 13:48:59 +10:00
MarekZegare4 cc591e8cee chore: bump dev-fallback version to v1.25-dev, fix stale comment casing 2026-08-12 23:58:03 +02:00
MarekZegare4andClaude Sonnet 5 b572c0ba57 docs: trim wording across README and solo_features docs
Cut restated points, hedge phrases and over-explained asides throughout
-- same information, fewer words per sentence. Also fixed a stale gap
in README's "Building from source" env table (Cardputer ADV and
T-Echo Lite + KeyShield were missing).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:51:22 +02:00
MarekZegare4andClaude Sonnet 5 3290fa2f57 fix(heltec): joystick press drives Enter, PRG becomes Back
Swaps which physical input plays which role on the Heltec V3/V4 wired
joystick: the stick's own fifth "press" contact now drives Enter (your
thumb's already on the stick when you'd confirm something), and the
onboard PRG button -- previously Enter -- becomes Back instead, so it
no longer needs a separate wired button of its own.

Pure pin reassignment in the solo_dual envs, no UITask.cpp changes:
PIN_USER_BTN (Enter) is undef'd and redefined from the base env's PRG
default to the joystick's press pin, and PIN_BACK_BTN takes PRG's old
GPIO0. Scoped to just these two envs -- Wio Tracker L1/GAT562/MeshTiny
share the same UI_HAS_JOYSTICK code path with PRG already correctly
wired as their one true physical button, so their behaviour is
untouched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:36:34 +02:00
MarekZegare4andClaude Sonnet 5 e47233f557 docs: finish syncing OFF/ON casing into the solo docs
Follow-up to the UI casing unification -- the docs quoting these same
option values (Settings' Auto-lock/Buzzer/Full refresh/Low battery/GPS
pwr/Resend rows, Tools' Auto-pause/Mark avg/Auto-save/Auto-Advert/
Heartbeat/GPIO rows, and the clock alarm's Repeat cycle) still showed
the old lowercase/Title-case spellings the screens themselves no
longer use.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:23:00 +02:00
MarekZegare4andClaude Sonnet 5 ca1351aff1 docs: cover the new boards and !gps fix in solo-specific docs
README's Supported Devices table and Flashing section gain the
Cardputer ADV and T-Echo Lite + KeyShield rows/headings (both marked
experimental, matching release-notes.md and the Heltec V3/V4 entries).
external_keyboard.md gets a new section for their built-in TCA8418
keypads -- a separate mechanism from CardKB, not documented anywhere
before. settings_screen.md's GPS pwr row now lists !gps fix among the
things that hold GPS continuously on, matching the actual code.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:16:19 +02:00
MarekZegare4andClaude Sonnet 5 df8bdb05e8 docs: note the upstream base bump to companion-v1.17.0
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:09:13 +02:00
MarekZegare4andClaude Sonnet 5 f333fdb26c docs: trim v1.25 release notes to short bullets
The prior entries carried full root-cause narrative for each change,
matching this file's older sections -- too dense for what's meant to
be a quick skim. Cut down to what changed and where.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 23:04:59 +02:00
MarekZegare4andClaude Sonnet 5 1f60c2437f docs: flag Heltec V3/V4 solo builds experimental too
Same reasoning as the Cardputer ADV / T-Echo Lite KeyShield note --
new board support that hasn't had much real-world use yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:49:07 +02:00
MarekZegare4andClaude Sonnet 5 5b4d4fca88 docs: version this cycle's release notes as v1.25, flag new boards experimental
Names the upcoming release and marks the Cardputer ADV / T-Echo Lite
KeyShield board support as experimental, since it's new enough not to
have had much real-world use yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:45:31 +02:00
MarekZegare4andClaude Sonnet 5 6c7c9f3f83 fix(prefs): snap legacy gps_interval values to a valid duty-cycle preset
The pre-v1.13 "GPS Interval" setting (hidden from Settings ever since,
but its byte kept "for backwards compatibility") used a different option
set than today's duty-cycle presets -- its old 30s choice isn't one of
them. A device that had it set to 30 would load that value straight into
the new duty-cycle scheduler while "GPS pwr" in Settings showed OFF
(gpsDutyIndex() found no matching preset), silently cycling GPS on a
setting nobody could see or change. Unrecognised values now reset to OFF
on load, same as the existing out-of-range clamp this replaces.

Also refreshes MyMesh.h's FIRMWARE_VERSION/FIRMWARE_BUILD_DATE fallback
(only ever used by a `pio run` that bypasses build.sh entirely) -- it
was still "v1.17-solo.0" from 12 tags ago.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:43:15 +02:00
MarekZegare4andClaude Sonnet 5 71c39bab4f docs: update release notes for v1.24 recap and the power-saving/UI fixes
Restructures already-shipped v1.24 content out of Unreleased into its
own version section, adds the missing v1.22 heading and a v1.21
separator, documents the M5Stack Cardputer ADV / LilyGO T-Echo Lite
KeyShield board support, and folds in the locked-screen Messages fix,
the GPS duty-cycle races, and the OFF-casing cleanup.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:08:27 +02:00
MarekZegare4andClaude Sonnet 5 721f892307 fix(ui): unify "off" casing to OFF across all screens
Every genuine on/off toggle already agreed on ON/OFF, but the disabled
point of several value pickers didn't: Settings' LowBat/GPS pwr/e-ink
full-refresh options and the auto-advert interval showed lowercase
"off", GPIO's mode row showed "Off" right above its own State row's
"OFF", and the GPS-averaging/trail-autopause pickers showed "Off" where
the alarm-repeat picker already said "OFF". All display-only label
arrays, no behaviour change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:08:20 +02:00
MarekZegare4andClaude Sonnet 5 c045df1da5 fix(power): stop GPS duty-cycling from starving !gps fix and fighting manual toggles
Two races between the new GPS duty-cycle scheduler and code that changes
GPS state independently of it:

- gpsDutyCycleLoop() capped every "GPS on" phase at a fixed 60s and would
  stop_gps() as soon as a fix went valid, with no awareness of an
  in-flight "!gps fix" bot request -- so a fix's own up-to-300s acquire
  window (and its 10s averaging phase) could get cut short by the
  scheduler shutting GPS off mid-request. MyMesh::isGpsFixPending() now
  feeds into UITask's existing "is anything live using GPS right now"
  hold, alongside trail/live-share/locator/nearby.

- setSettingValue("gps", ...) (Settings toggle, bot !gps on/off, CLI)
  starts/stops GPS directly without resetting the scheduler's own phase
  timer, so a manual toggle could land on a stale, already-expired
  deadline left over from before -- immediately re-stopping GPS a tick
  after turning it on. The phase timer now resets on every external
  change, so the next duty-cycle tick re-arms fresh.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:08:13 +02:00
MarekZegare4andClaude Sonnet 5 22b05ada52 fix(ui): show unread count on the locked-screen Messages dashboard field
formatDashVal(), the locked-screen counterpart to the unlocked clock's
dashboard rendering, never learned about DASH_MSGS and fell through to
an empty string for it, so Messages was the one CLOCK FIELDS choice
that showed nothing at all once the screen locked.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 22:08:03 +02:00
taco 7cd1d207af Fix LilyGo T-Echo Lite SPI pins 2026-08-13 00:53:58 +10:00
taco c2a4ef082f Fix Heltec MeshPocket SPI pins 2026-08-13 00:15:34 +10:00
taco 3ea541f1f2 Fix Heltec T1 pin definitions
SPI pins that are set to -1 cause OOB reads on NRF52. The unused Serial2 pin definitions were removed to avoid potential issues with the Uart framework.
2026-08-13 00:12:37 +10:00
ripplebizandGitHub e9edfc8e1a Merge pull request #3188 from oltaco/heltec-t096-pin-fix
Fix Heltec T096 Tx issue
2026-08-12 23:00:31 +10:00
taco 49d9f9a839 Heltec T096: fix PIN_SPI1_MISO
Setting SPI pins to values that are OOB of the g_ADigitalPinMap[] array causes OOB reads. This variant.h has pin 0 as 0xFF which passes through as NRFX_SPIM_PIN_NOT_USED.
2026-08-12 22:31:57 +10:00
taco f43e1cde89 Revert "t096 compiler layout workaround"
This reverts commit 9c60f9696e.
2026-08-12 22:28:36 +10:00
taco 264d778168 Revert "T096 PA_CTX pin direction workaround"
This reverts commit 82de18fb0e.
2026-08-12 22:28:05 +10:00
ripplebizandGitHub 956094b271 Merge pull request #3185 from oltaco/fix-techo-card-txco-voltage
Set T-Echo Card TCXO voltage to 3.0
2026-08-12 18:13:44 +10:00
ripplebizandGitHub a4ab7f0e59 Merge pull request #3137 from agessaman/feat/station-g3-fem-prefs
Station G3: Expose, persist, and apply FEM gain preferences
2026-08-12 16:11:23 +10:00
taco 9d6dcc673e set T-Echo Card TCXO voltage to 3.0
as per https://github.com/meshcore-dev/MeshCore/pull/3140 and https://github.com/Xinyuan-LilyGO/T-Echo-Lite/issues/14
2026-08-12 16:08:05 +10:00
ripplebizandGitHub 1cb308b694 Merge pull request #3182 from oltaco/t096-tx-workaround
Workaround for Heltec T096 transmit issue
2026-08-12 14:49:32 +10:00
taco 82de18fb0e T096 PA_CTX pin direction workaround 2026-08-12 14:07:31 +10:00
taco 9c60f9696e t096 compiler layout workaround
see https://github.com/meshcore-dev/MeshCore/issues/3151
2026-08-12 14:04:50 +10:00
ripplebizandGitHub e027263d1e Merge pull request #3154 from fdlamotte/nrf52_hwcrypto_init
nrf52: call nRFCrypto.begin()/end() only once
2026-08-12 12:14:21 +10:00
Florent 3e82827706 thinknode_m8: initial support 2026-08-11 17:37:35 -04:00
JakubandClaude Sonnet 5 76ea401dd5 Merge branch 'merge-upstream-v1.17' into power-saving
Brings in upstream companion-v1.17.0 (CAD, MCU temp telemetry, misc
fixes) alongside our RX duty-cycle power-save; see merge-upstream-v1.17
history for the full conflict-resolution rationale.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 17:25:50 +02:00
JakubandClaude Sonnet 5 7699d8ffad Merge upstream companion-v1.17.0 (CAD) into power-saving
Adopts hardware Channel Activity Detection (wired into
RadioLibWrapper::isChannelActive() alongside our RSSI-threshold check
and RX duty-cycle power-save), MCU temperature telemetry, LR2021
standby workaround, DISPLAY_SCALE/FLIP overrides, NRF52Board
shutdownPeripherals() refactor, and misc upstream fixes.

Declines upstream's ConfigSerializer-based NodePrefs rewrite,
MultiSerialInterface/interface_manager, and UIColor palette system —
each would have broken large parts of the Solo-specific feature set
(NodePrefs fields, per-variant single serial_interface, enum-based
DisplayDriver::Color). Flagged as candidate follow-up migrations, not
permanent no's.

Also fixes several pre-existing bugs surfaced while chasing silent
merge breaks (stale newMsg() override signature in ui-tiny/ui-orig,
dead UIEventType::newContactMessage case, missing ContactsIterator
init), bumps FIRMWARE_VERSION/MESHCORE_VERSION to 1.17, and fixes a
missing <cstdlib> include that broke the native ConfigSerializer unit
tests.

Verified via 13+ pio run builds across ESP32/nRF52, all 3 companion UI
variants, and 7 display drivers, plus the full native unit test suite
(33/33 passing).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 17:25:35 +02:00
Huw DuddyandGitHub 34ad059afb Merge pull request #3170 from recrof/promicro-pin-tidy-up
[promicro] make pinmap more tidy, move the LoRa pins to variant.h
2026-08-11 18:43:20 +10:00