Commit Graph
133 Commits
Author SHA1 Message Date
mikecarper 368770656f Fix WisBlock GPS power policy and preserve shared peripherals 2026-10-13 09:55:32 -07:00
mikecarper d2bea5fb10 Reduce nRF52 Companion flash and stream Reader chapters
Use a 960-byte constant-time Ed25519 base table, compact hash/scalar code and unused-library trims while retaining Reader, BLE P-256 and the 8 KiB stack. RAK4631 Full saves 57,496 flash bytes and 3,152 static RAM bytes versus preview3.

Support complete chapters and verse ranges with bounded app continuation replies and cooperative terminal output. Use nonblocking TCP writes under reader backpressure. Add scalar/signature comparisons and a linked ARM crypto/stack CI gate.

Validated clean RAK4631, T1000-E, T096 and V4 Full builds, host regressions, and physical RAK chapter/reconnect and signing comparisons. Physical signing averages 35.9 ms versus 14.4 ms with the original table.
2026-10-13 01:02:30 -07:00
mikecarper 65820d0dd2 Include and qualify Meshtext in RAK4631 Full Companion
Port Meshtext settings to verified atomic nRF52 storage and use the existing radio RNG and hardware entropy. Keep the ExtraFS boundary, GPS, contacts, channel count and 8 KiB stack unchanged; omit unused library data to fit the image. Require linked codec and Companion transport evidence and build the real RAK Full profile in CI. Add configuration and storage-failure regression coverage.
2026-10-12 22:39:00 -07:00
mikecarper 11d64b3db3 Add configurable nRF52 battery profiles with LiFePO4 cutoff 2026-09-30 01:11:10 -07:00
mikecarper 898cadae2c Share high-contact RAK offline queue with held one-key DMs 2026-09-28 12:47:12 -07:00
mikecarper 9127f8fe25 Detect header W25Q16 on unified RAK firmware 2026-09-25 14:20:29 -07:00
mikecarper fca10471c3 Unify RAK repeater storage firmware and bootloader handoff 2026-09-25 10:35:04 -07:00
mikecarper 7e1f87dfbc Fix nRF52 flash completion and preserve recoverable ExtraFS 2026-09-22 09:29:05 -07:00
mikecarper 9816e21834 Harden nRF52 OTA, USB sessions, and T096 controls
Bind Companion replies to request transports, make dual-CDC USB sessions nonblocking and reconnect-safe, and harden nRF52 watchdog/OTA storage paths. Fix T096 button debounce, display wake, sleep races, and the compact message layout; add exact WisBlock OTA profiles plus expanded native/static/HIL documentation.
2026-09-01 20:51:43 -07:00
mikecarper 5de1820765 Unify companion BLE and WiFi setup flows 2026-09-01 01:25:00 -07:00
mikecarper 8920c35da5 Harden marathon-tested OTA and hardware paths
Add durable TempRadio, ACL, clock, bridge, GPS/I2C, USB logging, and Indicator recovery safeguards together with expanded automation, build/profile contracts, release metadata, and the hardware validation ledger.
2026-08-30 19:26:15 -07:00
mikecarper e5fd77e53f feat: add Bluetooth-controlled LoRa OTA
Add the framed BLE mOTA transport and companion control path, complete the full-profile build and runtime fixes, and document and test the OTA workflow.
2026-08-27 01:22:18 -07:00
mikecarper 42b6a0df60 feat: retain INA monitors in reduced RAK repeaters 2026-08-25 20:24:17 -07:00
mikecarper 7d2f69e34f Retain GPS in RAK nRF52 OTA repeaters 2026-08-22 13:27:01 -07:00
mikecarper e287a1ffa2 Add external QSPI staging for nRF52 OTA 2026-08-20 17:51:52 -07:00
mikecarper f0fe67df30 Merge remote-tracking branch 'review/PowerSaving-v16' into keymindCascade
# Conflicts:
#	build-iotthinks.sh
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_room_server/MyMesh.cpp
#	examples/simple_sensor/SensorMesh.cpp
#	src/helpers/CommonCLI.cpp
#	src/helpers/radiolib/CustomSX1262.h
#	src/helpers/sensors/EnvironmentSensorManager.cpp
#	variants/heltec_v4/platformio.ini
#	variants/heltec_v4_r8/HeltecV4R8Board.cpp
#	variants/heltec_v4_r8/HeltecV4R8Board.h
#	variants/heltec_v4_r8/platformio.ini
2026-08-14 08:22:26 -07:00
Kevin Le e13fb6a426 Added ; -D FORCE_GPS_ALIVE 2026-08-09 12:38:31 +07:00
mikecarper 33cea30582 Merge branch 'PowerSaving-v16' of https://github.com/IoTThinks/MeshCore into keymindCascade
# Conflicts:
#	src/helpers/sensors/EnvironmentSensorManager.cpp
#	variants/rak3401/platformio.ini
2026-08-07 23:01:40 -07:00
Kevin Le 1bf80992b9 For RAK only, fixed reset pin and honour FORCE_GPS_ALIVE 2026-08-08 11:28:28 +07:00
mikecarper 5640fe0641 Merge remote-tracking branch 'IoTThinks/PowerSaving-v16' into keymindCascade
# Conflicts:
#	build-iotthinks.sh
#	examples/companion_radio/MyMesh.cpp
#	examples/simple_repeater/MyMesh.cpp
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	variants/rak4631/platformio.ini
2026-08-05 16:28:53 -07:00
Kevin Le 6160509efc PowerSaving17: Cleanup for RX PowerSaving 2026-08-05 22:06:23 +07:00
mikecarper 9bec10b41a Merge IoTThinks PowerSaving v16 updates
# Conflicts:
#	examples/companion_radio/MyMesh.cpp
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_repeater/UITask.cpp
#	examples/simple_repeater/UITask.h
#	examples/simple_room_server/MyMesh.cpp
#	examples/simple_room_server/MyMesh.h
#	examples/simple_sensor/SensorMesh.cpp
#	examples/simple_sensor/SensorMesh.h
#	src/Dispatcher.cpp
#	src/Dispatcher.h
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	src/helpers/radiolib/CustomLR1110.h
#	src/helpers/radiolib/CustomLR1110Wrapper.h
#	src/helpers/radiolib/CustomSX1262.h
#	src/helpers/radiolib/CustomSX1262Wrapper.h
#	src/helpers/radiolib/RadioLibWrappers.cpp
#	src/helpers/radiolib/RadioLibWrappers.h
#	variants/rak4631/platformio.ini
#	variants/thinknode_m3/variant.cpp
#	variants/thinknode_m3/variant.h
#	variants/thinknode_m6/variant.cpp
#	variants/thinknode_m6/variant.h
2026-08-03 15:09:52 -07:00
mikecarper 61cb8d6e96 Merge upstream dev into keymindCascade
# Conflicts:
#	docs/payloads.md
#	examples/companion_radio/DataStore.cpp
#	examples/companion_radio/DataStore.h
#	examples/companion_radio/MyMesh.cpp
#	examples/companion_radio/MyMesh.h
#	examples/companion_radio/NodePrefs.h
#	examples/companion_radio/main.cpp
#	examples/simple_room_server/MyMesh.cpp
#	examples/simple_room_server/MyMesh.h
#	examples/simple_sensor/SensorMesh.cpp
#	platformio.ini
#	src/Utils.cpp
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	src/helpers/NRF52Board.cpp
#	src/helpers/nrf52/SerialEthernetInterface.cpp
#	src/helpers/radiolib/CustomLLCC68.h
#	src/helpers/radiolib/CustomLLCC68Wrapper.h
#	src/helpers/radiolib/CustomLR1110.h
#	src/helpers/radiolib/CustomSTM32WLxWrapper.h
#	src/helpers/radiolib/CustomSX1262.h
#	src/helpers/radiolib/CustomSX1268.h
#	src/helpers/radiolib/CustomSX1268Wrapper.h
#	src/helpers/ui/ST7735Display.cpp
#	test/mocks/Stream.h
#	variants/minewsemi_me25ls01/target.h
#	variants/wio-tracker-l1/platformio.ini
2026-08-03 14:53:59 -07:00
IoTThinks 1fe531e6a4 Merge pull request #11 from Dom4n/rx-powersaving
Added RX duty-cycle power saving support
2026-08-03 16:05:03 +07:00
mikecarper 1e009abe4c Add user-controlled GPIO commands 2026-08-02 22:57:17 -07:00
mikecarper 308589afa3 Harden nRF52 shutdown and radio recovery 2026-07-31 16:01:02 -07:00
ripplebiz b797ca198e Merge pull request #3060 from entr0p1/fix/mesh-debug-active
Clean up debugs left on in platform.ini files
2026-07-30 12:35:22 +10:00
entr0p1 d7f378b489 Clean up debugs left on in platform.ini files 2026-07-29 18:27:15 +10:00
liamcottle e7f2c71701 usb companion firmwares now require build flag to include usb interface 2026-07-28 03:45:02 +12:00
liamcottle 203fd4e407 refactor rak13800 to new ethernet interface class 2026-07-28 03:18:54 +12:00
mikecarper 9a4834b192 Merge PowerSaving v16 updates 2026-07-24 01:34:35 -07:00
mikecarper 7abb5fb95b Add portable LoRa OTA repeater builds 2026-07-22 10:05:52 -07:00
Kevin Le d6c61af7c7 Added POWERSAVING_DEBUG=1 2026-07-22 16:19:54 +07:00
mikecarper d5a00da2a0 Harden nRF52 persistence, watchdog, and build variants 2026-07-20 22:55:58 -07:00
mikecarper cd0c06dc91 Group build targets and rename RAK4631 OTA variant 2026-07-20 16:34:42 -07:00
mikecarper 57cc977e58 Harden retry, power, and companion behavior 2026-07-20 10:50:55 -07:00
Jarosław Domański 18a0dcda43 Enabled fixed RX duty-cycle profiles for remaining companion targets 2026-07-20 19:03:21 +02:00
mikecarper ccce0c8d75 feat: prepare v1.16.07 firmware release 2026-07-18 14:53:56 -07:00
mikecarper f7b7edf393 Merge upstream dev 2026-07-17 16:17:16 -07:00
mikecarper 5e030ce77b Fix full firmware matrix capacity failures 2026-07-15 22:40:09 -07:00
mikecarper 710790b81d Enable LoRa OTA for nRF52 repeaters 2026-07-15 09:49:40 -07:00
mikecarper 28afb0cd2c Exclude oversized RAK4631 repeater from LoRa OTA 2026-07-15 08:29:33 -07:00
mikecarper 8599cf0acb Verify staged OTA payloads and flash writes 2026-07-14 14:42:26 -07:00
mikecarper 4c0dbe707d Merge PR 2864 LoRa OTA into Keymind 2026-07-11 12:40:31 -07:00
agessaman b88dc02b66 Merge mcarper/keymindCascade into mqtt-observer-plus
Integrates Mike Carper's transmission-reliability work (direct retries with
SNR-adaptive backoff and CR, flood retry controls, alt-path replies, flood
channel gates) plus its upstream/dev base (as of 2026-07-06) on top of the
observer stack. The flex branch is untouched; this branch is the experimental
integration line.

