Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3908 commits
Select commit Hold shift + click to select a range
468247f
ADD - heltec v4 support to device install bat (#8528)
Melonbwead Nov 3, 2025
f6370be
Add the identification code for the DA217 triaxial accelerometer. (#8…
Quency-D Nov 3, 2025
538c05a
Revert "ADD - heltec v4 support to device install bat (#8528)" (#8532)
thebentern Nov 3, 2025
8d1b9c9
Merge pull request #8531 from meshtastic/master
thebentern Nov 3, 2025
cf716fe
fix strlcpy compile error in Ubuntu 22.04 (#8520)
mverch67 Nov 3, 2025
9162142
Packaging: Add libbsd where needed (#8533)
vidplace7 Nov 3, 2025
8395429
nrf52: add watchdog (#8485)
SebKuzminsky Nov 4, 2025
3ed831b
Add support for RAK_WISMESH_TAP_V2 and RAK3401 hardware models (#8537)
DanielCao0 Nov 4, 2025
03f69b3
Update RadioLib to v7.4.0 (#8456)
renovate[bot] Nov 4, 2025
0a13bca
Upgrade trunk (#8437)
github-actions[bot] Nov 4, 2025
f2400c9
Update platform-native for WIFi lib fix (#8544)
jp-bennett Nov 4, 2025
6b55ec6
chore(deps): update python to v3.14.0 (#8542)
renovate[bot] Nov 4, 2025
a579a9d
chore(deps): update adafruit pct2075 to v1.0.6 (#8548)
renovate[bot] Nov 4, 2025
3e40d78
Revert "nrf52: add watchdog (#8485)" (#8554)
Xaositek Nov 5, 2025
ce2e08e
Don't Favorite Nodes if our Role is CLIENT_BASE (#8558)
Xaositek Nov 5, 2025
45bf246
fix missing key 0 (#8564)
mverch67 Nov 6, 2025
7b14b17
Store hop/mqtt/transport mechanism info in S&F (#8560)
weebl2000 Nov 6, 2025
69db3bd
Reject legacy text message DMs (#8562)
jp-bennett Nov 6, 2025
6a6c409
addFromContact: Don't auto-favorite when CLIENT_BASE; don't update la…
compumike Nov 6, 2025
5ba04ad
Update protobufs (#8566)
github-actions[bot] Nov 6, 2025
112b294
Store hop/mqtt/transport mechanism info in S&F (#8560)
weebl2000 Nov 6, 2025
4d86bba
addFromContact: Don't auto-favorite when CLIENT_BASE; don't update la…
compumike Nov 6, 2025
0725b46
Merge branch 'master' into develop
thebentern Nov 6, 2025
6cad393
Persist favourites on NodeDB reset (#8292)
ford-jones Nov 6, 2025
77e0a24
Discard everything if downlink isn't on (#8578)
RCGV1 Nov 7, 2025
7eca061
Bugfix: Don't toggle BLE when choosing active state (#8579)
jp-bennett Nov 7, 2025
bdb3fb1
Persist favourites on NodeDB reset (#8292)
ford-jones Nov 6, 2025
b25797e
Discard everything if downlink isn't on (#8578)
RCGV1 Nov 7, 2025
e76013f
Try-fix traceroute panic (#8568)
thebentern Nov 7, 2025
85afd70
chore(deps): update meshtastic/device-ui digest to 28167c6 (#8583)
renovate[bot] Nov 7, 2025
b707001
Upgrade trunk (#8552)
github-actions[bot] Nov 7, 2025
531cad5
Add API types, state, and log message in Debug screen. Added persiste…
jp-bennett Nov 7, 2025
8fe98db
Drop PKI acks if there is no downlink on MQTTClientProxy (#8580)
RCGV1 Nov 8, 2025
b868279
Drop PKI acks if there is no downlink on MQTTClientProxy (#8580)
RCGV1 Nov 8, 2025
50f9be9
Add the Heltec v4 expansion box. (#8539)
Quency-D Nov 8, 2025
602945f
Add the Heltec v4 expansion box. (#8539)
Quency-D Nov 8, 2025
1c0c6b2
Automated version bumps (#8527)
github-actions[bot] Nov 3, 2025
36c2178
Update to Pro-micro variants (#8600)
NomDeTom Nov 9, 2025
beaebda
stm32wl: Wrap and remove some functions that pull in large amounts of…
Stary2001 Nov 10, 2025
7d2744f
Change RadioLib to commit zip til 7.4.1+ is released
caveman99 Nov 10, 2025
e959000
Only call stopNow if we're nagging (#8601)
thebentern Nov 10, 2025
a62fed3
Merge pull request #8610 from meshtastic/fix-ldro
caveman99 Nov 10, 2025
4118e1c
Cleanup unnecessary global dereferencing in CryptoEngine (#8611)
jasonbcox Nov 11, 2025
7212fb9
Fix null pointer dereference in radio chip region check (#8613)
Andrik45719 Nov 11, 2025
4df6627
Upgrade trunk (#8606)
github-actions[bot] Nov 12, 2025
0aa11d8
Clean up GPS toggle logging
jp-bennett Nov 13, 2025
034aaa3
Automated version bumps (#8626)
github-actions[bot] Nov 14, 2025
4284fc2
Feat/6704 neighbor info on demand (#8523)
DaneEvans Nov 16, 2025
955347b
Remove fixed scaling in Digital Clock (#8620)
Xaositek Nov 16, 2025
84bb1e3
Add code for preserving favorites, also move to Home screen before re…
Xaositek Nov 16, 2025
6e3be13
Reset the calibration data back to 0 when doing a compass calibration
jp-bennett Nov 16, 2025
df063f4
Try to look for a config file based on the HAT vendor/product for aut…
Stary2001 Oct 30, 2025
b7bdcbe
Address review comments
Stary2001 Nov 10, 2025
43e0c35
chore(deps): update dorny/test-reporter action to v2.2.0 (#8637)
renovate[bot] Nov 17, 2025
17cd830
Remove gating for Display Options (#8651)
Xaositek Nov 17, 2025
438e170
Packaging: Add libbsd where needed (#8533)
vidplace7 Nov 3, 2025
ec5e795
Don't trust the AI! (#8659)
vidplace7 Nov 17, 2025
79a9157
mqtt: do not try to send packets when it disconnected (#8658)
omgbebebe Nov 17, 2025
501c296
Linux: Fix silly EPEL9 mistake (#8660)
vidplace7 Nov 17, 2025
a8d1a90
Fix ble rssi crash (#8661)
thebentern Nov 18, 2025
c34f94a
mqtt: do not try to send packets when it disconnected (#8658)
omgbebebe Nov 17, 2025
ef4cb2a
If we're not client proxying and we are not connected, don't publish
thebentern Nov 18, 2025
6c09cf9
Gps reset detect (#8302)
jp-bennett Nov 18, 2025
edcdb2d
Cleanup unnecessary global dereferencing in CryptoEngine (#8611)
jasonbcox Nov 11, 2025
59864dd
Add API types, state, and log message in Debug screen. Added persiste…
jp-bennett Nov 7, 2025
15257b0
Add the Heltec v4 expansion box. (#8539)
Quency-D Nov 8, 2025
85ea22a
Update to Pro-micro variants (#8600)
NomDeTom Nov 9, 2025
b202559
Add code for preserving favorites, also move to Home screen before re…
Xaositek Nov 16, 2025
d39d191
mqtt: do not try to send packets when it disconnected (#8658)
omgbebebe Nov 17, 2025
567b8ea
Automated version bumps (#8626)
github-actions[bot] Nov 14, 2025
d18f3f7
Allow deepsleep in rak4630 and make it restart well when power comes …
viric Nov 18, 2025
10de230
nrf52: add watchdog (#8485)
SebKuzminsky Nov 4, 2025
7232ddd
nrf52 wdt: pause wdt in Sleep and Halt, set timeout to 90 s
SebKuzminsky Nov 7, 2025
f9433a3
Automated version bumps (#8684)
github-actions[bot] Nov 19, 2025
8d31fc5
Unify uptime formatting (#8677)
jasonbcox Nov 19, 2025
ef29881
CI: Submit Bump Version PR against master (#8668)
vidplace7 Nov 19, 2025
2ca03fb
chore(deps): update meshtastic-esp8266-oled-ssd1306 digest to 2887bf4…
renovate[bot] Nov 19, 2025
441a7c5
Merge branch 'master' into develop-to-master
thebentern Nov 19, 2025
9cf369c
actually respect wake_on_motion setting (#8690)
jp-bennett Nov 20, 2025
9ae9272
Merge branch 'master' into develop-to-master
thebentern Nov 20, 2025
a2a0150
Trunk fmt
thebentern Nov 20, 2025
b09fa31
Update src/graphics/draw/MenuHandler.cpp
Xaositek Nov 20, 2025
f329de0
Add a reset pulse signal to the OLED. (#8691)
Quency-D Nov 20, 2025
38b0c15
Merge pull request #8689 from meshtastic/develop-to-master
thebentern Nov 20, 2025
5374291
Merge pull request #8663 from meshtastic/master
thebentern Nov 20, 2025
9ae5459
Merge pull request #8694 from meshtastic/develop
thebentern Nov 20, 2025
2b88064
Merge pull request #8670 from SebKuzminsky/nrf52-watchdog-take-2
thebentern Nov 20, 2025
066da49
Fix build when MESHTASTIC_EXCLUDE_PKI is defined
jasonbcox Nov 20, 2025
5640179
Merge pull request #8698 from jasonbcox/fix-exclude-pki
thebentern Nov 20, 2025
0100eee
Fix MenuHandler when MESHTASTIC_EXCLUDE_PKI is defined
jasonbcox Nov 20, 2025
626dce8
Merge pull request #8701 from jasonbcox/fix-exclude-pki-menuhandler
thebentern Nov 20, 2025
d743ba8
Add Thinknode M6
caveman99 Nov 21, 2025
451e52b
fix some minor compiler warnings. Note: The 'delete' is actually safe…
caveman99 Nov 21, 2025
0e3e8b7
Update protobufs (#8707)
github-actions[bot] Nov 21, 2025
186cbe6
Merge pull request #8705 from meshtastic/thinknode-m6
thebentern Nov 21, 2025
a4c92d9
Update protobufs (#8707)
github-actions[bot] Nov 21, 2025
d3976e7
Merge pull request #8713 from meshtastic/develop
thebentern Nov 22, 2025
c051c56
Update Kongduino-Adafruit_nRFCrypto digest to 8cde718 (#8708)
renovate[bot] Nov 22, 2025
376dc7e
Update actions/checkout action to v6 (#8695)
renovate[bot] Nov 22, 2025
1446304
Add WisMesh Tag OCV array (#8646)
Avi0n Nov 22, 2025
f4e260e
R1 Neo - Added OCV_ARRAY from measured discharge curve testing + upda…
simon-muzi Nov 22, 2025
b18794e
Log error if startReceive fails in LR11x0Interface (#8718)
jp-bennett Nov 22, 2025
1bfa9ed
Tweak OCV_ARRAY 100% voltage to take into account charger hysteresis …
simon-muzi Nov 22, 2025
5d7da68
Support overriding GPS serial pins on all architectures (#8486)
Stary2001 Nov 24, 2025
ed4a798
Thinknode M3 support against master (#8630)
jp-bennett Nov 24, 2025
0336331
Use LED_CHARGE and LED_PAIRING for M6 led control (#8742)
jp-bennett Nov 25, 2025
2baa9cc
Merge pull request #8741 from meshtastic/master
thebentern Nov 25, 2025
592a8f2
Further fix compass calibration (#8740)
jp-bennett Nov 25, 2025
81439f1
More quickly hide "Shutting Down" to prevent it showing on Eink sleep…
Xaositek Nov 25, 2025
faa6af7
Swapping GPS pins for GPS TX/RX (#8751)
Xaositek Nov 25, 2025
bacff5c
Reduce noise
thebentern Nov 25, 2025
66193e1
Prevent double-registering of Rotary Encoder on TLora Pager (#8746)
thebentern Nov 25, 2025
486fa74
Actions: Remove native from build_one (#8685)
NomDeTom Nov 25, 2025
79e8fc9
3401 fix (#8755)
caveman99 Nov 25, 2025
654abe5
Add support for muzi-base (#8753)
jp-bennett Nov 26, 2025
d60b263
Merge branch 'master' into develop
thebentern Nov 26, 2025
06dac12
Swap the GPS serial port pins. (#8756)
Quency-D Nov 26, 2025
f10aa3d
Fixes
thebentern Nov 26, 2025
c3a7ad2
More GPS pin flips for devices (#8760)
Xaositek Nov 26, 2025
9bfef80
Add requestFocus() in CannedMessages (#8770)
jp-bennett Nov 27, 2025
f7ae7aa
Upgrade trunk (#8623)
github-actions[bot] Nov 27, 2025
a6d1ce2
Update Sensirion Core to v0.7.2 (#8551)
renovate[bot] Nov 27, 2025
d0c6ec2
Update INA226 to v0.6.5 (#8645)
renovate[bot] Nov 27, 2025
7cb7a6c
Update NonBlockingRTTTL to v1.4.0 (#8541)
renovate[bot] Nov 27, 2025
bc3ed4a
Update platformio/ststm32 to v19.4.0 (#8433)
renovate[bot] Nov 27, 2025
1523368
adding support for the ST7796 + creating a new variant of the T-beam …
Nasimovy Nov 27, 2025
1c43d71
Merge branch 'master' into develop
thebentern Nov 27, 2025
a6cdf2c
- Correct vertical alignment for Muzi_Base on On Screen Keyboard (#8774)
Xaositek Nov 27, 2025
de26dfe
Remove screen activation in powerExit function (#8779)
jp-bennett Nov 28, 2025
a597230
Upgrade trunk (#8781)
github-actions[bot] Nov 28, 2025
2f0fe4e
Use the dedicated isVbusIn() function for detecting USB plug
jp-bennett Nov 28, 2025
94db350
Add LOG_POWERFSM and LOG_INPUT debug macros (#8791)
jp-bennett Nov 29, 2025
0081cec
Fix ifdef statement after ST7796 merge to resolve screen color issues…
Xaositek Nov 29, 2025
bcd4a11
Update dorny/test-reporter action to v2.3.0 (#8809)
renovate[bot] Nov 30, 2025
5a595a3
Replace assert in UTF8 decoder to prevent unexpected reboot (#8807)
HarukiToreda Nov 30, 2025
1abf8dd
Update meshtastic/device-ui digest to 3bf3322 (#8814)
renovate[bot] Nov 30, 2025
5ef3ff7
rework screen.cpp ifdefs (#8816)
jp-bennett Nov 30, 2025
430d55e
Add WiFi Toggle to System frame to re-enable (#8802)
Xaositek Nov 30, 2025
8899487
Modify power saving condition for WiFi (#8815)
jp-bennett Nov 30, 2025
5b1b420
Add initial support for Hackaday Communicator (#8771)
jp-bennett Nov 30, 2025
09bbfce
Enabled MQTT and WEBSERVER by default (#8679)
RikerZhu Dec 1, 2025
34f8300
Initial Chatter 2.0 fix for baseUI (#8615)
HarukiToreda Dec 1, 2025
ee6c910
Make GPS_TX_PIN the serial TX and GPS_RX_PIN the serial RX for all NR…
Stary2001 Dec 1, 2025
80e8745
Update XPowersLib to v0.3.2 (#8823)
renovate[bot] Dec 1, 2025
eba6e4e
Upgrade trunk (#8822)
github-actions[bot] Dec 1, 2025
0e65305
RPM: Fix broken builds (bad backmerge) (#8787)
vidplace7 Dec 1, 2025
a3d3e1c
Flags and scripts for size reduction on NRF52 -> Currently targeting …
thebentern Dec 1, 2025
03600b1
Merge branch 'master' into develop
thebentern Dec 1, 2025
859ae4d
Plain RAK4631 should not compile EInk and TFT display code (#8811)
thebentern Dec 2, 2025
a11152e
Commented out the definition of BATTERY_LPCOMP_INPUT in the Helltec T…
rbomze Dec 2, 2025
f3e38a4
Automated version bumps (#8786)
github-actions[bot] Dec 2, 2025
41cbd77
Move everything from /arch to /variant (#8831)
jp-bennett Dec 2, 2025
525c048
Move device specific OCV curves to their respective device.h (#8834)
jp-bennett Dec 2, 2025
8a43741
Add 'cleanup' to required PR labels (#8835)
jp-bennett Dec 2, 2025
9058435
Upgrade trunk (#8836)
github-actions[bot] Dec 2, 2025
61e41a8
Don't scale up the frequency of telemetry sending (#8664)
RCGV1 Dec 2, 2025
0828c44
Update actions/stale action to v10.1.1 (#8848)
renovate[bot] Dec 3, 2025
1b4925b
Upgrade trunk (#8849)
github-actions[bot] Dec 3, 2025
3f40916
Update alpine Docker tag to v3.23 (#8853)
renovate[bot] Dec 3, 2025
aa85fbb
Promicro documentation update (#8864)
NomDeTom Dec 4, 2025
2f4eb25
Optimization flags for all NRF52 targets to reduce code size (#8854)
Donix212 Dec 4, 2025
6e9fd18
Update meshtastic/device-ui digest to 4fb5f24 (#8862)
renovate[bot] Dec 4, 2025
eeaafda
Update protobufs (#8871)
github-actions[bot] Dec 5, 2025
8060134
promicro doesn't need these. (#8873)
NomDeTom Dec 6, 2025
2a17c3b
Change ARDUINO_USB_MODE from 0 to 1 in the board definition. This swi…
h3lix1 Dec 7, 2025
2ae3911
Fix #8883 (lora-Pager fter playing the notification, voltage does not…
polarikus Dec 7, 2025
94aedff
Resolve #8887 (T-LoRaPager Vibration on New Message Delivery) (#8888)
polarikus Dec 8, 2025
eb08784
OnScreenKeyboard Improvement with Joystick and UpDown Encoder (#8379)
whywilson Dec 8, 2025
4b2f241
Disable vibration if needed (#8895)
polarikus Dec 8, 2025
bd4bcb9
tryfix eink parameters (#8898)
mverch67 Dec 8, 2025
5671e9d
Improved R1 Neo & muzi-base buzzer beeps for GPS on/off (#8870)
simon-muzi Dec 8, 2025
66ff153
Meshtastic build manifest (#8248)
vidplace7 Dec 8, 2025
c3a69a2
Fix backwards buttons on Thinknode-M1 (#8901)
jp-bennett Dec 8, 2025
65c418d
Update protobuf name of FRIED_CHICKEN (#8903)
jp-bennett Dec 9, 2025
c052963
Guard 2M PHY mode for NimBLE (#8890)
thebentern Dec 9, 2025
8be7915
Fix wm111111110
thebentern Dec 9, 2025
928739e
Renovate: fix malformed comment for wollewald/BH1750_WE (#8767)
vidplace7 Dec 9, 2025
ae8d3fb
Cut NRF52 bluetooth power usage by 300% - testers needed! (#8858)
phaseloop Dec 9, 2025
042543e
Fixed the issue where T-Echo did not completely shut down peripherals…
lewisxhe Dec 9, 2025
8e63dcf
Merge branch 'master' into develop
thebentern Dec 9, 2025
6b11991
Upgrade trunk (#8856)
github-actions[bot] Dec 9, 2025
0726bb4
Merge pull request #8910 from meshtastic/develop
thebentern Dec 9, 2025
69b9977
Fix apply device-install permissions
vidplace7 Dec 9, 2025
6bad81f
Merge pull request #8911 from vidplace7/fix-chmod
thebentern Dec 9, 2025
e691bd9
Revert "Cut NRF52 bluetooth power usage by 300% - testers needed! (#8…
thebentern Dec 9, 2025
decd58c
Merge pull request #8913 from meshtastic/revert-8858-nrf52-power-savi…
thebentern Dec 9, 2025
817f3b9
Update platformio/espressif32 to v6.12.0 (#7697)
vidplace7 Dec 9, 2025
d75680a
Fix #8915 [Bug]: Exception Decoder does not recognize the backtrace (…
polarikus Dec 9, 2025
aa605fc
Actions: Fix release manifest formating (#8918)
vidplace7 Dec 9, 2025
c55bea8
ARCtastic (#8904) -- Do It Live!
vidplace7 Dec 9, 2025
ec0dfb7
Update peter-evans/create-pull-request action to v8 (#8919)
renovate[bot] Dec 9, 2025
aa72e39
PIO: Fix closedcube lib reference (#8920)
vidplace7 Dec 9, 2025
ee80ec7
Upgrade trunk (#8922)
github-actions[bot] Dec 10, 2025
5910cc2
Use PSRAM to reduce heap usage percentage on ESP32 with PSRAM (#8891)
samm-git Dec 10, 2025
2032ff1
Create new screen colors for BaseUI (#8921)
Xaositek Dec 10, 2025
83b6038
Enable Muzi-base LED notification (#8925)
jp-bennett Dec 10, 2025
ff0a4ea
Update System Frame for improved rendering on devices (#8923)
Xaositek Dec 10, 2025
fba9222
Add I2C device check for seesaw device on native (#8927)
jp-bennett Dec 11, 2025
fff2bbf
Use truncated position for smart position (#8906)
RCGV1 Dec 11, 2025
cc4c411
Merge pull request #8928 from meshtastic/develop
thebentern Dec 11, 2025
467c042
Merge pull request #8929 from meshtastic/master
thebentern Dec 11, 2025
6f725a1
Upgrade trunk (#8932)
github-actions[bot] Dec 11, 2025
3b2a154
More board_level extras
thebentern Dec 11, 2025
a8fa5f2
Properly turn off power pins at shutdown for m3 (#8935)
jp-bennett Dec 11, 2025
4ef943f
Update meshtastic/device-ui digest to 2746a1c (#8936)
renovate[bot] Dec 11, 2025
4fc96bd
Use 'gh-action-runner' action for "Check" jobs. (#8938)
vidplace7 Dec 11, 2025
bcfe069
Optimize builds to reduce duplicate dependency checks (#8943)
vidplace7 Dec 12, 2025
9d487dd
Merge pull request #8945 from meshtastic/develop
thebentern Dec 12, 2025
2ac74d6
Update actions/cache action to v5 (#8944)
renovate[bot] Dec 12, 2025
c8628b3
Fix #8899 [Bug]: [TloraPager] RotaryEncoder crash (#8933)
polarikus Dec 12, 2025
68250dc
Mark implicit ACK for MQTT as MQTT transport (#8939)
GUVWAF Dec 12, 2025
a4a6c35
Upgrade trunk (#8946)
github-actions[bot] Dec 12, 2025
cce8cbf
Mark implicit ACK for MQTT as MQTT transport (#8939) (#8947)
thebentern Dec 12, 2025
f127702
Fix GPS Buffer full issue on NRF52480 (Seeed T1000E) (#8956)
fifieldt Dec 12, 2025
5d5819b
Skipp assertion on this test for now
thebentern Dec 12, 2025
b742381
Add JSON packet recording option to native (#8930)
jp-bennett Dec 13, 2025
c2b7dc2
Upgrade trunk (#8976)
github-actions[bot] Dec 15, 2025
de2b963
Update GitHub Artifact Actions (#8954)
renovate[bot] Dec 15, 2025
1952982
Update protobufs (#8982)
github-actions[bot] Dec 15, 2025
aa8bb6c
Update meshtastic/device-ui digest to 862ed04 (#8980)
renovate[bot] Dec 15, 2025
8a48321
Upgrade trunk (#8989)
github-actions[bot] Dec 16, 2025
8e0547e
Implement Long Turbo preset (#8985)
thebentern Dec 16, 2025
269dee7
Upgrade trunk (#9000)
github-actions[bot] Dec 17, 2025
40f1f91
Upgrade all esp32 targets to NimBLE 2.X (#9003)
thebentern Dec 17, 2025
5262233
More blinkenlights work for Thinknode-m3 (#8940)
jp-bennett Dec 18, 2025
85aba3a
Upgrade trunk (#9011)
github-actions[bot] Dec 19, 2025
31e55d0
Be more judicious about responding to want_response in existing meshe…
thebentern Dec 19, 2025
661f49a
For our first position send on boot, validate that we have received a…
thebentern Dec 20, 2025
155cdf9
Add Rebooting to DFU mode notification as a simple pop-up (#8970)
Xaositek Dec 14, 2025
f57eb6f
rp2xx0: Update to arduino-pico 5.4.4 (#8979)
vidplace7 Dec 15, 2025
208a873
CLIENT_BASE: Act like ROUTER_LATE for fav'd nodes, instead of like RO…
korbinianbauer Dec 19, 2025
530f013
Macro guard heap_caps_malloc_extmem_enable from SENSECAP_INDICATOR (#…
Xaositek Dec 17, 2025
e6af68b
Actions: Compact manifest job output summary (#8957)
vidplace7 Dec 13, 2025
217abc4
fmt
thebentern Dec 20, 2025
1021d96
Automated version bumps (#9025)
github-actions[bot] Dec 20, 2025
d93d68d
Fix -ota.zip in manifest and build output
thebentern Dec 20, 2025
83c6161
Revert "Automated version bumps (#9025)"
thebentern Dec 20, 2025
d609d05
In statusLEDModule, also detect isCharging (#9050)
jp-bennett Dec 23, 2025
a4f6f45
Update meshtastic-esp8266-oled-ssd1306 digest to b34c681 (#9062)
renovate[bot] Dec 24, 2025
3a7093a
Upgrade trunk (#9047)
github-actions[bot] Dec 24, 2025
33f1865
Upgrade trunk (#9067)
github-actions[bot] Dec 24, 2025
54a928f
M6 shutdown and LEDs work (#9065)
jp-bennett Dec 24, 2025
b2c82bd
Upgrade trunk (#9072)
github-actions[bot] Dec 25, 2025
9dc7ef6
In autoconf, don't probe Wire unless i2c device is set (#9081)
jp-bennett Dec 26, 2025
33e1f58
Upgrade trunk (#9076)
github-actions[bot] Dec 26, 2025
52fd362
Fix gps pin defs for various NRF variants. (#9034)
NomDeTom Dec 24, 2025
5510dae
Implement HAS_PHYSICAL_KEYBOARD for devices with physical keyboards (…
Xaositek Dec 26, 2025
757f7b6
Update meshtastic/device-ui digest to caff403 (#9104)
renovate[bot] Dec 29, 2025
9673cfb
Upgrade trunk (#9106)
github-actions[bot] Dec 29, 2025
b9a0015
chore(deps): update meshtastic/device-ui digest to d234bd9 (#9108)
renovate[bot] Dec 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
52 changes: 52 additions & 0 deletions .clusterfuzzlite/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# This container is used to build Meshtastic with the libraries required by the fuzzer.
# ClusterFuzzLite starts the container, runs the build.sh script, and then exits.

# As this is not a long running service, health-checks are not required. ClusterFuzzLite
# also only works if the user remains unchanged from the base image (it expects to run
# as root).
# trunk-ignore-all(trivy/DS026): No healthcheck is needed for this builder container
# trunk-ignore-all(checkov/CKV_DOCKER_2): No healthcheck is needed for this builder container
# trunk-ignore-all(checkov/CKV_DOCKER_3): We must run as root for this container
# trunk-ignore-all(trivy/DS002): We must run as root for this container
# trunk-ignore-all(checkov/CKV_DOCKER_8): We must run as root for this container
# trunk-ignore-all(hadolint/DL3002): We must run as root for this container

FROM gcr.io/oss-fuzz-base/base-builder:v1

ENV PIP_ROOT_USER_ACTION=ignore

# trunk-ignore(hadolint/DL3008): apt packages are not pinned.
# trunk-ignore(terrascan/AC_DOCKER_0002): apt packages are not pinned.
RUN apt-get update && apt-get install --no-install-recommends -y \
cmake git zip libgpiod-dev libbluetooth-dev libi2c-dev \
libunistring-dev libmicrohttpd-dev libgnutls28-dev libgcrypt20-dev \
libusb-1.0-0-dev libssl-dev pkg-config && \
apt-get clean && rm -rf /var/lib/apt/lists/* && \
pip install --no-cache-dir -U \
platformio==6.1.16 \
grpcio-tools==1.68.1 \
meshtastic==2.5.9

# Ugly hack to avoid clang detecting a conflict between the math "log" function and the "log" function in framework-portduino/cores/portduino/logging.h
RUN sed -i -e 's/__MATHCALL_VEC (log,, (_Mdouble_ __x));//' /usr/include/x86_64-linux-gnu/bits/mathcalls.h

# A few dependencies are too old on the base-builder image. More recent versions are built from source.
WORKDIR $SRC
RUN git config --global advice.detachedHead false && \
git clone --depth 1 --branch 0.8.0 https://github.com/jbeder/yaml-cpp.git && \
git clone --depth 1 --branch v2.3.3 https://github.com/babelouest/orcania.git && \
git clone --depth 1 --branch v1.4.20 https://github.com/babelouest/yder.git && \
git clone --depth 1 --branch v2.7.15 https://github.com/babelouest/ulfius.git

COPY ./.clusterfuzzlite/build.sh $SRC/

WORKDIR $SRC/firmware
COPY . $SRC/firmware/

# https://docs.platformio.org/en/latest/envvars.html
ENV PLATFORMIO_CORE_DIR=$SRC/pio/core \
PLATFORMIO_LIBDEPS_DIR=$SRC/pio/libdeps \
PLATFORMIO_PACKAGES_DIR=$SRC/pio/packages \
PLATFORMIO_SETTING_ENABLE_CACHE=No \
PIO_ENV=buildroot
RUN platformio pkg install --environment $PIO_ENV
59 changes: 59 additions & 0 deletions .clusterfuzzlite/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# ClusterFuzzLite for Meshtastic

This directory contains the fuzzer implementation for Meshtastic using the ClusterFuzzLite framework.
See the [ClusterFuzzLite documentation](https://google.github.io/clusterfuzzlite/) for more details.

## Running locally

ClusterFuzzLite uses the OSS-Fuzz toolchain. To build the fuzzer manually, first grab a copy of OSS-Fuzz.

```shell
git clone https://github.com/google/oss-fuzz.git
cd oss-fuzz
```

To build the fuzzer, run:

```shell
python3 infra/helper.py build_image --external $PATH_TO_MESHTASTIC_FIRMWARE_DIRECTORY
python3 infra/helper.py build_fuzzers --external $PATH_TO_MESHTASTIC_FIRMWARE_DIRECTORY --sanitizer address
```

To run the fuzzer, run:

```shell
python3 infra/helper.py run_fuzzer --external --corpus-dir=<path-to-temp-corpus-dir> $PATH_TO_MESHTASTIC_FIRMWARE_DIRECTORY router_fuzzer
```

More background on these commands can be found in the
[ClusterFuzzLite documentation](https://google.github.io/clusterfuzzlite/build-integration/#testing-locally).

## router_fuzzer.cpp

This fuzzer submits MeshPacket protos to the `Router::enqueueReceivedMessage` method. It takes the binary
data from the fuzzer and decodes that data to a MeshPacket using nanopb. A few fields in
the MeshPacket are modified by the fuzzer.

- If the `to` field is 0, it will be replaced with the NodeID of the running node.
- If the `from` field is 0, it will be replaced with the NodeID of the running node.
- If the `id` field is 0, it will be replaced with an incrementing counter value.
- If the `pki_encrypted` field is true, the `public_key` field will be populated with the first admin key.

The `router_fuzzer_seed_corpus.py` file contains a list of MeshPackets. It is run from inside build.sh and
writes the binary MeshPacket protos to files. These files are use used by the fuzzer as its initial seed data,
helping the fuzzer to start off with a few known inputs.

### Interpreting a fuzzer crash

If the fuzzer crashes, it'll write the input bytes used for the test case to a file and notify about the
location of that file. The contents of the file are a binary serialized MeshPacket protobuf. The following
snippet of Python code can be used to parse the file into a human readable form.

```python
from meshtastic.protobuf import mesh_pb2

mesh_pb2.MeshPacket.FromString(open("crash-XXXX-file", "rb").read())
```

Consider adding any such crash results to the `router_fuzzer_seed_corpus.py` file to ensure there a isn't
a future regression for that crash test case.
71 changes: 71 additions & 0 deletions .clusterfuzzlite/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/bin/bash -eu

# Build Meshtastic and a few needed dependencies using clang++
# and the OSS-Fuzz required build flags.

env

cd "$SRC"
NPROC=$(nproc || echo 1)

LDFLAGS=-lpthread cmake -S "$SRC/yaml-cpp" -B "$WORK/yaml-cpp/$SANITIZER" \
-DBUILD_SHARED_LIBS=OFF
cmake --build "$WORK/yaml-cpp/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/yaml-cpp/$SANITIZER" --prefix /usr

cmake -S "$SRC/orcania" -B "$WORK/orcania/$SANITIZER" \
-DBUILD_STATIC=ON
cmake --build "$WORK/orcania/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/orcania/$SANITIZER" --prefix /usr

cmake -S "$SRC/yder" -B "$WORK/yder/$SANITIZER" \
-DBUILD_STATIC=ON -DWITH_JOURNALD=OFF
cmake --build "$WORK/yder/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/yder/$SANITIZER" --prefix /usr

cmake -S "$SRC/ulfius" -B "$WORK/ulfius/$SANITIZER" \
-DBUILD_STATIC=ON -DWITH_JANSSON=OFF -DWITH_CURL=OFF -DWITH_WEBSOCKET=OFF
cmake --build "$WORK/ulfius/$SANITIZER" -j "$NPROC"
cmake --install "$WORK/ulfius/$SANITIZER" --prefix /usr

cd "$SRC/firmware"

PLATFORMIO_EXTRA_SCRIPTS=$(echo -e "pre:.clusterfuzzlite/platformio-clusterfuzzlite-pre.py\npost:.clusterfuzzlite/platformio-clusterfuzzlite-post.py")
STATIC_LIBS=$(pkg-config --libs --static libulfius openssl libgpiod yaml-cpp bluez --silence-errors)
export PLATFORMIO_EXTRA_SCRIPTS
export STATIC_LIBS
export PLATFORMIO_WORKSPACE_DIR="$WORK/pio/$SANITIZER"
export TARGET_CC=$CC
export TARGET_CXX=$CXX
export TARGET_LD=$CXX
export TARGET_AR=llvm-ar
export TARGET_AS=llvm-as
export TARGET_OBJCOPY=llvm-objcopy
export TARGET_RANLIB=llvm-ranlib

mkdir -p "$OUT/lib"

cp .clusterfuzzlite/*_fuzzer.options "$OUT/"

for f in .clusterfuzzlite/*_fuzzer.cpp; do
fuzzer=$(basename "$f" .cpp)
cp -f "$f" src/fuzzer.cpp
pio run -vvv --environment "$PIO_ENV"
program="$PLATFORMIO_WORKSPACE_DIR/build/$PIO_ENV/meshtasticd"
cp "$program" "$OUT/$fuzzer"

# Copy shared libraries used by the fuzzer.
read -d '' -ra shared_libs < <(ldd "$program" | sed -n 's/[^=]\+=> \([^ ]\+\).*/\1/p') || true
cp -f "${shared_libs[@]}" "$OUT/lib/"

# Build the initial fuzzer seed corpus.
corpus_name="${fuzzer}_seed_corpus"
corpus_generator="$PWD/.clusterfuzzlite/${corpus_name}.py"
if [[ -f $corpus_generator ]]; then
mkdir "$corpus_name"
pushd "$corpus_name"
python3 "$corpus_generator"
popd
zip -D "$OUT/${corpus_name}.zip" "$corpus_name"/*
fi
done
35 changes: 35 additions & 0 deletions .clusterfuzzlite/platformio-clusterfuzzlite-post.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""PlatformIO build script (post: runs after other Meshtastic scripts)."""

import os
import shlex

from SCons.Script import DefaultEnvironment

env = DefaultEnvironment()

# Remove any static libraries from the LIBS environment. Static libraries are
# handled in platformio-clusterfuzzlite-pre.py.
static_libs = set(lib[2:] for lib in shlex.split(os.getenv("STATIC_LIBS")))
env.Replace(
LIBS=[
lib for lib in env["LIBS"] if not (isinstance(lib, str) and lib in static_libs)
],
)

# FrameworkArduino/portduino/main.cpp contains the "main" function the binary.
# The fuzzing framework also provides a "main" function and needs to be run
# before Meshtastic is started. We rename the "main" function for Meshtastic to
# "portduino_main" here so that it can be called inside the fuzzer.
env.AddPostAction(
"$BUILD_DIR/FrameworkArduino/portduino/main.cpp.o",
env.VerboseAction(
" ".join(
[
"$OBJCOPY",
"--redefine-sym=main=portduino_main",
"$BUILD_DIR/FrameworkArduino/portduino/main.cpp.o",
]
),
"Renaming main symbol to portduino_main",
),
)
52 changes: 52 additions & 0 deletions .clusterfuzzlite/platformio-clusterfuzzlite-pre.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
"""PlatformIO build script (pre: runs before other Meshtastic scripts).

ClusterFuzzLite executes in a different container from the build. During the build,
attempt to link statically to as many dependencies as possible. For dependencies that
do not have static libraries, the shared library files are copied to the output
directory by the build.sh script.
"""

import glob
import os
import shlex

from SCons.Script import DefaultEnvironment, Literal

env = DefaultEnvironment()

cxxflags = shlex.split(os.getenv("CXXFLAGS"))
sanitizer_flags = shlex.split(os.getenv("SANITIZER_FLAGS"))
lib_fuzzing_engine = shlex.split(os.getenv("LIB_FUZZING_ENGINE"))
statics = glob.glob("/usr/lib/lib*.a") + glob.glob("/usr/lib/*/lib*.a")
no_static = set(("-ldl",))


def replaceStatic(lib):
"""Replace -l<libname> with the static .a file for the library."""
if not lib.startswith("-l") or lib in no_static:
return lib
static_name = f"/lib{lib[2:]}.a"
static = [s for s in statics if s.endswith(static_name)]
if len(static) == 1:
return static[0]
return lib


# Setup the environment for building with Clang and the OSS-Fuzz required build flags.
env.Append(
CFLAGS=os.getenv("CFLAGS"),
CXXFLAGS=cxxflags,
LIBSOURCE_DIRS=["/usr/lib/x86_64-linux-gnu"],
LINKFLAGS=cxxflags
+ sanitizer_flags
+ lib_fuzzing_engine
+ ["-stdlib=libc++", "-std=c++17"],
_LIBFLAGS=[replaceStatic(s) for s in shlex.split(os.getenv("STATIC_LIBS"))]
+ [
"/usr/lib/x86_64-linux-gnu/libunistring.a", # Needs to be at the end.
# Find the shared libraries in a subdirectory named lib
# within the same directory as the binary.
Literal("-Wl,-rpath,$ORIGIN/lib"),
"-Wl,-z,origin",
],
)
1 change: 1 addition & 0 deletions .clusterfuzzlite/project.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
language: c++
Loading
Loading