🚀 Enhancements
- Reduce key duplication by enabling hardware RNG by @Komzpa in #8803
- Test PR to remove LED_BUILTIN by @jp-bennett in #10179
- No longer need undefines, thanks to #10179 by @jp-bennett in #10180
- Add MCP server for interacting with meshtastic devices and testing framework / TUI by @thebentern in #10194
- Add authoring guide for native unit tests in README.md by @NomDeTom in #10201
- Add USB camera and uhubctl support for new test suite. Also included some bug fixes by @thebentern in #10204
- Add encryption overview to agent instructions in AGENTS.md by @thebentern in #10207
- Improve options to align to names of UI options by @Xaositek in #10240
- Finish evil merge cleanup by @jp-bennett in #10253
- We have HardwareRNG, let's use it! by @jp-bennett in #10274
- Add search duration check for exceeding 15 minutes by @jp-bennett in #10293
- Native MacOS hello world by @thebentern in #10309
- MacOS: enable CH341 LoRa-hardware path (fix serial truncation, document setup) by @thebentern in #10320
- Add clamping logic for milliseconds conversion and unit tests by @thebentern in #10326
- Add TCP support for Meshtastic MCP interface / tests and update docs by @thebentern in #10355
- Docker: Install grpcio-tools from distro by @vidplace7 in #10358
- MacOS: Correct pkg-config name
opensslfor ulfius. by @vidplace7 in #10369 - Smart pointers and memory management cleanup by @thebentern in #10400
- Enhance GPS search failure handling backoff logic by @thebentern in #10404
🐛 Bug fixes and maintenance
- Fix(native): implement BinarySemaphorePosix with proper pthread synchronization by @iannucci in #9895
- Meshtasticd: Add configs for ebyte-ecb41-pge (mPWRD-OS) by @vidplace7 in #10086
- Meshtasticd: Add configs for forlinx-ok3506-s12 (mPWRD-OS) by @vidplace7 in #10087
- Fix Linux Input enable logic by @jp-bennett in #10093
- PPA: Use SFTP method for uploads by @vidplace7 in #10138
- Switch PlatformIO deps from PIO Registry to tagged GitHub zips by @vidplace7 in #10142
- Fix display method to use const qualifier for previousBuffer pointer by @vidplace7 in #10146
- Fix last cppcheck issue by @caveman99 in #10154
- Fix heap blowout on TBeams by @thebentern in #10155
- Add PortduinoSetOptions to overwrite the realhardware bool by @jp-bennett in #10157
- Support for Spreading Factors 5 and 6 on compatible radios by @derpyspike in #10160
- Add meshtasticd config for Luckfox Pico Max Waveshare Pico LoRa HAT by @Ruledo in #10175
- Prompt markdownlint md040 fix for new prompts. by @h3lix1 in #10199
- Feat(t5s3-epaper): add InkHUD port for LilyGo T5 E-Paper S3 Pro by @giannoug in #10211
- SX126x: re-apply 0x8B5 register in resetAGC() to preserve RX sensitivity by @nightjoker7 in #10219
- Detach power interrupts for sleep by @jp-bennett in #10230
- T watch pinfix by @jp-bennett in #10231
- Add heltec-v4-r8 board by @Quency-D in #10268
- Remove incorrect LED_STATE_ON definition for t-beam-s3 by @jp-bennett in #10280
- Fix(Router): localize p_encrypted to prevent recursive-overwrite leak by @nightjoker7 in #10311
- Actions: Build MacOS binary by @vidplace7 in #10319
- Debian: Correctly fail upon failure by @vidplace7 in #10341
- Do not FACTORY_INSTALL on ARCH_PORTDUINO by @vidplace7 in #10343
- Docker: Build for riscv64 by @vidplace7 in #10345
- Docker-Alpine: Align version between build/main stages by @vidplace7 in #10347
- Fix MAC_from_string to use input parameter instead of global config for MAC address parsing by @thebentern in #10356
- Add ulfius webserver support to macos native target by @thebentern in #10366
- Update PhoneAPI.cpp to reduce chattiness by @Xaositek in #10367
- Use OBS instead of flaky launchpad by @thebentern in #10375
- Add informSearchFailed method to update GPS power state handling by @thebentern in #10394
- Fix GPS initialization logic for Portduino configuration by @jessm33 in #10395
⚙️ Dependencies
- Update meshtastic-esp32_https_server digest to 0c71f38 by @app/renovate in #10081
- Update meshtastic-st7789 digest to 222554e by @app/renovate in #10121
- Update actions/github-script action to v9 by @app/renovate in #10122
- Update meshtastic-st7789 digest to 7228c49 by @app/renovate in #10131
- Update pnpm/action-setup action to v6 by @app/renovate in #10132
- Update meshtastic-st7789 digest to 4d957e7 by @app/renovate in #10134
- Update meshtastic-st7789 digest to a787bee by @app/renovate in #10147
- Update softprops/action-gh-release action to v3 by @app/renovate in #10150
- Update platform-native digest to 71ed55b by @app/renovate in #10165
- Update meshtastic-st7789 digest to 92bae2e by @app/renovate in #10182
- Update meshtastic/device-ui digest to 5305670 by @app/renovate in #10183
- Update meshtastic/device-ui digest to 56e1da4 by @app/renovate in #10195
- Update GxEPD2 to v1.6.9 by @app/renovate in #10212
- Update LovyanGFX to v1.2.20 by @app/renovate in #10232
- Update meshtastic-esp8266-oled-ssd1306 digest to 6bfd1f1 by @app/renovate in #10277
- Update platform-native digest to 135b91e by @app/renovate in #10300
- Update meshtastic/device-ui digest to 7289329 by @app/renovate in #10313
- Update platform-native digest to 4ea5e09 by @app/renovate in #10314
- Update meshtastic/device-ui digest to 1ddcc9d by @app/renovate in #10328
- Update meshtastic/device-ui digest to 4bf593a by @app/renovate in #10346
- Update platform-native digest to cab4b21 by @app/renovate in #10372
- Update LovyanGFX to v1.2.21 by @app/renovate in #10373
- Update libpax digest to df42474 by @app/renovate in #10406
Full Changelog: v2.7.21.1370b23...v2.7.23.b246bcd