QoS0 packet/raw publishes are forced into the esp-mqtt outbox (store=true, async) so packet topics keep flowing, but the outbox has no size bound of its own — esp-mqtt frees entries only on send-ack or ~30s expiry. On a stalled or slow uplink (socket still "connected") QoS0 frames accumulate on internal heap without limit, driving the heap exhaustion/fragmentation seen in the field. Cap the outbox at the application level: PsychicMqttClient::setOutboxLimit() records a per-client byte cap, and publish() drops a QoS0 message (returns -2) when esp_mqtt_client_get_outbox_size() is already at/over the cap, before enqueuing. The bridge's existing processPacketQueue retry/drop path handles the -2 as backpressure. Caps: 16 KiB PSRAM / 8 KiB non-PSRAM (outbox lives on internal heap, so non-PSRAM is the fragmentation-sensitive case). Portable across IDF 4.4 and 5 via esp_mqtt_client_get_outbox_size(); esp-mqtt's own outbox.limit config is not used (its enqueue path does not reliably enforce it for QoS0, and the app-level guard fires before enqueue regardless). Adds getOutboxSize()/getOutboxLimit()/getOutboxDrops() and surfaces per-slot outbox size/cap/drops via a throttled logMemoryStatus() in the MQTT task loop (MQTT_DEBUG-gated) to confirm the bound on-target.
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in a an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html