Commit Graph
117 Commits
Author SHA1 Message Date
mikecarper 135d361368 Require fresh complete GPS observations before clock synchronization 2026-10-16 19:48:34 -07:00
mikecarper 774c2adc80 Add adaptive RAK4631 SD storage to full firmware profiles 2026-10-16 01:18:26 -07:00
mikecarper 4b465f9966 Close GPS-owned UARTs before sleeping receivers 2026-10-15 23:07:37 -07:00
mikecarper 8eced48d34 Fix peripheral power shutdown and auto-detect Station G3 radio slots 2026-10-15 22:30:37 -07:00
mikecarper eebba0cb9a Add opt-in RAK15002 SD firmware seeder with isolated SPI and cache regression tests 2026-10-15 15:10:44 -07:00
mikecarper 8a49a98709 Support Meshtext beacons across LoRa radio families
Add checked protocol adapters for every project LoRa family and enable Indicator LoRa TX. Preserve normal modem restoration, LR1110 fast hops, LR2021 side detectors and physical-band power limits.

Fix SX1276 beacon CAD completion dispatch, concrete-chip validation on multi-chip variants, no-GPS sensor hook linkage and STM32 file construction. Add fault, negative-control and preset coverage to CI. Keep flash-constrained STM32 artifacts disabled after measured opt-in overflows.
2026-10-14 10:22:04 -07:00
mikecarper 368770656f Fix WisBlock GPS power policy and preserve shared peripherals 2026-10-13 09:55:32 -07:00
mikecarper 1f1a499482 Add opt-in low power Sensor dog tracking
Acquire fresh GPS and validated UTC, check an authenticated owner Companion, and apply saved lost-status cadence with bounded awake windows. Persist request tags, routes, and six-hour flood reservations; preserve the four-day cutoff across sleep and restart.

Keep Dispatcher recovery active after a failed radio wake, honor denied flood retries after lost TxDone, and qualify GPS ownership and clock corrections. Add executable regression tests and nRF52/ESP32 Sensor build jobs.

Validation: six firmware builds, 1829 native test cases, sanitized tracker/storage/GPS/sleep/recovery tests, and strict documentation build. Bluetooth Find My advertising and automatic Room mailbox polling remain separate work.
2026-10-10 20:08:58 -07:00
mikecarper d12263a6b0 Keep nRF52 GPS discovery from blocking USB setup 2026-10-05 15:01:40 -07:00
mikecarper d2c8bf12fe Keep ESP32 USB startup responsive during optional GPS discovery 2026-10-05 13:31:28 -07:00
mikecarper d454250cab Fix USB logging session safety and add hourly GPS sync interval 2026-10-03 15:43:35 -07:00
mikecarper 29de7820e5 Integrate upstream fixes and paired nRF52 sensor OTA release profiles 2026-10-02 17:52:12 -07:00
mikecarper 9127f8fe25 Detect header W25Q16 on unified RAK firmware 2026-09-25 14:20:29 -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 541980a82f fix: harden LoRa OTA chain and storage 2026-08-29 06:58:48 -07:00
mikecarper c6476b8ba8 feat: consolidate full companion runtime profiles 2026-08-28 08:47:26 -07:00
mikecarper 131bbafc67 feat: retain multi-channel voltage telemetry 2026-08-25 22:51:22 -07:00
mikecarper 9d57a3a4f8 feat: complete Cascade Indicator companion support
Add native-resolution Indicator UI, touch navigation, SD-backed pixel and emoji fonts, LoRa radio support, dual-slot WiFi Companion provisioning, and mesh clock fallback. Harden radio recovery and build defaults, normalize ESP32 setup-AP protocols, and document/test the operator workflows.
2026-08-25 18:37:17 -07:00
mikecarper ba70c5b3c6 Harden fast RXPS timing and board behavior 2026-08-24 15:10:54 -07:00
mikecarper 47993d178e Update MeshCore features and OTA layout handling 2026-08-18 23:17:42 -07:00
mikecarper dcca80b6e6 Merge PR #3234: probe and claim Bosch sensor addresses
Use automatic 0x76/0x77 fallback probing while preserving the newer sensor manager implementation.
2026-08-17 23:57:27 -07:00
agessaman 2a6eabe120 fix(sensors): probe BMP/BME at both 0x76 and 0x77
Grove and other Bosch modules strap SDO high, so the 0x76-only table
never initialized them. Add an alternate-address entry per Bosch sensor;
the bus scan still gates every probe, and all four drivers verify a chip
ID before claiming an address.

