Commit Graph
1780 Commits
Author SHA1 Message Date
mikecarper d37fefc204 Avoid legacy OTA proof collisions 2026-08-19 11:43:25 -07:00
mikecarper 425e8c81f3 Harden and qualify compact RAK3401 OTA updates 2026-08-19 11:17:22 -07:00
mikecarper e742333a0e Update MeshCore features and OTA layout handling 2026-08-18 23:17:42 -07:00
mikecarper e4c8ae5a0b Expose Companion WiFi and radio power controls 2026-08-18 16:51:59 -07:00
mikecarper 7a4da3ccfb Fix Cascade power saving, USB Companion, and mOTA flows 2026-08-18 14:02:10 -07:00
mikecarper bdd7d36b40 Merge remote-tracking branch 'upstream/dev' into keymindCascade
# Conflicts:
#	examples/simple_repeater/MyMesh.cpp
2026-08-18 11:51:58 -07:00
fdlamotte 29b33467fb Merge pull request #3180 from fdlamotte/thinknode_m8
thinknode_m8: initial support

adds some functionalities to ui_task and epddisplay:

epd display, 
- supports screen off, and clear screen
- supports forcing full refresh every N partial refreshes (off by default, configured to 60 for M8)

ui_task
- UI_SHOW_CLOCK flag to display clock on first screen
- rotary button can act like joystick (with regards to Enter key), defaults to old config for existing nodes
- screen off on long press when using rotary button (very handy for the watch)
2026-08-18 09:33:42 -04:00
Rastislav Vysoky d65da5a81a fix: move MeshadventurerBoard.h to correct location 2026-08-18 13:51:55 +02:00
mikecarper 76d38384a4 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
mikecarper a92215fd07 Merge PR #3214: companion USB connection and flow control
Preserve the newer terminal and mOTA passthrough paths while adding real USB client detection and whole-frame transmit pacing.
2026-08-17 23:55:40 -07:00
mikecarper 829241f615 Merge upstream dev
Resolve the LR2021 transmit-power receiver restart alongside local radio state caching.
2026-08-17 23:49:41 -07:00
mikecarper c76ee004f1 Merge IoTThinks PowerSaving-v17
Port current-compatible power-saving updates while retaining newer local implementations.
2026-08-17 23:45:06 -07:00
IoTThinks 11222035ee Merge pull request #15 from Dom4n/fix/powersaving-v17-noise-floor-after-agc-reset
fix(radio): recalibrate noise floor after AGC reset
2026-08-18 11:02:46 +07:00
Kevin Le 307bc938b5 Fixed RXPS for LR1110 2026-08-18 09:29:12 +07:00
Jarosław Domański be4b276931 fix(radio): preserve RX during noise floor calibration 2026-08-18 03:08:20 +02:00
Jarosław Domański 0965a6aad1 fix(radio): recalibrate noise floor after AGC reset 2026-08-18 02:32:19 +02: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
Florent 7f664f100d gxepd: do full refresh before screen off ... so wakes quicker ;) 2026-08-17 09:41:51 -04:00
Huw Duddy 9387f55d7e trimmed comment 2026-08-17 23:16:01 +10:00
Florent 0a595ae79d gxepddisplay: better handling of full refresh (no faint partial afterwards !!!) 2026-08-16 11:40:13 -04:00
mikecarper bcedfdd019 Keep T-Beam companion available without radio 2026-08-15 22:34:45 -07:00
mikecarper 7afa6b11a8 Add T-Beam WiFi button toggle 2026-08-15 18:12:09 -07:00
mikecarper 933697f65c Fix Companion device power saving 2026-08-15 17:58:37 -07:00
mikecarper 9161dfd7d5 Expose RX power saving in WebConfig 2026-08-15 09:07:41 -07:00
Kevin Le 8a5f7cae85 Merge branch 'PowerSaving-v17' of https://github.com/IoTThinks/MeshCore into PowerSaving-v17 2026-08-15 18:30:01 +07:00
Kevin Le e1758d2ece Fixed for T096 OLED to save 3.5mA and use dark theme 2026-08-15 18:26:32 +07:00
IoTThinks ca85060c42 Merge pull request #13 from Dom4n/feature/rxps-v1.17.1-clean
RX power saving using rx duty cycle
2026-08-15 17:12:54 +07:00
mikecarper 8decf0ba85 Restore normal T-Beam 1W RXEN startup 2026-08-14 20:11:36 -07:00
mikecarper 366f6ab73d Add T-Beam 1W external LNA control 2026-08-14 17:45:51 -07:00
Fedor Kallay 114093ee0e fix(lr2021): setTxPower() could leave the receiver down until reboot
RadioLibWrapper::setTxPower() called setOutputPower() and nothing else. On
LR2021 that writes the PA config and TxParams, which are standby-only commands,
and it never re-arms the receiver.

