Skip to content

v2.0.30 — RX frame helper + poll backoff

Choose a tag to compare

@rspaargaren rspaargaren released this 04 Jul 04:57

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 ProcessReceivedFrameTask handles them correctly
  • Adopted in SendAndReceive (both receive call sites) and AuthenticateReceivedRequest
  • 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

  • c1740ab feat: add ReceiveMatchingFrame and FlushStash helpers
  • f1e6fb2 feat: adopt ReceiveMatchingFrame in SendAndReceive
  • f7b1b0d feat: adopt ReceiveMatchingFrame in AuthenticateReceivedRequest
  • b2d4aaa feat: add per-device poll backoff to UpdateDevicesStatusTask
  • 33f475d fix: cap consecutive_poll_failures at 4 to prevent uint8_t wrap-around

Full Changelog: v2.0.29...v2.0.30