Skip to content

Echo 2.7.26 - #11519

Closed
leonard-stefan wants to merge 72 commits into
meshtastic:developfrom
leonard-stefan:echo-2.7.26
Closed

Echo 2.7.26#11519
leonard-stefan wants to merge 72 commits into
meshtastic:developfrom
leonard-stefan:echo-2.7.26

Conversation

@leonard-stefan

@leonard-stefan leonard-stefan commented Aug 16, 2026

Copy link
Copy Markdown

🙏 Thank you for sending in a pull request, here's some tips to get started!

❌ (Please delete all these tips and replace them with your text) ❌

  • Before starting on some new big chunk of code, it it is optional but highly recommended to open an issue first
    to say "Hey, I think this idea X should be implemented and I'm starting work on it. My general plan is Y, any feedback
    is appreciated." This will allow other devs to potentially save you time by not accidentally duplicating work etc...
  • Please do not check in files that don't have real changes
  • Please do not reformat lines that you didn't have to change the code on
  • We recommend using the Visual Studio Code editor along with the 'Trunk Check' extension (In beta for windows, WSL2 for the Linux version),
    because it automatically follows our indentation rules and its auto reformatting will not cause spurious changes to lines.
  • If your PR fixes a bug, mention "fixes #bugnum" somewhere in your pull request description.
  • If your other co-developers have comments on your PR please tweak as needed.
  • Please also enable "Allow edits by maintainers".
  • Please do not submit untested code.
  • If you do not have the affected hardware to test your code changes adequately against regressions, please indicate this, so that contributors and community members can help test your changes.
  • If your PR gets accepted you can request a "Contributor" role in the Meshtastic Discord

🤝 Attestations

  • I have tested that my proposed changes behave as described.
  • I have tested that my proposed changes do not cause any obvious regressions on the following devices:
    • Heltec (Lora32) V3
    • LilyGo T-Deck
    • LilyGo T-Beam
    • RAK WisBlock 4631
    • Seeed Studio T-1000E tracker card
    • Other (please specify below)

Summary by CodeRabbit

  • New Features
    • Added support for Heltec Mesh Node T1, T-Impulse Plus, NebraHat, ZebraHat, and additional Raspberry Pi hardware.
    • Added ICM42607P accelerometer and MMC5983MA magnetometer support, including calibration.
    • Added optional haptic feedback and LoRa receive LED notifications.
    • Added improved compass, heading, waypoint, and “No Fix” display handling.
    • Added LR20x0 radio support, noise-floor monitoring, and RSSI reporting.
    • Added automatic text-message echo responses.
  • Bug Fixes
    • Improved GPS time retention, filesystem safety, message clearing, and position precision handling.
  • Chores
    • Updated release version to 26 and refreshed build tooling.

caveman99 and others added 30 commits May 19, 2026 14:13
Current release tags are actually based upon the latest state of `develop` currently...
Specify target_commitish to always use the commit that triggered the build
Adjust keyboard cell height calculation for better layout consistency across different screen sizes.

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Manuel <71137295+mverch67@users.noreply.github.com>
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Add Lilygo T-Impulse-Plus

* Enable small screen layout 64x32

* trunk'd

* Haptic Feedback (short and long press)

* enable Charging Indicator

* enable nrfutil uploads

* trunk fmt

* Add Lilygo T-Impulse-Plus

* Enable small screen layout 64x32

* trunk'd

* Haptic Feedback (short and long press)

* enable Charging Indicator

* enable nrfutil uploads

* trunk fmt

* enable proper device model

* Dim the haptic duration a bit.

* Fix GPS pins and speed. Module enable is active low, speed is 38400

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* set correct geometry.

* Add custom_meshtastic_* metadata to t-impulse-plus platformio.ini

---------

Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
…10562)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* add heltec-mesh-node-t1

* fixed low power

* Update the sensor enumeration values.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix memory leak in ICM42607PSensor

* fix  ST7735_MISO  error

---------

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Infinite calibration loop fix

* Save calibration

* Screen refresh

* reduce repeated code

* reduce repeated code to reduce flash

* fix Waypoint compass size and no fix no heading labels

* Don't show compass unless we have a heading and location

* If no calculated heading from moving, we should have no heading

* Slow walking calculated heading and auto stale heading when not moving

* Triming flash space

* cleanup

* show "?" when no location or heading for distance and heading screen

* cleanup

* Stale heading logic

* final trim

* Compass Calibration screen redesign

* Trunk Fix

* Compile fix

* patch

* Update src/motion/MotionSensor.cpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update WaypointModule.cpp

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
… with SparkFun MMC5983MA (meshtastic#10584)

* Initial plan

* Fix SensorLib isBitSet macro conflict with SparkFun MMC5983MA library

SensorLib 0.3.4 defines isBitSet as a C preprocessor macro in SensorLib.h,
which conflicts with SparkFun_MMC5983MA_IO.h's class method of the same name.
When both libraries are included in the same translation unit (e.g., via
configuration.h → SensorRtcHelper.hpp → SensorLib chain, alongside the
SparkFun MMC5983MA library in lib_deps), the macro expansion causes compile
errors like 'expected unqualified-id before const'.

Fix: undefine the isBitSet macro right after including SensorRtcHelper.hpp
in configuration.h, so it doesn't interfere with SparkFun's class method.

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Trunk isn't properly updating the `v1` tag in-place. Switch to specific tags and let renovate handle the rest.
Maybe
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
github-actions Bot and others added 25 commits June 11, 2026 08:26
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
…tic#10671)

* Use standard GPS enable pin, for smarter power control on M3

* Enable GPS pin in variant.cpp initialization

---------

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* add optional LED_LORA to indicate LoRa TX

* Briefly flash LED_LORA on packet RX

---------

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…a/Nebra Hat Configs (meshtastic#10644)

* rebased to master

* Update bin/config.d/lora-ZebraHat_2W.yaml

Co-authored-by: Austin <vidplace7@gmail.com>

* Update bin/config.d/lora-ZebraHat_1W.yaml

Co-authored-by: Austin <vidplace7@gmail.com>

* Update bin/config.d/lora-NebraHat_2W.yaml

Co-authored-by: Austin <vidplace7@gmail.com>

* Update bin/config.d/lora-NebraHat_1W.yaml

Co-authored-by: Austin <vidplace7@gmail.com>

* Remove TX_GAIN_LORA configuration line

* Remove TX_GAIN_LORA configuration line

* Comment out TX_GAIN_LORA configuration

* Comment out TX_GAIN_LORA configuration

* Update lora-ok3506-RAK6421-13300-slot1.yaml

* Update lora-ok3506-RAK6421-13300-slot2.yaml

* Update lora-RAK6421-13300-slot1.yaml

* Update lora-RAK6421-13300-slot2.yaml

---------

Co-authored-by: Austin <vidplace7@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Wipe message Store on factory reset

* Check for destination 0 in a new message, and convert to broadcast

* Make sure CHARGE_LED_state gets turned off, to avoid stuck LEDs

* Take the spiLock in MessageStore when clearing messages

* Trunk

* Add thinknode M5 voltage curve

* Fix the oops
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
…ition (meshtastic#10739)

* fix(esp32): skip RTC timer wake on user shutdown

Do not arm esp_sleep_enable_timer_wakeup when msecToWake is portMAX_DELAY (UI shutdown), matching nRF52 system_off semantics.

fix(rak_wismesh_tap_v2): Tag OCV curve and 16MB partition

Add OCV_ARRAY matching WisMesh Tag for accurate SOC. Use 16MB flash partition scheme for TAP V2 hardware.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Trunkt

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
…htastic#10757)

* Initial plan

* fix(FSCommon): add file.name()[0] guard in getFiles() for nRF52 LittleFS bug workaround

* style(FSCommon): run clang-format (trunk fmt)

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: vidplace7 <1779290+vidplace7@users.noreply.github.com>
…meshtastic#10754)

* fix(fs): bound getFiles() result size and harden traversal

The recursive filesystem traversal in getFiles() could grow its result
vector without limit, contributing to heap pressure on memory-constrained
devices during client config starts. The implementation also relied on
unbounded strcpy and per-entry String() allocations for dot-suffix
filtering, and leaked the directory handle when the opened path was not
a directory.

Rework the traversal to address all of those at once:

- Add optional maxCount (default 64) and wasLimited out-param. The walk
  stops once maxCount entries have been collected and wasLimited is set,
  so callers can distinguish a complete listing from a truncated one.
  Default arguments preserve backward compatibility for existing callers.

- Extract the recursive walk into a collectFiles() helper in an
  anonymous namespace, accumulating into a single caller-owned vector
  instead of building and inserting temporary vectors at every recursion
  level.

- Replace strcpy with strlcpy so file_name writes are bounded by the
  destination buffer.

- Replace String(name).endsWith(".") with a stack-based
  pathEndsWithDot() helper to avoid a heap allocation per entry.

- Close the directory handle when the opened path is not a directory,
  and close the file in both branches of recursion instead of only the
  leaf branch (the previous code leaked the handle when depth was
  exhausted).

- Compile-gate the std::bad_alloc reserve probe-down behind
  __cpp_exceptions / __EXCEPTIONS so the fallback only compiles where
  bad_alloc is actually catchable. No-exception targets (nRF52, RP2040,
  STM32, ESP32-C6) skip the probe and rely on the bounded maxCount
  alone, which is safe because the default cap is small enough to fit
  comfortably in available RAM on every supported platform.

* fix(phone-api): skip manifest scan for node-info-only config requests

A client can request a node-info-only config response by sending
want_config_id with the SPECIAL_NONCE_ONLY_NODES nonce. The manifest
walk in handleStartConfig() ran unconditionally even though
STATE_SEND_FILEMANIFEST short-circuits past the manifest on that path,
so the SPI lock and recursive filesystem traversal were wasted work.
On memory-constrained devices this extra heap pressure was enough to
trigger allocation aborts and spontaneous reboots before the node-info
response could complete.

Gate the manifest call behind config_nonce != SPECIAL_NONCE_ONLY_NODES
so the node-info-only path no longer touches the filesystem at all, and
release any stale manifest storage left over from a previous run.

For normal full-config requests, also tighten the scan limits from
depth 10 / unbounded to depth 3 / max 64 entries via the new getFiles()
parameters. A 10-level recursive listing was never useful for a client
file picker and amplified heap pressure for no benefit. Log a warning
when the listing was truncated so operators can distinguish a bounded
result from a genuinely empty filesystem.

A few small cleanups fall out of the above:

- Replace raw spiLock->lock()/unlock() with a LockGuard so the lock is
  released even if getFiles() throws on exception-enabled targets.

- Use a releaseFilesManifest() helper (swap-with-empty idiom) in
  close() and the STATE_SEND_FILEMANIFEST drain path instead of the
  previous clear()+shrink_to_fit() pair. Equivalent behavior, but the
  swap idiom is the canonical vector-freeing pattern and centralizing
  it avoids divergence between call sites.

- Use %zu for the size_t log arguments.

* fix(fs): harden bounded directory traversal

Close each child directory entry before recursive descent so bounded manifest scans do not stack file handles on constrained filesystems.

Treat null or overlong paths as truncated listings, handle reserve length failures like allocation failures, and keep manifest constants aligned with repository naming.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

@leonard-stefan, Welcome to Meshtastic!

Thanks for opening your first pull request. We really appreciate it.

We discuss work as a team in discord, please join us in the #firmware channel.
There's a big backlog of patches at the moment. If you have time,
please help us with some code review and testing of other PRs!

Welcome to the team 😄

@CLAassistant

CLAassistant commented Aug 16, 2026

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
16 out of 17 committers have signed the CLA.

✅ caveman99
✅ vidplace7
✅ Xaositek
✅ kpmy
✅ Bjk8kds
✅ h3lix1
✅ balya
✅ Quency-D
✅ HarukiToreda
✅ Littleaton
✅ pdxlocations
✅ mverch67
✅ Ethan-chen1234-zy
✅ jeremiah-k
✅ jp-bennett
✅ thebentern
❌ leonard-stefan
You have signed the CLA already but the status is still pending? Let us recheck it.

@coderabbitai

coderabbitai Bot commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 196859cb-afe9-447e-b680-027821bfc9a1

📥 Commits

Reviewing files that changed from the base of the PR and between 51eadb7 and d364524.

⛔ Files ignored due to path filters (4)
  • src/mesh/generated/meshtastic/atak.pb.cpp is excluded by !**/generated/**, !src/mesh/generated/**
  • src/mesh/generated/meshtastic/atak.pb.h is excluded by !**/generated/**, !src/mesh/generated/**
  • src/mesh/generated/meshtastic/config.pb.h is excluded by !**/generated/**, !src/mesh/generated/**
  • src/mesh/generated/meshtastic/mesh.pb.h is excluded by !**/generated/**, !src/mesh/generated/**
📒 Files selected for processing (148)
  • .github/actions/setup-base/action.yml
  • .github/workflows/build_debian_src.yml
  • .github/workflows/build_firmware.yml
  • .github/workflows/build_macos_bin.yml
  • .github/workflows/build_one_target.yml
  • .github/workflows/docker_build.yml
  • .github/workflows/docker_manifest.yml
  • .github/workflows/flasher-link-comment.yml
  • .github/workflows/flasher-link-placeholder.yml
  • .github/workflows/hook_copr.yml
  • .github/workflows/main_matrix.yml
  • .github/workflows/nightly.yml
  • .github/workflows/package_obs.yml
  • .github/workflows/package_pio_deps.yml
  • .github/workflows/package_ppa.yml
  • .github/workflows/pr_tests.yml
  • .github/workflows/release_channels.yml
  • .github/workflows/sec_sast_semgrep_cron.yml
  • .github/workflows/sec_sast_semgrep_pull.yml
  • .github/workflows/stale_bot.yml
  • .github/workflows/test_native.yml
  • .github/workflows/tests.yml
  • .github/workflows/trunk_annotate_pr.yml
  • .github/workflows/trunk_check.yml
  • .github/workflows/update_protobufs.yml
  • .trunk/trunk.yaml
  • alpine.Dockerfile
  • bin/config.d/lora-NebraHat_1W.yaml
  • bin/config.d/lora-NebraHat_2W.yaml
  • bin/config.d/lora-RAK6421-13300-slot1.yaml
  • bin/config.d/lora-RAK6421-13300-slot2.yaml
  • bin/config.d/lora-RAK6421-13302-slot2.yaml
  • bin/config.d/lora-ZebraHat_1W.yaml
  • bin/config.d/lora-ZebraHat_2W.yaml
  • bin/config.d/lora-ecb41-pge-RAK6421-13300-slot2.yaml
  • bin/config.d/lora-ecb41-pge-RAK6421-13302-slot2.yaml
  • bin/config.d/lora-lyra-zero-BQ-SG3-BQ35LORA900V1M-slot1.yaml
  • bin/config.d/lora-lyra-zero-RAK6421-13300-slot2.yaml
  • bin/config.d/lora-lyra-zero-RAK6421-13302-slot2.yaml
  • bin/config.d/lora-ok3506-RAK6421-13300-slot2.yaml
  • bin/config.d/lora-ok3506-RAK6421-13302-slot2.yaml
  • bin/config.d/lora-rpi-BQ-SG3-BQ35LORA900V1M-slot1.yaml
  • bin/config.d/lora-usb-meshtoad-e22.yaml
  • bin/org.meshtastic.meshtasticd.metainfo.xml
  • boards/heltec_mesh_node_t1.json
  • boards/t-impulse-plus.json
  • debian/changelog
  • debian/ci_pack_sdeb.sh
  • platformio.ini
  • protobufs
  • src/FSCommon.cpp
  • src/FSCommon.h
  • src/MessageStore.cpp
  • src/Power.cpp
  • src/configuration.h
  • src/detect/ScanI2C.cpp
  • src/detect/ScanI2C.h
  • src/detect/ScanI2CTwoWire.cpp
  • src/detect/ScanI2CTwoWire.h
  • src/gps/GPS.cpp
  • src/gps/GPS.h
  • src/gps/RTC.cpp
  • src/gps/RTC.h
  • src/graphics/Screen.cpp
  • src/graphics/Screen.h
  • src/graphics/TFTDisplay.cpp
  • src/graphics/VirtualKeyboard.cpp
  • src/graphics/draw/ClockRenderer.cpp
  • src/graphics/draw/CompassRenderer.cpp
  • src/graphics/draw/CompassRenderer.h
  • src/graphics/draw/MenuHandler.cpp
  • src/graphics/draw/NodeListRenderer.cpp
  • src/graphics/draw/NodeListRenderer.h
  • src/graphics/draw/UIRenderer.cpp
  • src/input/HapticFeedback.cpp
  • src/input/HapticFeedback.h
  • src/input/InputBroker.cpp
  • src/main.cpp
  • src/main.h
  • src/mesh/LR11x0Interface.cpp
  • src/mesh/LR11x0Interface.h
  • src/mesh/LR20x0Interface.cpp
  • src/mesh/LR20x0Interface.h
  • src/mesh/MeshService.cpp
  • src/mesh/NodeDB.cpp
  • src/mesh/PhoneAPI.cpp
  • src/mesh/PositionPrecision.cpp
  • src/mesh/PositionPrecision.h
  • src/mesh/RF95Interface.cpp
  • src/mesh/RF95Interface.h
  • src/mesh/RadioInterface.cpp
  • src/mesh/RadioInterface.h
  • src/mesh/RadioLibInterface.cpp
  • src/mesh/RadioLibInterface.h
  • src/mesh/Router.cpp
  • src/mesh/SX126xInterface.cpp
  • src/mesh/SX126xInterface.h
  • src/mesh/SX128xInterface.cpp
  • src/mesh/SX128xInterface.h
  • src/modules/AdminModule.cpp
  • src/modules/CannedMessageModule.cpp
  • src/modules/StatusLEDModule.cpp
  • src/modules/StatusLEDModule.h
  • src/modules/Telemetry/DeviceTelemetry.cpp
  • src/modules/WaypointModule.cpp
  • src/motion/AccelerometerThread.h
  • src/motion/BMM150Sensor.cpp
  • src/motion/BMX160Sensor.cpp
  • src/motion/BMX160Sensor.h
  • src/motion/ICM20948Sensor.cpp
  • src/motion/ICM20948Sensor.h
  • src/motion/ICM42607PSensor.cpp
  • src/motion/ICM42607PSensor.h
  • src/motion/MMC5983MASensor.cpp
  • src/motion/MMC5983MASensor.h
  • src/motion/MagnetometerThread.h
  • src/motion/MotionSensor.cpp
  • src/motion/MotionSensor.h
  • src/platform/esp32/main-esp32.cpp
  • src/platform/nrf52/architecture.h
  • src/platform/portduino/SimRadio.cpp
  • src/platform/portduino/SimRadio.h
  • src/power/SGM41562.cpp
  • src/power/SGM41562.h
  • test/test_position_precision/test_main.cpp
  • test/test_rtc/test_main.cpp
  • variants/esp32/esp32-common.ini
  • variants/esp32s3/ELECROW-ThinkNode-G3/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M5/variant.h
  • variants/esp32s3/ELECROW-ThinkNode-M7/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M7/variant.cpp
  • variants/esp32s3/ELECROW-ThinkNode-M7/variant.h
  • variants/esp32s3/picomputer-s3/platformio.ini
  • variants/esp32s3/rak_wismesh_tap_v2/platformio.ini
  • variants/esp32s3/rak_wismesh_tap_v2/variant.h
  • variants/esp32s3/t-deck/platformio.ini
  • variants/native/portduino.ini
  • variants/nrf52840/ELECROW-ThinkNode-M3/variant.cpp
  • variants/nrf52840/ELECROW-ThinkNode-M3/variant.h
  • variants/nrf52840/heltec_mesh_node_t1/platformio.ini
  • variants/nrf52840/heltec_mesh_node_t1/variant.cpp
  • variants/nrf52840/heltec_mesh_node_t1/variant.h
  • variants/nrf52840/t-echo-card/platformio.ini
  • variants/nrf52840/t-impulse-plus/platformio.ini
  • variants/nrf52840/t-impulse-plus/variant.cpp
  • variants/nrf52840/t-impulse-plus/variant.h
  • variants/stm32/stm32.ini
  • version.properties

📝 Walkthrough

Walkthrough

The pull request updates CI actions and release configuration, adds new board and sensor support, revises compass and display behavior, introduces haptic feedback and charger support, bounds filesystem traversal, extends radio interfaces, and adds RTC and position-precision tests.

Changes

Firmware integration

Layer / File(s) Summary
CI, hardware variants, and release configuration
.github/..., boards/*, variants/*, bin/config.d/*, platformio.ini, version.properties
Updates GitHub Actions, board definitions, hardware configurations, dependency pins, release metadata, and build version settings.
Filesystem, charger, and sensor integration
src/FSCommon.*, src/power/*, src/detect/*, src/motion/*
Bounds file discovery, adds SGM41562 support, detects new I2C devices, and adds ICM42607P and MMC5983MA drivers with calibration persistence.
GPS, compass, and display behavior
src/gps/*, src/graphics/*, src/input/*
Updates RTC fallback and GPS state handling, smooths compass headings, renders unavailable-heading states, and adds conditional haptic feedback.
Mesh, radio, and module behavior
src/mesh/*, src/modules/*, src/main.*
Adds LR20x0 support, RSSI and noise-floor APIs, LoRa receive notifications, message echoing, bounded manifests, precision handling, and LoRa LED feedback.
Validation and platform support
test/*, src/platform/*, debian/*
Adds RTC and position-precision tests and updates platform sleep, packaging, and variant support paths.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: hardware-support, enhancement, github_actions

Suggested reviewers: thebentern

✨ Finishing Touches 💡 1
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch echo-2.7.26
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Warning

⚠️ This pull request shows signs of AI-generated slop (description_diff_mismatch, ai_padded_prose). It has been flagged by CodeRabbit slop detection and should be reviewed carefully.

@thebentern thebentern closed this Aug 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.