Problem
On Jaguar3 the RX path fills only descriptor-level fields (src/jaguar3/RtlJaguar3Device.cpp — length, rate, crc/icv, shift) and never decodes the phy-status trailer the chip appends to each frame. Result: RxAtrib.rssi[4] / snr[4] / evm[4] are zero on every 8812CU/8822EU frame, while on Jaguar1 the same fields are fully populated (src/jaguar1/FrameParser.cpp). Anything downstream that reads them — <devourer-stream> quality fields, DEVOURER_RX_ALLPATHS, the decorrelation/MRC tooling — silently reports zeros on Jaguar3.
What the chip already provides
The jgr3 phy-status pages carry more than Jaguar1's format:
- Type 0: PWDB summary + per-path gain/agc/lna.
- Type 1 (the normal OFDM/HT/VHT page): per-path
pwdb[4], rxevm[4], cfo_tail[4], rxsnr[4].
- Type 2/3: per-path pwdb +
avg_noise_pwr — a per-frame noise estimate Jaguar1 doesn't expose at all.
Reference layouts: reference/rtl88x2cu/hal/phydm/phydm_phystatus.h. A much cleaner parser to crib from is mainline rtw88's rtw8822c.c (query_phy_status_page0/page1) — same silicon, minimal code.
Scope
- Decode page type from the phy-status header; parse type 0 and type 1 into
RxAtrib.rssi/snr/evm with the same units/conventions as the Jaguar1 parser (so demo output and regex consumers behave identically across generations).
- Applies to both generations behind the existing strategy split if the physts formats diverge between 8822C and 8822E (verify against
reference/rtl88x2eu).
- Optional follow-ups once the parse exists: surface
cfo_tail and type-2/3 avg_noise_pwr (new fields, currently dropped on Jaguar1 too).
Validation
- Bench: known-distance link, compare Jaguar3 reported RSSI against a Jaguar1 DUT and kernel-driver radiotap dBm on the same frames.
- Regression:
<devourer-stream> lines on 8812CU/8822EU must show plausible non-zero rssi/snr/evm; existing Jaguar1 output unchanged.
Relation to the frequency-resolved link-quality series
This is a prerequisite for the active-sounding milestone of the narrowband sweep (per-bin RSSI/EVM on RX), since Jaguar3 is the only generation with 5 MHz bins. Filed separately because it's a general RX gap, not sweep-specific.
Problem
On Jaguar3 the RX path fills only descriptor-level fields (
src/jaguar3/RtlJaguar3Device.cpp— length, rate, crc/icv, shift) and never decodes the phy-status trailer the chip appends to each frame. Result:RxAtrib.rssi[4]/snr[4]/evm[4]are zero on every 8812CU/8822EU frame, while on Jaguar1 the same fields are fully populated (src/jaguar1/FrameParser.cpp). Anything downstream that reads them —<devourer-stream>quality fields,DEVOURER_RX_ALLPATHS, the decorrelation/MRC tooling — silently reports zeros on Jaguar3.What the chip already provides
The jgr3 phy-status pages carry more than Jaguar1's format:
pwdb[4],rxevm[4],cfo_tail[4],rxsnr[4].avg_noise_pwr— a per-frame noise estimate Jaguar1 doesn't expose at all.Reference layouts:
reference/rtl88x2cu/hal/phydm/phydm_phystatus.h. A much cleaner parser to crib from is mainline rtw88'srtw8822c.c(query_phy_status_page0/page1) — same silicon, minimal code.Scope
RxAtrib.rssi/snr/evmwith the same units/conventions as the Jaguar1 parser (so demo output and regex consumers behave identically across generations).reference/rtl88x2eu).cfo_tailand type-2/3avg_noise_pwr(new fields, currently dropped on Jaguar1 too).Validation
<devourer-stream>lines on 8812CU/8822EU must show plausible non-zero rssi/snr/evm; existing Jaguar1 output unchanged.Relation to the frequency-resolved link-quality series
This is a prerequisite for the active-sounding milestone of the narrowband sweep (per-bin RSSI/EVM on RX), since Jaguar3 is the only generation with 5 MHz bins. Filed separately because it's a general RX gap, not sweep-specific.