Skip to content

radiotap TX: single shared HT MCS decode across all three generations#292

Merged
josephnef merged 1 commit into
masterfrom
radiotap-shared-mcs-decode
Jul 15, 2026
Merged

radiotap TX: single shared HT MCS decode across all three generations#292
josephnef merged 1 commit into
masterfrom
radiotap-shared-mcs-decode

Conversation

@josephnef

Copy link
Copy Markdown
Collaborator

Summary

Follow-ups from the #291 review, in one pass:

  • Jaguar1 adopts decode_radiotap_mcs_field() — the last private copy of the HT MCS known/flag reading is gone, so the three generations' send_packet parsers genuinely can't diverge. Behavior-identical: bwidth starts at 20 MHz, so J1's explicit BW_20/20L/20U branch was a no-op, and its ldpc/stbc/sgi semantics already matched the shared decode.
  • Named constants — the decoder spells its bit tests with IEEE80211_RADIOTAP_MCS_HAVE_FEC/FEC_LDPC/HAVE_STBC/STBC_MASK/STBC_SHIFT/SGI instead of raw masks and shifts.
  • Duplicate include droppedRadiotapTxFlags.h was included twice in RtlJaguar3Device.cpp.
  • Selftest: new raw 3-byte MCS field case (BW code 20U, STBC stream count 2, LDPC, no SGI) pinning the decoder's bit positions independently of what build_stream_radiotap can emit — a direct guard on the constants refactor.

Testing

  • ctest 21/21 green.
  • Bench-verified on air (streamtx MCS1/LDPC/STBCrx.txhit decode):
    • 8812AU (J1 — the swapped path) → 8822B RX, ch6: 107/107 frames ldpc=1 stbc=1, rate MCS1.
    • 8812EU (J3 regression on the refactored decoder) → 8812AU RX, ch36: 19/19 ldpc=1 stbc=1.

🤖 Generated with Claude Code

Follow-ups from the #291 review, in one pass:

- Jaguar1 adopts decode_radiotap_mcs_field() — the last private copy of
  the HT MCS known/flag reading is gone, so the three generations
  genuinely can't diverge. Behavior-identical: bwidth starts at 20 MHz,
  so J1's explicit BW_20/20L/20U branch was a no-op, and its
  ldpc/stbc/sgi semantics already matched the shared decode.
- The decoder spells its bit tests with the named
  IEEE80211_RADIOTAP_MCS_* constants instead of raw masks/shifts.
- Drop the duplicated RadiotapTxFlags.h include in RtlJaguar3Device.cpp.
- Selftest gains a raw 3-byte MCS field case (BW code 20U, STBC stream
  count 2, LDPC, no SGI) pinning the decoder's bit positions
  independently of what build_stream_radiotap can emit.

Bench-verified on air (streamtx MCS1/LDPC/STBC -> rx.txhit decode):
8812AU (J1, the swapped path) 107/107 frames ldpc=1 stbc=1 at ch6 into
an 8822B; 8812EU (J3 regression) 19/19 ldpc=1 stbc=1 at ch36. ctest
21/21.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@josephnef josephnef merged commit 07f1b5e into master Jul 15, 2026
15 checks passed
@josephnef josephnef deleted the radiotap-shared-mcs-decode branch July 15, 2026 18:13
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