- Change > to >= so stored value 1 means direct/0-hop only (liamcottle)
- Clamp max_hops to 63 on write since getPathHashCount() caps at 63 (robekl)
- Update comments to reflect encoding: 0=no limit, 1=direct only, N=up to N-1 hops
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Filter auto-add of new contacts by hop count (issues #1533, #1546).
Setting is configurable from the companion app via extended
CMD_SET/GET_AUTOADD_CONFIG protocol (0 = no limit, 1-63 = max hops).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On the T114, GPS_RESET (pin 38) is the same pin as PIN_3V3_EN.
MicroNMEALocationProvider::begin() sets pin 38 HIGH (powering the 3V3
rail) but stop() never set it back LOW, leaving the GPS module powered
even when disabled.
Assert reset pin in stop() to mirror begin(), and guard
_location->loop() behind gps_active check.
Fixesmeshcore-dev/MeshCore#1628
1. warm sleep
2. wake to stdby
3. Calibrate(0x7F) to reset all internal blocks
4. re-apply DIO2 RF / boosted gain & register patch to make sure
everything is as it was
Resolve conflict by taking upstream path encoding fix:
- writeTo: use writePath() for path serialization
- readFrom: use isValidPathLen() and getPathByteLen() for validation
Made-with: Cursor
Resolve conflicts: keep MQTT/WiFi/timezone/analyzer defaults and get
handlers, add upstream neighbour sort guard, adc_multiplier and
pending_discover, and bootloader.ver get handler.
Co-authored-by: Cursor <cursoragent@cursor.com>
PacketQueue::countBefore() and PacketQueue::get() use unsigned
comparison (_schedule_table[j] > now) to check if a packet is
scheduled for the future. This breaks when millis() wraps around
after ~49.7 days: packets scheduled just before the wrap appear
to be in the far future and get stuck in the queue.
Use signed subtraction instead, matching the approach already used
by Dispatcher::millisHasNowPassed(). This correctly handles the
wraparound for time differences up to ~24.8 days in either
direction, well beyond the maximum queue delay of 32 seconds.
PacketQueue::add() silently dropped packets when the queue was at
capacity. The packet pointer was lost — never enqueued, never returned
to the unused pool. Each occurrence permanently shrank the 32-packet
pool until allocNew() returned NULL and the node went deaf. Return bool
from add() and free the packet back to the pool on failure.
Resolve conflict in heltec_tracker_v2/platformio.ini: keep
SX126X_REGISTER_PATCH=1 from upstream and retain GC1109 comment.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Updated pressure window and threshold constants to differentiate between critical and moderate memory pressure scenarios.
- Enhanced recovery logic to trigger based on specific pressure conditions, improving responsiveness to memory fragmentation.
- Added explicit calls to recreate analyzer client objects during recovery, ensuring proper setup after memory management actions.
These changes aim to optimize memory handling and recovery processes in the MQTTBridge, enhancing overall stability.
- Improved NTP sync logic by implementing retry attempts for NTP updates, enhancing reliability on various hardware.
- Added a fallback mechanism to use ESP32's built-in SNTP if NTPClient fails, ensuring time synchronization continuity.
- Updated the handling of epoch time validation to ensure it meets a minimum threshold before proceeding with time updates.
- Streamlined the process of setting the system timezone and updating the RTC clock, improving overall time management efficiency.
- Updated the logic for JWT token timestamp validation to allow reconnection if the system clock is set, even when NTP sync is not confirmed. This change prevents unnecessary connection blocks after a successful NTP sync at boot.
- Introduced a check to determine if the system clock is clearly set, improving the robustness of the connection maintenance process.
- Introduced a new method `runCriticalMemoryCheckAndRecovery()` to streamline memory checks and recovery processes.
- Added member variables to track fragmentation pressure and the last critical check run time.
- Removed redundant critical memory check logic from `mqttTaskLoop()` and `loop()`, enhancing code clarity and maintainability.
- Improved logging and pressure tracking for better diagnostics during memory management.