Skip to content

fix(cli): slice HT-LTF segment from merged-LTF raw CSI frames so calibrate/enroll/room-watch work on acquire-everything firmware (refs #1000)#1002

Open
schaferjart wants to merge 1 commit into
ruvnet:mainfrom
schaferjart:fix/cli-merged-ltf-csi-frames
Open

fix(cli): slice HT-LTF segment from merged-LTF raw CSI frames so calibrate/enroll/room-watch work on acquire-everything firmware (refs #1000)#1002
schaferjart wants to merge 1 commit into
ruvnet:mainfrom
schaferjart:fix/cli-merged-ltf-csi-frames

Conversation

@schaferjart

Copy link
Copy Markdown

Summary

Fixes the CLI half of #1000: calibrate / enroll / room-watch rejected every raw CSI frame from firmware built with the current acquire-everything CSI config, making the ADR-151 per-room calibration pipeline unusable on such nodes.

Root cause

csi_collector.c (S3 branch) enables lltf_en + htltf_en + stbc_htltf2_en, so the 0xC5110001 raw frames carry 192 complex values (L-LTF + HT-LTF + STBC HT-LTF, 64 each — CSI cb: len=384 in the boot log). parse_csi_packet passed the frame through whole, and the HT20 tier geometry check rejected it:

[calibrate] WARN frame skipped: subcarrier count mismatch: expected 52, got 192
Error: calibration failed: insufficient frames: have 0, need 600

Fix

When a frame reports 192 subcarriers, slice the HT-LTF segment ([64..128)) before building the CsiFrame, so the 64-FFT HT20 tier config (52 active) lines up. Frames with other geometries are untouched.

Validation

Notes

  • CHANGELOG entry added under [Unreleased].
  • An alternative (or complement) is trimming in firmware before UDP send — the 192-value frames triple the raw-CSI payload. This PR keeps host-side compatibility with already-flashed nodes either way.

Refs #1000.

🤖 Generated with claude-flow

…bcarriers)

Firmware built with acquire-everything CSI (L-LTF + HT-LTF + STBC HT-LTF,
per csi_collector.c) streams 0xC5110001 frames with 192 complex values.
parse_csi_packet passed them through whole, so every frame failed the HT20
tier geometry check ('expected 52, got 192') and calibrate/enroll/room-watch
could never capture a baseline on such nodes (refs ruvnet#1000).

Slice the HT-LTF segment [64..128) out of 192-subcarrier frames so the
64-FFT HT20 tier configs line up. Hardware-validated on a bare
ESP32-S3-N16R8 (display-less build from main): full ADR-151
baseline -> enroll -> train-room -> room-watch pipeline ran end-to-end.

Co-Authored-By: claude-flow <ruv@ruv.net>
Entire-Checkpoint: da71680bb8f5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant