Skip to content

tests: 8814AU validation harnesses + rail_check SDR-degraded arbitration (#110)#282

Merged
josephnef merged 2 commits into
masterfrom
110-au8814-validation-harnesses
Jul 12, 2026
Merged

tests: 8814AU validation harnesses + rail_check SDR-degraded arbitration (#110)#282
josephnef merged 2 commits into
masterfrom
110-au8814-validation-harnesses

Conversation

@josephnef

Copy link
Copy Markdown
Collaborator

Bench-tooling from the #110 re-validation. No library/driver code changes — tests/ only.

au8814_5g_baseline.sh / au8814_dual_soak.sh

The harnesses behind the #110 resolution (comment):

  • baseline: one cold session capturing the computed TXAGC index (DEVOURER_LOG_TXPWR), the CU-ground decode (frames/EVM/RSSI) and a single SDR duty read.
  • dual soak: max-duty TX measured continuously by a devourer ground and periodically by the B210, so any low SDR reading is attributable — transmitter collapse drops both; a bad SDR read leaves the ground strong. This is the instrument the original RTL8814AU: 5 GHz TX power drastically under-driven (~1.5 Mbps vs kernel ~58 Mbps) #110 investigation lacked (it cycled through three retracted hypotheses on single-instrument data).

Measured with these on current master: stock index 14 airs 46–67 % duty / RSSI 91 / EVM −54…−59, 10/10 soak rounds over 8 min with zero variance — the historic "1.5 Mbps under-drive" was the #252 TX-feed collapse plus SDR read artifacts, not a power-calculation bug.

rail_check.sh v2 + bench_onair.py

The rail-sag guard itself had the failure mode it guards against being confused with: the B210's degraded-read mode on back-to-back sessions (~1.5 % duty with a clean-looking noise floor while the air is saturated — proven by a simultaneous ground decode at 156k frames / RSSI 88) landed exactly in the old check's second-read slot, false-declaring RAIL SAG and pointing users at hub power.

Now: per-band noise floors pinned from idle reads (a busy 2.4 GHz channel used to under-read duty and poison the ratio heuristic); the 5 GHz reading takes the trustworthy first-of-session slot; a low reading gets a cooldown + usbreset of the B210 + one retry; a persistent low reading is arbitrated against an independent devourer ground — ground-hears-strong-RSSI yields the new exit 2 = SDR DEGRADED verdict (rail fine, bench numbers still unusable this session). The ratio check is demoted to a warning; the absolute 5 GHz floor is the guard. bench_onair.py aborts with the matching banner on exit 2 instead of emitting a garbage table.

Live-bench validated: idle floors −49.5/−31.3 dB pinned, 5 GHz 50.1 % fresh-slot, 2.4 GHz 60.7 % despite ambient → rail OK, exit 0. README 8814 row re-confirmed with the fixed tooling: 65 / 30 / 26 Mbps (ch6/ch36/ch149).

🤖 Generated with Claude Code

josephnef and others added 2 commits July 12, 2026 11:57
au8814_5g_baseline.sh — one cold session: computed TXAGC index
(DEVOURER_LOG_TXPWR), CU-ground decode (frames/EVM/RSSI) and a single SDR
duty read. au8814_dual_soak.sh — max-duty TX measured CONTINUOUSLY by the
ground and periodically by the B210, so a low SDR reading is attributable
(transmitter collapse = both drop; bad SDR read = ground stays strong).

These are the harnesses behind the #110 re-validation: stock index 14 airs
46-67% duty / RSSI 91 / EVM -54..-59 sustained (10/10 rounds over 8 min);
the historic 1.5 Mbps readings were the #252 TX-feed collapse plus
back-to-back SDR-read artifacts, not a power-calculation bug.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The rail-sag guard itself had the failure mode it guards against being
confused with: the B210 has a degraded-read mode on back-to-back sessions
(reads ~1.5% duty with a clean-looking noise floor while the air is
saturated — verified by a simultaneous devourer-ground decode at 156k
frames / RSSI 88), and the old check took its 5 GHz reading in exactly
that second-read slot, false-declaring RAIL SAG.

rail_check.sh now: pins per-band noise floors from idle reads (an unpinned
floor on a busy 2.4 GHz channel under-read duty and poisoned the ratio
heuristic); takes the 5 GHz reading in the trustworthy first-of-session
slot; on a low reading cools down, usbreset's the B210 and retries once;
and arbitrates a persistent low reading against an independent devourer
ground — ground-hears-strong-RSSI means the SDR is degraded, not the rail
(new exit code 2). The 5GHz/2.4GHz ratio check is demoted to a warning;
the absolute 5 GHz floor is the guard. bench_onair.py aborts with an
SDR-degraded banner on exit 2 instead of emitting a garbage table.

Live-bench validated: idle floors -49.5/-31.3 dB pinned, 5 GHz 50.1% in
the fresh slot, 2.4 GHz 60.7% despite ambient -> rail OK, exit 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@josephnef josephnef merged commit a0d3b36 into master Jul 12, 2026
15 checks passed
@josephnef josephnef deleted the 110-au8814-validation-harnesses branch July 12, 2026 11:32
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