v0.0.20
Heap and robustness fixes for the RAPI layer, plus a wider $G0/state surface.
Heap
-
The RAPI command queue no longer fragments the heap (#6).
queue.h::pop()
copied the item out but never cleared the slot, so the ten-element static
CommandItemarray kept tenStrings and tenstd::functions alive for the
life of the process. Each new command allocated fresh and freed nothing, and
the surviving allocations migrated steadily deeper into the heap.On an ESP32 running the OpenEVSE WiFi firmware, the largest contiguous block
fell from ~51 KB to under 10 KB over 14 hours at roughly 1.3 commands/second.
With this fix, the same unit held 36,852 bytes flat over 10 hours and 41,898
commands. -
Inline handler storage is now sized by pointer width (
sizeof(void *) * 10)
rather than a fixed byte count, so 64-bit host and native-test builds no
longer trip the capacitystatic_assert.
Robustness
- The async event handler is guarded against short frames.
- Assorted audit follow-ups in
RapiSenderandOpenEVSEClass.
API
- Additional state and flag accessors on
OpenEVSEClass, including the$G0
path — the reliable source for vehicle-connected state, as opposed to the
cachedEV_CONNECTEDvflag.
Maintenance
- Repository metadata corrected; CI actions bumped.
Full changelog: v0.0.19...v0.0.20