Conflict-resolution decisions, for future re-syncs (git rerere is enabled and
has recorded these):
- NodePrefs adopts keymind/upstream member order + retry/flood tail. Member
  order is in-memory only: /com_prefs stays field-by-field with the same
  canonical file order both sides already share through offset 294; keymind
  appends the retry tail at 295+ (new canonical size 676). Flex fleet files
  load unchanged; retry fields default via direct_retry_prefs_magic.
- loadPrefsInt keeps the fork's legacy MQTT-gap recovery but moves its
  detection boundary from 'extra > 5' to 'extra > LEGACY_MQTT_GAP_3SLOT (864)'
  so keymind-size tails take the normal read path. COM_PREFS_TAIL_BYTES
  retired.
- Dispatcher/RadioLibWrappers: fork watchdog additions + keymind TX overrides
  and CAD busy counter are unioned; RxReservePacketManager::queueOutbound
  follows upstream's new bool return (false when shedding).
- CommonCLI: fork observer dispatch + versioned /mqtt_prefs machinery kept;
  keymind CLI (retry/flood/radioat) taken; duplicate CAD/FEM handlers and
  sanitise lines deduped (kept keymind placements to minimize future diff).
- MyMesh (repeater/room): fork alerter/OTA/observer wiring kept; keymind
  scheduled-radio system replaces the old pending_* temp-radio members;
  applySavedRadioParams() replaces raw setParams at startup.
