v2.0.30 — RX frame helper + poll backoff
What's new
ReceiveMatchingFrame helper
Replaces single-shot xQueueReceive patterns in active io-homecontrol exchanges with a deadline-loop helper that drains irrelevant frames rather than aborting on the first non-matching one.
- Ambient RF traffic (frames between other devices) is now silently discarded instead of consuming the exchange slot
- Frames from other peers addressed to us but not part of the current exchange are stashed and re-queued before the mutex is released, so
ProcessReceivedFrameTaskhandles them correctly - Adopted in
SendAndReceive(both receive call sites) andAuthenticateReceivedRequest - Eliminates the spurious "received a response not for current exchange!" log errors
Per-device poll backoff
UpdateDevicesStatusTask now backs off retry intervals for devices that repeatedly fail to respond, instead of always retrying after 60 seconds.
| Consecutive failures | Retry interval |
|---|---|
| 1 | 60 s |
| 2 | 5 min |
| 3 | 30 min |
| 4+ | 1 hour |
This eliminates the double-cluster error pattern (hourly poll fails → all devices retry at 60 s → fail again) seen in logs from unreachable devices.
Commits
c1740abfeat: add ReceiveMatchingFrame and FlushStash helpersf1e6fb2feat: adopt ReceiveMatchingFrame in SendAndReceivef7b1b0dfeat: adopt ReceiveMatchingFrame in AuthenticateReceivedRequestb2d4aaafeat: add per-device poll backoff to UpdateDevicesStatusTask33f475dfix: cap consecutive_poll_failures at 4 to prevent uint8_t wrap-around
Full Changelog: v2.0.29...v2.0.30