Commit Graph
496 Commits
Author SHA1 Message Date
mikecarper 8f20fe5d83 Trim remaining validation wording in small Companion profiles 2026-10-28 04:44:06 -07:00
mikecarper 8a51a54fd7 Use concise validation replies in constrained Companion builds 2026-10-28 04:22:07 -07:00
mikecarper f0bcb10ff0 Handle USB mode queries in the existing getter paths 2026-10-28 03:21:36 -07:00
mikecarper 411144f69c Keep local Companion control parsing in a cold function 2026-10-28 03:15:49 -07:00
mikecarper 3385f2acaa Avoid repeated channel alias parsing in constrained companions 2026-10-28 03:03:48 -07:00
mikecarper 4261889095 Recover constrained firmware flash and update USB dispatch fixtures 2026-10-28 02:51:56 -07:00
mikecarper b18ba8288a Report the running firmware USB mode without disturbing logging 2026-10-28 02:14:11 -07:00
mikecarper 744692fb93 Configure MediaMesh radio2 presets when joining Companion channels 2026-10-28 00:05:10 -07:00
mikecarper 1e22f6326d Fix Cardputer history, notifications and hardware lifecycle 2026-10-27 23:45:06 -07:00
mikecarper 9a2211e85a Fix Cardputer delivery, live settings and power management
Keep selected chats bound to full contact keys and route keyboard channel sends through the active transport. Deliver accepted plain, room and Meshtext messages to local history and notifications once; disarm rejected sends and retries.

Use shared live radio settings, GPS acquisition and power-saving policy, screen timers and red night palette. Report save failures, preserve verified custom preferences, and guard display controls and shutdown.

Add executable sanitizer regressions for routing, retries, selection, storage faults, UI lifecycle and GPS. Both Companion builds and the shared T-Deck regression pass; no physical Cardputer testing performed.
2026-10-27 22:59:26 -07:00
mikecarper 05679aa741 Add a saved override to keep USB packet logging continuous 2026-10-27 18:47:05 -07:00
mikecarper b3df8bfd3f Quiet USB packet logs for five minutes after console commands 2026-10-27 18:19:19 -07:00
mikecarper 6ac2ec357a Let a new trace replace the previous attempt on its connection 2026-10-27 14:08:50 -07:00
mikecarper 2a6d59474d Report saved Bluetooth PIN settings to Companion apps 2026-10-27 13:50:40 -07:00
mikecarper 7d413a6806 Fit direct OTA administration into RAK4631 Full 2026-10-26 23:41:20 -07:00
mikecarper d64a4ef234 Preserve unread messages when the OTA wizard borrows queue space 2026-10-26 21:45:18 -07:00
mikecarper dedae3d5ca Keep OTA replies separate from Companion messages and contacts 2026-10-26 21:36:06 -07:00
mikecarper 0a3a72984a Keep direct OTA support within each Companion's flash budget 2026-10-26 20:17:54 -07:00
mikecarper 435c740e5a Let USB repeaters and Full Companions manage direct OTA updates 2026-10-26 19:46:05 -07:00
mikecarper 1aef6de288 Reserve USB KISS framing before normal parsers consume it 2026-10-26 17:49:20 -07:00
mikecarper cb3c92a8da Add saved raw radio2 KISS host sessions to Full firmware 2026-10-26 16:57:49 -07:00
mikecarper 8a8c80ee6a Unblock LR2021 retunes and add saved crystal calibration
Repeated preamble/header activity can keep a requested primary or TempRadio
change busy indefinitely. Bound unfinished-RX admission for accepted LR2021
changes while preserving completed packets, TX, BUSY and exclusive owners.
Ordinary scans and CAD keep their existing admission rules. Expose the failing
stage and native status through get radio.apply.

Add saved radio.xtrim capacitor calibration and measured radio.freqerror in
signed Hz from the last valid LoRa packet. Preserve native trim by default,
restore explicit calibration after resets/Morse, verify saves before applying,
wait two seconds for the acknowledgement, and roll back failed changes.

Calibration motivation and prior upstream work:
https://github.com/meshcore-dev/MeshCore/issues/3365
https://github.com/recrof/MeshCore/tree/lr2021-trim
Packet-status format follows Semtech's LR20xx driver and RadioLib staging.