This only affects LR2021 boards. recvRaw() has:

    #if defined(USE_LR2021)
      state = STATE_RX;    // LR2021 stays in Rx after readData
    #else
      state = STATE_IDLE;  // need another startReceive()
    #endif

so on SX126x the next recvRaw() re-arms Rx anyway and the write is harmless,
while on LR2021 startReceive() is never called again on its own. A 'set tx'
issued while the radio was listening could therefore stop reception until the
next reboot. Observed a few times on an LR2021 repeater; recovery required a
power cycle.

Dispatcher's stuck-radio check does not catch it: isInRecvMode() reports the
wrapper's own `state` flag rather than the chip's actual mode, so it still
believes the radio is in Rx, and it only raises ERR_EVENT_STARTRX_TIMEOUT
without attempting recovery.

Fix: on LR2021, drop to standby via idle() before writing the PA config and let
checkRecv() re-arm Rx - the same pattern resetAGC() and
applySideDetectorConfig() already use. Other radios are left untouched.

Affects meshtracker_x1 and meshnology_w12 (both USE_LR2021).

Tested on hardware with an LR2021 repeater: six consecutive 'set tx' changes
(15/18/21/14/19/14), after which the radio kept receiving and forwarding
traffic (rawrx/rxpkts increasing, no missed IRQs). Noise-floor sampling also
kept updating, which only happens while state == STATE_RX.
2026-08-15 02:31:19 +02:00
mikecarper 759a35fc4f Fix complete firmware matrix builds 2026-08-14 15:16:03 -07:00
rootandClaude Fable 5 a7724b9ec6 Add flow control to the companion USB interface
The contact sync streams up to MAX_CONTACTS frames back to back, but
ArduinoSerialInterface never checked whether the stream could take
them: isWriteBusy() returned false unconditionally, so MyMesh's pacing
gate had no effect, and writeFrame() called write() without looking at
availableForWrite(). On ESP32 (HWCDC, 256 byte TX ring) a host that
stalls for a moment makes the driver drop queued bytes silently, which
tears a frame in half - and since the framing is length prefixed with
no checksum and no resync marker, the client stays desynchronised for
the rest of the session. Reported as 'the app disconnects while
syncing contacts' on devices with a large contact list.

Add opt-in flow control: report busy until a whole frame fits, and
drop frames as a unit instead of tearing them. Enable it for the
companion USB interface and give HWCDC a bigger TX buffer with a short
write timeout, mirroring what kiss_modem already does.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 20:16:20 +02:00
rootandClaude Fable 5 ab492ba187 Report the real USB client connection state in companion builds
ArduinoSerialInterface::isConnected() always returned true, so any
companion build with a USB interface believes a client is attached from
boot onwards. Two user visible effects:

- new message notifications never fire, because MyMesh only notifies
  the UI (display, buzzer) while no client is connected
- on builds that also expose BLE the home screen shows '< Connected >'
  instead of the BLE pairing PIN, so a freshly flashed device cannot be
  paired at all