Each sensor type has a single static driver instance, so skip an entry
whose query is already active: the alternate address is a fallback, not
a second device.
2026-08-17 14:59:59 -07:00
agessaman 2b0ed00004 fix(sensors): claim an I2C address after a successful init
Several table entries share an address and not every driver verifies a
chip ID: INA226::begin() only checks that the address ACKs, so an SHT4x
at 0x44 was also registered as an INA226 and reported junk current on a
second channel. Mark the address consumed once a driver initializes it
so later entries cannot re-claim the same device.
2026-08-17 14:58:49 -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 6334f602f1 Added polling period and powersave of I2C GPS for RAK12500 2026-08-09 12:41:29 +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 9a4834b192 Merge PowerSaving v16 updates 2026-07-24 01:34:35 -07:00
mikecarper 371d86c4b1 Normalize tracked text to ASCII 2026-07-22 00:43:38 -07:00
Kevin Le d16843d5ea GPS PowerSaving v1.3: Supported dynamic GPS_EN for RAK boards 2026-07-22 12:07:27 +07:00
Kevin Le 75cc95f17f GPS PowerSaving 1.2: Fix gps on / off for RAK boards 2026-07-20 22:47:27 +07:00
Kevin Le a7a4e52947 GPS PowerSaving v1.1: Added support for BLE companions 2026-07-20 16:19:27 +07:00
mikecarper ccce0c8d75 feat: prepare v1.16.07 firmware release 2026-07-18 14:53:56 -07:00
mikecarper 129e687c02 Merge PowerSaving v16 updates 2026-07-17 16:32:06 -07:00
mikecarper f7b7edf393 Merge upstream dev 2026-07-17 16:17:16 -07:00
Kevin Le 16fbf33582 PowerSaving GPS version 1 for repeaters 2026-07-16 18:48:39 +07:00
Ryan Gregg 16b76bd35a Merge remote-tracking branch 'upstream/dev' into rak-ethernet
# Conflicts:
#	examples/companion_radio/main.cpp
2026-07-13 23:06:00 -07:00
Jody Bentley 63731d3fbf sensors: fix millis() rollover stall in GPS time-sync + minor cleanups
next_check and next_gps_update stored a future millis() value in a signed
long and compared with a naive '>'. After the ~24.8-day millis() sign flip
the deadline sits above the wrapped millis(), so the block never runs again
and GPS->RTC time-sync (and the location cache refresh) stall permanently
until reboot. Switch to unsigned deadlines with the wrap-safe signed-
difference compare '(long)(millis() - deadline) > 0', matching the idiom in
Dispatcher::millisHasNowPassed.

Also: reorder the MicroNMEALocationProvider ctor init-list to declaration
order (silences -Wreorder) and drop the always-true 'if (_claims > 0)' guard
in claim() (claim() always runs after _claims++, so it is >= 1).
2026-07-12 18:30:40 -04:00
mikecarper 4f8f36354e Restore Keymind features after LoRa OTA merge 2026-07-11 12:45:02 -07:00
mikecarper 4813b9eea4 Merge remote-tracking branch 'upstream/pr-2367' into keymindCascade
# Conflicts:
#	build-iotthinks.sh
#	build.sh
#	docs/cli_commands.md
#	examples/companion_radio/MyMesh.cpp
#	examples/companion_radio/main.cpp
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_repeater/MyMesh.h
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	src/helpers/ESP32Board.h
#	src/helpers/SimpleMeshTables.h
#	src/helpers/sensors/EnvironmentSensorManager.cpp
#	variants/heltec_ct62/platformio.ini
#	variants/heltec_t096/T096Board.cpp
#	variants/heltec_t096/platformio.ini
#	variants/heltec_tracker/platformio.ini
#	variants/heltec_tracker_v2/platformio.ini
#	variants/heltec_v2/platformio.ini
#	variants/heltec_v3/platformio.ini
#	variants/heltec_v4/HeltecV4Board.cpp
#	variants/heltec_v4/platformio.ini
#	variants/heltec_wireless_paper/platformio.ini
#	variants/lilygo_tbeam_1w/platformio.ini
#	variants/lilygo_tbeam_SX1262/platformio.ini
#	variants/lilygo_tbeam_SX1276/platformio.ini
#	variants/lilygo_tbeam_supreme_SX1262/platformio.ini
#	variants/lilygo_tlora_v2_1/platformio.ini
#	variants/xiao_c3/platformio.ini
#	variants/xiao_s3/platformio.ini
#	variants/xiao_s3_wio/platformio.ini
2026-06-22 18:13:18 -07: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
mikecarper 2acd61ec84 Remove PowerSaving changes from Halo retry branch 2026-06-15 16:02:22 -07:00
Kevin Le e0733f8346 Added 0x77 for ENV_INCLUDE_BME680_BSEC 2026-06-09 11:34:36 +07:00
Kevin Le e67933ca2a PowerSaving 16 2026-06-08 21:11:49 +07:00
ripplebiz bb6cf8396d Merge pull request #2634 from NickDunklee/bme680-fixes-consolidation
feat: Integrate BME680 Bosch BSEC support for RAK4631
2026-06-01 13:35:32 +10:00
Nick Dunklee f86e6c019c 8 hour save window, LP, 28 day calibration window 2026-05-28 18:35:22 -06:00
Nick Dunklee e501704d2c Am idiot, and deleted some of the adafruit code path
I put it back and test-compiled a few builds.
2026-05-27 16:28:15 -06: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
Rafał Wojdyła eb53c61f17 Respect predefined I2C addresses in EnvironmentSensorManager 2026-05-24 13:16:50 +02:00
Ryan Gregg 87bed4946c Merge remote-tracking branch 'upstream/dev' into rak-ethernet
# Conflicts:
#	examples/companion_radio/main.cpp
2026-05-18 20:57:28 +00:00