Jaguar1: runtime SetRxPathMask/GetRxPathMask — sticky RX-chain diversity lever (#189)#191
Merged
Conversation
…189) The RX-chain enable mask (0x808 byte 0) becomes a runtime API on RtlJaguarDevice, the adaptive-link spatial-diversity lever: a controller with a motion/fade signal switches chains live instead of on the DEVOURER_RX_PATHS toggle's fixed timer. SetRxPathMask writes the mask and caches it; GetRxPathMask reads 0x808 back. The env single-value path now routes through SetRxPathMask (identical behaviour, one code path). Sticky: once set, the mask is re-applied after every SetMonitorChannel — a channel set runs IQK, which saves/restores 0x808 and would otherwise revert the mask to the table default (the pre-existing single-channel limitation). Gated on the mask having been set, so the default all-paths behaviour is byte-identical when the knob is unused. FastRetune's lean path skips IQK, so the mask survives a hop naturally (no re-apply needed there). Hardware-validated on 8814AU RX + 8812AU beacon (tests/rx_path_mask_check.sh): mask 0x33 collapses chains C,D from ~52-56 to 28 (the noise floor) while A,B hold at 52/50 — and they STAY collapsed under DEVOURER_RX_SWEEP_FULL (a full SetMonitorChannel per dwell), proving the re-apply. Without it the first channel set reverts 0x808 to all-paths and C,D pop back up. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #189.
What
The RX-chain enable mask (
0x808byte 0 — path A/B/C/D CCK+OFDM enable) becomes a runtime API onRtlJaguarDevice, the adaptive-link spatial-diversity lever:Previously the only way to move it was the
DEVOURER_RX_PATHSenv var — fixed at bring-up or cycled on a blind timer. A controller with a motion/fade signal (e.g. beamforming-variance from the sensing path) can now switch chains live. The env single-value path routes throughSetRxPathMask(one code path, identical behaviour); the toggle-spec thread is unchanged.Sticky (the #189 open question, resolved the useful way): once set, the mask is re-applied after every
SetMonitorChannel— a channel set runs IQK, which saves/restores0x808and would otherwise revert the mask to the table default. Gated on the mask having been set, so the default all-paths path stays byte-identical when the knob is unused.FastRetune's lean path skips IQK, so the mask survives a hop naturally.Scoped to Jaguar1 (concrete
RtlJaguarDevice, reached bydynamic_castlike the other RX research helpers): the 8814AU is the only part with ≥2 chains to actually trade; the 2T2R Jaguar2/3 parts have no 4-chain diversity story.Validation
tests/rx_path_mask_check.sh— 8814AU as RX (4T4R), 8812AU beacon as source,DEVOURER_RX_ALLPATHSper-chain RSSI as the sensor:0xFF0x33RX_SWEEP_FULL(fullSetMonitorChannel/dwell)0x330x33collapses chains C,D to 28 (the noise floor) while A,B hold — the write reaches the right chains.SetMonitorChanneldwells — proving the re-apply. Without it the first channel set reverts0x808to all-paths and C,D pop back up.ctestgreen. No new env vars; theDEVOURER_RX_PATHSenv knob is unchanged apart from now being sticky across channel sets (a capability improvement — the mrc/decorrelation harnesses do single-channel captures, so nothing regresses).Not in scope (per the research behind #189/#190)
IGI/DIG and NBI/CSI-mask do not get runtime setters: RX gain is chip-closed (per-frame AGC + the slow DIG loop + LNA-saturation AGC-table switching), and the adaptive response to a spur is a channel hop (already runtime). This is the one RX knob that earns a runtime API. The Jaguar3 DIG parity gap is tracked separately (#190).
🤖 Generated with Claude Code