Tests execute production activity/admission and transaction paths with noisy
RX, completion races, protected owners, failed setters, RX restart and save
rollback. Physical W12 retuning and RF calibration still require confirmation.
2026-10-26 15:55:36 -07:00
mikecarper b00d346df7 Unify Heltec V4 OLED, TFT and headless display selection
Detect OLED or the original stock TFT touch assembly in ordinary V4.2/V4.3
images. Add saved live display.type auto/oled/tft/off selection and report
the active selection in board output. Keep sensors on primary I2C, preserve
shared power, and isolate TFT FSPI from radio HSPI through sleep and changes.

Consolidate future picker/build choices only with application capability
proof. Retain exact legacy OTA identities and separate R8 hardware images.
Document controls and physical qualification limits.

Validation: five serialized Full builds with capability/size/RAM checks;
focused host tests, existing R8/T-Deck/OLED regressions, build-profile suite,
and picker/provider tests. V4.3 OLED live changes and off/auto reboot
persistence passed on Mercerwood. Physical TFT qualification remains pending.
2026-10-26 15:19:17 -07:00
mikecarper 73c5f572eb Apply busy radio settings and recover service starts automatically
Save valid busy RX, fast-switch and Companion tuple changes once, then
apply the latest accepted intent at a safe radio gap. Preserve checked-save
rollback, runtime RXEN intent, TempRadio ownership and exact remote reply
delivery. Repair failed preamble compensation without hiding uncertain saves.

Retry WebConfig, MQTT and NimBLE startup failures automatically. Preserve
explicit off choices, OTA ownership and the latest WiFi credentials through
cooperative shutdown. Add regression coverage and update command guides.

Validation: focused host transaction, rollback, ownership and lifecycle suites;
Full RAK4631, Heltec V4 R8 TFT and RC32 packages; representative room, sensor,
LR1110, LR2021, SX1276, STM32WL and ESP-NOW builds. Linked RAK crypto and OTA
workspace checks pass; its complete OTA image uses 712644/712704 bytes.
2026-10-25 15:20:55 -07:00
mikecarper fb73e3afac Add automatic red and black night mode for color screens
Default to one hour after sunset through sunrise, using fresh cached GPS or recent direct RF neighbor locations. Provide saved CLI and WebConfig controls with a small integer solar approximation and no additional framebuffer.
2026-10-25 14:41:14 -07:00
mikecarper 65928aae95 Apply saved TX power automatically across firmware roles 2026-10-25 14:08:15 -07:00
mikecarper 59445066fe Expose Companion RXPS settings through the app console 2026-10-25 12:05:39 -07:00
mikecarper 8dfdba3f6d Defer busy Companion TX-power updates without interrupting RX
A settings save could reach the power setter while RX, TX, duty cycling or a
profile transition owned the radio, returning BAD_STATE after earlier settings
had already saved. Distinguish busy admission from a hardware rejection and
reuse the existing command route, storage and three-second deadline for power.
Acknowledge only after hardware acceptance and a successful preference save.

Skip hardware work for verified unchanged power. Invalidate that verification
after failed writes or radio initialization, retaining rollback and exclusive
beacon/Morse ownership. Keep the existing firmware memory limits and features.

Cover retries, captured routes, timeout/rollover, disconnect, partial writes,
failed saves and recovery. Keep ESP-NOW/simulation adapters compatible and add
ESP-NOW Companion compilation to the existing sequential smoke job.
2026-10-25 11:57:03 -07:00
mikecarper 6bcedc7344 Merge PR #24: report Companion receive profiles
Pull in https://github.com/mikecarper/MeshCore/pull/24.

Preserve reserved fallback bytes for single-profile operation and UDP ingress. Clarify the protocol documentation and validate both UDP-enabled and UDP-disabled builds of the receive-profile helper.

Validation: receive-profile tags, response bounds, UART sessions, UDP packet origins, and bridge ingress tests passed.
2026-10-25 01:01:17 -07:00
mikecarper 4c94d6b4e4 Default Cascade Companions to two-byte path hashes 2026-10-24 23:52:54 -07:00
Claude 0e756bf24a Companion: say which profile raw and channel data arrived on
MeshCore Open TAK labels a MediaMesh photo or voice clip "Received via
MediaMesh", "via main mesh" or both. Wadamesh standalones tell the
app the profile in a frame byte stock firmware leaves reserved; a
Cascade companion left it unset, so the app showed nothing.

While radio2 is on (rx or rxtx):
- PUSH_CODE_RAW_DATA (0x84) byte 3: 0xA0 primary, 0xA1 radio2
  (stock 0xFF).
- RESP_CODE_CHANNEL_DATA_RECV (0x1B) byte 2: the same (stock 0).
With radio2 off, or for a packet from the UDP bridge, the stock values
stay, so existing clients see no change.

Test: test/test_companion_rx_via.py (in run-unit-tests); the two
harnesses that compile these handlers get a stub.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011i5tJJtj95MB4oUgncCUe5
2026-10-24 17:31:53 -07:00
mikecarper 21194b9825 Fix compile and capacity blockers in the full release matrix
Resolve Serial macro and ESP-NOW wrapper compilation errors. Preserve queue, neighbor, advert-history and Room post capacities while using qualified RTC, PSRAM and word-only IRAM storage on constrained ESP32 targets. Reduce Full infrastructure flash through lossless Room web compression, compact crypto and unused exception metadata removal.

Add focused native regressions for storage ownership, exact protocol output, OTA proofs and build policy. Keep physical flash sizes, OTA slots and RAM guard formulas unchanged.
2026-10-24 05:38:23 -07:00
mikecarper ab5de10e79 Qualify Full Meshtext builds and share cold storage on constrained companions 2026-10-23 18:08:25 -07:00
mikecarper 9b0e013f4b Merge PowerSaving-v18 into keymindCascade
Integrate the ESP32 power-saving core and RXPS recovery/status updates while preserving radio2, telemetry and saved settings.
2026-10-23 16:11:49 -07:00
mikecarper 5b20bf3709 Include the packed help interface for STM32WL Companions 2026-10-23 11:26:05 -07:00
mikecarper 73789a64e8 Pack STM32WL Companion help while retaining every command 2026-10-23 11:25:33 -07:00
mikecarper 629db8542d Share SD command parsing and history output without changing replies 2026-10-23 09:59:48 -07:00
mikecarper 5d70d0af76 Optimize occasional RAK Companion management code for size 2026-10-23 09:51:40 -07:00
mikecarper 8f621cbb3f Isolate RAK help packing from the firmware C++11 build 2026-10-23 09:40:00 -07:00
mikecarper 4deff5b687 Pack RAK Full help text at compile time without changing output 2026-10-23 09:32:02 -07:00
mikecarper 684df9c643 Reduce RAK Full Companion help overhead without removing commands 2026-10-23 09:19:09 -07:00
mikecarper 807343de8d Share Companion hardware diagnostics and protect RXEN reconfiguration 2026-10-23 08:57:51 -07:00
mikecarper 04c4fdb240 Expose Companion bootloader version and fence XIAO role-transition tests 2026-10-23 08:33:02 -07:00
mikecarper 1412ee4954 Prioritize ESP32 Auto CPU speed during dual-profile radio scanning 2026-10-23 02:34:50 -07:00
mikecarper 2d35a291fa Fix release size regressions and calibration test fixtures 2026-10-22 19:53:31 -07:00
mikecarper ab6412e73c Add persistent battery ADC calibration across boards
Add meter-reference calibration with saved ADC corrections, checked persistence and rollback. Preserve existing board coefficients and nRF52 voltage policy, and merge the Mini Repeater feature gates.

Validation: 69 focused tests, hosted documentation checks, and four firmware builds passed. Mini Repeater retains calibration and its existing filesystem with 376 flash bytes free; earlier Mini Sensor size failures remain documented.
2026-10-22 18:56:32 -07:00
Kevin Le b522479d11 PowerSaving for companions 2026-10-22 21:12:56 +07:00
mikecarper 9b70827d03 Add opt-in bounded ESP32 radio timing capture 2026-10-22 03:46:43 -07:00
mikecarper 5d31a839c5 Add MeshPocket message board and worldwide map 2026-10-21 23:57:14 -07:00
mikecarper 6e599d1709 Add ESP32 clock selection and bounded power test controls 2026-10-21 21:06:42 -07:00