- ESP32Board: fork manifest-OTA + keymind powerOff/deepSleep and stopOTAUpdate
  unioned; startOTAUpdate keeps fork's STA-aware IP with keymind's idempotency
  guard.
- build.sh taken wholesale from keymind (fleet builds use GH Actions).

Verified: Heltec_v3_repeater_observer_mqtt, Heltec_v3_repeater,
heltec_v4_repeater_observer_mqtt, Heltec_v3_room_server_observer_mqtt build;
host migration harness (13 MQTT + non-MQTT scenarios) passes with updated
expectations (676-byte /com_prefs; odd-size files normalize on save, not
load); native unit tests 13/13.
2026-07-09 23:10:41 -07:00
Valentin Kivachuk Burda 4680d1052f ota: build/board enablement (platformio, build.sh, variants) + Python tooling (.mota reference, EndF/target/vector generators) 2026-06-29 20:24:24 +02:00
Ryan Gregg a206f3e066 Merge remote-tracking branch 'upstream/dev' into rak-ethernet
# Conflicts:
#	docs/faq.md
#	examples/companion_radio/main.cpp
2026-06-20 14:39:03 -07:00
Kevin Le e67933ca2a PowerSaving 16 2026-06-08 21:11:49 +07:00
agessamanandCursor dcc8f826db Merge upstream/dev into mqtt-bridge-implementation-flex
Pick up 97 commits from upstream/dev, resolving conflicts in
CommonCLI prefs layout, board definitions, docs, and T-Beam Supreme
platformio config.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 09:29:16 -07:00
Nick Dunklee 59cee5c8a0 feat: Integrate BME680 Bosch BSEC support for RAK4631
This is a consolidation of my changes for BME680 on RAK4631 nodes.
I will close my other PRs related to this and link back to this one.

