wifi-densepose/firmware
ruv 6ff155a232 feat(csi): emit ADR-110 §A0.11 sync-packet every 20 CSI frames
Closes WITNESS-LOG-110 §A0.11 wiring gap. Adds a separate 32-byte UDP
packet (magic 0xC511A110, distinct from the CSI frame magic 0xC5110001)
carrying:

  [0..3]   magic 0xC511A110 (LE u32) — CSI-ADR-110 sync packet
  [4]      node_id
  [5]      proto version (0x01)
  [6]      flags: bit0=is_leader, bit1=is_valid, bit2=smoothed_used
  [7]      reserved
  [8..15]  local esp_timer_get_time() (LE u64)
  [16..23] mesh-aligned epoch (LE u64) = local + EMA-smoothed offset
  [24..27] high-water sequence number (LE u32) for pairing with CSI frames
  [28..31] reserved (room for leader_id low32 in a follow-up)

Emitted once per 20 CSI frames (≈ 1 Hz at the 20 Hz send-rate gate).
Same stream_sender UDP socket as CSI frames — host dispatches by first
4 bytes of each datagram.

Backwards compatible: aggregators that don't know about the new magic
ignore it (sync packets won't match the CSI parser's magic check, so
they're dropped harmlessly by existing receivers). New aggregators
pair (node_id, sequence) across the two packet streams to align CSI
frames to mesh time.

Sets us up for downstream ADR-029/030 multistatic CSI fusion: with the
host now able to recover the mesh-aligned epoch from each frame's
sequence number, frames from multiple boards can be ordered + fused
on a common timeline.

Build evidence: C6 image 1019 KB (+1 KB vs v0.6.8 no-sync), 45 %
partition slack unchanged. Host-side parser update is a follow-up.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-23 12:26:45 -04:00
..
esp32-csi-node feat(csi): emit ADR-110 §A0.11 sync-packet every 20 CSI frames 2026-05-23 12:26:45 -04:00
esp32-hello-world firmware/esp32-hello-world: ESP32-C6 target and ESP-IDF v6 build fixes (#524) 2026-05-17 18:00:45 -04:00