Add an optional connection check callback and wire it up per platform:
native USB-CDC (TinyUSB on nRF52/RP2040/ESP32 with USB_MODE=0) exposes
real DTR through (bool)Serial. The ESP32 USB-Serial-JTAG peripheral has
no DTR concept - it reports 'connected' as soon as the host enumerated
the device - so fall back to frame activity there. Plain UARTs keep the
previous assume-connected behaviour.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 20:13:36 +02:00
Kevin Le d42f4240ff Fixed PowerSaving for ESP32 USB companions 2026-08-14 23:42:25 +07:00
Kevin Le 1e888cb31a Added POWERSAVING_DEBUG 2026-08-14 23:42:25 +07:00
Kevin Le 6e4e6f16a6 Prevented back-powering to save 2.8 mA for ST7735Display 2026-08-14 23:42:25 +07:00
Kevin Le 687bac55eb Time keep for ESP32 accross reboots 2026-08-14 23:42:25 +07:00
Kevin Le 772dc84708 Time keep for NRF52 across resets 2026-08-14 23:42:25 +07:00
Kevin Le a00fbbe252 Removed obsolete enterDeepSleep of TBbeam 2026-08-14 23:42:25 +07:00
Kevin Le 4cb67d9054 GPS PowerSaving, outpath, sensor, reboot.interval, board_build.ldscript 2026-08-14 23:36:52 +07:00
Kevin Le 594d770968 PowerSaving for companions 2026-08-14 23:36:52 +07:00
mikecarper 7605b12cc7 Merge remote-tracking branch 'review/observer-firmware' into keymindCascade
# Conflicts:
#	.github/workflows/build-observer-firmwares.yml
#	.gitignore
#	MQTT_IMPLEMENTATION.md
#	MQTT_INTERNALS.md
#	README.md
#	STABILITY_TESTABILITY_HANDOFF.md
#	docs/cli_commands.md
#	examples/companion_radio/MyMesh.cpp
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_repeater/UITask.cpp
#	examples/simple_room_server/MyMesh.cpp
#	examples/simple_room_server/UITask.cpp
#	examples/simple_sensor/SensorMesh.cpp
#	platformio.ini
#	scripts/generate_webconfig_html.py
#	scripts/webconfig_mock_server.py
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	src/helpers/JWTHelper.cpp
#	src/helpers/MQTTDefaults.h
#	src/helpers/MQTTMessageBuilder.cpp
#	src/helpers/MQTTPayloadBuilder.h
#	src/helpers/MQTTPresets.h
#	src/helpers/bridges/MQTTBridge.h
#	src/helpers/esp32/WebConfigServer.cpp
#	src/helpers/esp32/WebConfigServer.h
#	src/helpers/ui/SH1106Display.cpp
#	variants/lilygo_tbeam_SX1262/platformio.ini
#	variants/lilygo_tbeam_SX1276/platformio.ini
#	variants/lilygo_tlora_v2_1/platformio.ini
#	variants/thinknode_m7/platformio.ini
#	webui/index.html
2026-08-14 08:53:02 -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
mikecarper c2e64da695 Merge remote-tracking branch 'upstream/dev' into keymindCascade
# Conflicts:
#	examples/companion_radio/MyMesh.cpp
#	examples/companion_radio/NodePrefs.h
#	examples/simple_repeater/MyMesh.cpp
#	examples/simple_room_server/MyMesh.cpp
#	examples/simple_room_server/MyMesh.h
#	examples/simple_sensor/SensorMesh.cpp
#	src/Identity.cpp
#	src/MeshCore.h
#	src/Utils.cpp
#	src/helpers/CommonCLI.cpp
#	src/helpers/CommonCLI.h
#	src/helpers/radiolib/CustomLR2021Wrapper.h
#	src/helpers/radiolib/CustomSX1262Wrapper.h
#	src/helpers/radiolib/CustomSX1268Wrapper.h
#	src/helpers/radiolib/RadioLibWrappers.cpp
#	src/helpers/radiolib/RadioLibWrappers.h
#	src/helpers/ui/SH1106Display.cpp
#	variants/minewsemi_me25ls01/target.cpp
#	variants/minewsemi_me25ls01/target.h
#	variants/muziworks_r1_neo/target.cpp
2026-08-14 08:14:12 -07:00
Jarosław Domański 285cf10a7a RX power saving using rx duty cycle 2026-08-14 16:11:21 +02:00
mikecarper 8c5262c6f8 Accelerate adaptive LoRa OTA transfers 2026-08-14 03:00:36 -07:00
Scott Powell fcb9bdf209 * combine radio's entropy with CC310 RNG 2026-08-14 17:46:43 +10:00
mikecarper cd824765b4 Prioritize and pace private TempRadio OTA 2026-08-13 17:53:33 -07:00
mikecarper f7c2d382c3 Speed up and harden LoRa OTA transfers 2026-08-13 14:43:59 -07:00