*Background on change:*

This change replaces the Adafruit BME680 driver on RAK4631 with the
Bosch BSEC library. Other boards continue to use the existing
Adafruit path via ENV_INCLUDE_BME680.

This makes the IAQ portion of the sensor functional, and more accurate.
It also contains the math and/or CayenneLPP fixes from my other PRs.
The Bosch code also appears to handle calibrating sensor aging as well,
whereas the Adafruit code is just looking at blind values that can drift
with time. Pretty cool to see this shooting out useful data!

RAK4631 platform.io is set to override to ENV_INCLUDE_BME680_BSEC while
leaving the Adafruit code for other node types. (If this becomes applicable
for other node types in future, awesome! I just don't have hardware
to test against.)

Using the BSEC library introduces IAQ sensor calibration, and saves
the calibration state periodically so it does not have to calibrate
again later.

At startup the IAQ sensor takes 30 minutes to heat and to hit a baseline,
then starts calibrating. Once calibrated, it will save those settings
and will only write settings again if calibration falls back and restores
back to state 3.

This fix also has the gas resistance math fix that was in
[pull 2146](https://github.com/meshcore-dev/MeshCore/pull/2146) so
the adafruit path also can at least show accurate values instead
of looping negative.

Also includes the fix from [pull 2149](https://github.com/meshcore-dev/MeshCore/pull/2149) so the pressure output isn't truncated to 1hPa steps.

*Fixes/Changes:*
- Add bsec_config_iaq[] with the 3.3V/3s-LP/28d calibration profile
- BSEC init applies setConfig() for voltage-correct heater targeting
- IAQ, heat-compensated temperature/humidity, pressure, and altitude
  reported over CayenneLPP
- IAQ accuracy reported as analog input over CayenneLPP (0,1,2,3)
- Calibration state persisted to /bsec_state.bin on nRF52 internal
  flash; written only when iaqAccuracy improves to >= 2, should
  keep write frequency well within flash endurance over device lifetime
- Fix non-BSEC query_bme680: float pressure division, addGenericSensor
  for gas resistance (was addAnalogInput, overflows at > 327 Ohm)
- loop() correctly gated for both GPS and BSEC-only builds
- Add fix_bsec_lib.py extra_script to resolve nRF52840 hard-float ABI
  mismatch in Bosch's PlatformIO packaging, silly Bosch

One general note outside of this code change: I noticed while BME680
_functions_ in companion nodes, since companion nodes run Bluetooth,
BLE preempts the CPU, and can do so mid-I2C-transaction.

This can cause the BME680 to see an anomaly and drop calibration and
start a recalibrate. This is behavior that will exist (and has existed)
regardless of using the Adafruit or Bosch paths.

This particular companion behavior does not seem to occur in sensor
or repeater nodes since their BLE is off. Probably affects other
I2C devices as well.

*Tests:*

- RAK19003
- RAK19007
- RAK19001
- repeater, sensor, companion
2026-05-27 15:33:48 -06:00