Both sendDetectionMessage() and sendCurrentStateMessage() allocate a
packet from packetPool and then, when the primary channel is the
public/default channel, log and return without sending or releasing it.
Each refused send permanently leaks one packet from the fixed-size pool;
with state_broadcast_secs configured, the heartbeat path repeats this on
a timer until the pool is exhausted and the device can no longer
allocate packets at all.
Release the packet in the refusal branch, matching the pattern used in
PositionModule. Also replace the per-message 'new char[40]' scratch
buffer with a stack buffer (and sprintf with snprintf), removing the
manual delete[] bookkeeping on every exit path.
The send_bell append writes bytes[size] and bytes[size+1] while the guard only checked size < DATA_PAYLOAD_LEN, overrunning the 233-byte payload array by one when size == DATA_PAYLOAD_LEN - 1. Guard on size + 1.
* Null-check packet allocations in allocForSending and its callers
Sibling of 0ae44d701.
* Null-check allocDataProtobuf, allocAckNak and allocErrorResponse callers
Second tier of the same nullable contract.
* Keep telemetry sleep scheduling on allocation failure
Allocation failure now marks the telemetry invalid instead of returning
early, so power-saving SENSOR nodes still arm deep sleep.
I thought git would be smart enough to understand all the whitespace changes but even with all the flags I know to make it ignore theses it still blows up if there are identical changes on both sides.
I have a solution but it require creating a new commit at the merge base for each conflicting PR and merging it into develop.
I don't think blowing up all PRs is worth for now, maybe if we can coordinate this for V3 let's say.
This reverts commit 0d11331d18.
* Space out periodic broadcasts of modules automatically
* Add warning for function usage
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Don't send to public channel
`p->to` wasn't set and had the same value as broadcast, it's now set to our own NodeNum.
* Trunk
* Update DetectionSensorModule.cpp
Take 3
* Revert NodeNum()
remove newline from logging statements in code. The LOG_* functions will now magically add it at the end.
---------
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
* Refactor and consolidate windowing logic
* Trunk
* Fixes
* More
* Fix braces and remove unused now variables.
There was a brace in src/mesh/RadioLibInterface.cpp that was breaking
compile on some architectures.
Additionally, there were some brace errors in
src/modules/Telemetry/AirQualityTelemetry.cpp
src/modules/Telemetry/EnvironmentTelemetry.cpp
src/mesh/wifi/WiFiAPClient.cpp
Move throttle include in WifiAPClient.cpp to top.
Add Default.h to sleep.cpp
rest of files just remove unused now variables.
* Remove a couple more meows
---------
Co-authored-by: Tom Fifield <tom@tomfifield.net>
* Make SPI frequency configurable on Native
* Make the tophone queue size configurable for Portduino
* The modified SPISettings must be configured in setup(), after config.yaml is processed
* make MeshService a pointer, so we can configure MAX_RX_TOPHONE at run time
* Got a little over excited with refactoring
* Silence a warning
* Add congestion scaling coefficient
* Added active mesh sized based interval scaling
* Moved back to bottom
* Format
* Add observers and use correct number of online nodes
* WIP
* Updates
* Move it out of the macro guard so portduino can build
* Changes from feedback
* Use minimum_broadcast_secs as interval if we just broadcasted to avoid wasting cpu cycles
* Fmt
* Merge conflict resolution boogered me up
* Missed a spot
* getConfiguredOrDefaultMs
* Get the minimum interval
* WIP
* Updates
* Move it out of the macro guard so portduino can build
* Changes from feedback
* Use minimum_broadcast_secs as interval if we just broadcasted to avoid wasting cpu cycles
* Fmt
* Merge conflict resolution boogered me up
* Missed a spot