Commit graph

26 commits

Author SHA1 Message Date
Chad Attermann
4d6f0b9de2 Added dual-class PSRAM/TLSF allocator system and refactored memory management
Introduces a flexible two-class allocator architecture (RNS_DEFAULT_ALLOCATOR and RNS_CONTAINER_ALLOCATOR) supporting heap, PSRAM, and TLSF pool variants for fine-grained control over embedded memory layout.

- New Memory.h/cpp with ContainerAllocator<T>, heap/PSRAM/pool allocator types, and heap stats reporting
- IdentityTable and PathTable now use ContainerAllocator
- Replaced RNS_USE_TLSF/RNS_USE_ALLOCATOR/RNS_USE_PSRAM flags with per-class allocator flags (RNS_DEFAULT_ALLOCATOR, RNS_CONTAINER_ALLOCATOR)
- Added ESP32 PSRAM allocator support (RNS_PSRAM_ALLOCATOR, RNS_PSRAM_POOL_ALLOCATOR)
- Added Transport::get_path()/remove_path() helpers
- Added loop callback (set_loop_callback) to enable more responsive app during long operations (like clean_cache)
- Aded guard against re-entrancy to clean_cache()
- Added callback option to list_directory() to avoid heap allocation
- Added OOM auto-restart (ESP.restart/NVIC_SystemReset) in Interface send/receive and Reticulum loop.
- Renamed setLogCallback to set_log_callback
- Made Link/Identity static members private
- Added native14 env to CI and platformio.ini
- Bumped version to 0.2.10
2026-03-06 16:43:04 -07:00
Chad Attermann
9289da1a19 Bump to version 0.2.7. 2026-03-01 12:45:35 -07:00
Chad Attermann
79b75bbd4e Replace string-concatenation logging with printf-style F-variants
Converted log calls across src/, examples/, and test/ to use DEBUGF/TRACEF/ERRORF/etc. macros instead of std::string + operator+. This eliminates temporary heap allocations on every log call, which matters on memory-constrained MCUs.
2026-03-01 10:59:33 -07:00
Chad Attermann
3c4978f294 WIP: Fixes for link validation and announce retries
Fix for link validation failure when poackets contain new MTU in payload
from RNS 1.0 (courtesy of @jlpoolen).
Optimization of announce re-broadcasts from RNS 1.0.
2026-02-15 09:59:25 -07:00
Chad Attermann
3cc7c2a55d WIP: Added local project support for RAK boards 2026-02-14 11:00:12 -07:00
Chad Attermann
cddc86e8c0 WIP: Added support for RNS packet context_flag
Added support for new `context_flag` in RNS packet header that is used
to indicate the use of ratchets.
Note that ratchet support is still missing from the implementation, but
this fix enables received ratchets to be able to handled gracefully.
2026-02-13 22:39:14 -07:00
Chad Attermann
27433edb19 Updates for MCU builds broken by previous dev. 2026-02-09 13:52:13 -07:00
Chad Attermann
0004ca1717 Added build support for LILYGO T-Beam SUPREME 2026-01-21 13:53:37 -07:00
Chad Attermann
818782382a Enhance Bytes, fix for Lins, test/example updates
- Added convenience methods to Bytes class
- Fix for logic error in Link class compliments of @cobraPA
- Added unit tests
- Updated example apps
2026-01-21 12:38:13 -07:00
Chad Attermann
b8be484624 WIP: Major refactor of unit and integration tests 2025-08-26 21:05:36 -06:00
Chad Attermann
fe687d391b WIP: Migrated a few unit tests to Unity 2025-08-26 10:49:37 -06:00
Chad Attermann
bac53b9e6d WIP: Integrated Unity test framework. 2025-08-25 14:42:15 -06:00
Chad Attermann
e9cd61f375 WIP: Fixes for linux builds. 2025-08-24 21:33:51 -06:00
Chad Attermann
f155e39cf6 WIP: Minor refactoring of examples. 2025-08-24 20:52:38 -06:00
Chad Attermann
0c902054db WIP: Links working with example app. 2025-08-24 14:26:29 -06:00
Chad Attermann
c3edde10e9 WIP: Progress toward Link support with example app 2025-08-23 14:12:13 -06:00
Chad Attermann
11155b5829 WIP: Completed but un-tested port of Link.
Link is now mostly ported from Python but as of yet un-tested.
Refactored Interface.
Orgnanized example apps.
2025-08-21 17:29:26 -06:00
Chad Attermann
2deb358def WIP: Updated ecamples and added native main() 2025-08-20 22:05:11 -06:00
Chad Attermann
fcfda66365 WIP: General improvements in persistence efficiency 2024-08-14 21:59:23 -06:00
Chad Attermann
3af5111606 WIP: Logging optimizations and memory management
Changed a few key logs to use printf-style instead of string
concatenation to avoid dynamic memory allocation. Still need to move
all remaining logging over to printf-style.

Added option (-DRNS_USE_ALLOCATOR=1) to override new/delete operators for
both allocation metrics and the ability to implement an alternate memory
allocator.

Added option (-DRNS_USE_TLSF=1) to use the alternate TLSF allocator
(must also define RNS_USE_ALLOCATOR). This allocator is well known for
reducing fragmentation and providing constant, O(1)-time allocation
and deallocation for real-time embedded systems.

This TLSF allocator appears to already be the default allocator for
ESP32 boards, but the allocator used by NRF52 is unknown at this time so
the TLSF allocator internal to microReticulum is only being used for
NRF52 boards at this time.

Future memory management improvements will include custom allocators for
long-lived structures like the path table that will segregate them from
the general pool of memory that is constantly cycling, thereby further
reducing fragmentation. It will also allow these structures to use
alternate memory like PSRAM present on T-Beam boards.
2024-07-16 10:40:46 -06:00
Chad Attermann
36ff1c5f00 WIP: Refactored logging to use macros 2024-07-03 11:30:01 -06:00
Chad Attermann
2d3b3d586f WIP: Improved heap management 2024-07-03 10:57:27 -06:00
Chad Attermann
bef8dbc1b0 WIP: Stable memory and flash with limited paths 2024-07-03 06:55:06 -06:00
Chad Attermann
518db13ec8 WIP: Switched to macros for build control of logs 2024-07-01 20:25:46 -06:00
Chad Attermann
cc25dbab8f WIP: Major improvements in memory management 2024-07-01 20:12:51 -06:00
Chad Attermann
1b1beab4fa WIP: Work toward removing platform-specifics
Moved LoRa and UDP test code into `examples` folder.
Moved `main.cpp` test app to `examples` folder.
Removed platform-specific filesystem code and replaced with an interface
to be implemeneted by the consumer.
2024-05-26 17:28:51 -06:00