Repository navigation
feat(bandplan): segment usage notes; fix all-modes rows painted digi-only (#4667). Principle IV. - #6573
Open
NF0T wants to merge 2 commits into
Open
feat(bandplan): segment usage notes; fix all-modes rows painted digi-only (#4667). Principle IV.#6573NF0T wants to merge 2 commits into
NF0T wants to merge 2 commits into
Conversation
…only (aethersdr#4667). Principle IV. The IARU Region 1 HF chart has two columns per row, preferred mode and usage. Our plan JSON had only `label`, so every "All modes" row with "Digimodes" usage was transcribed as narrow-band red DIGI. aethersdr#4635 fixed the one row aethersdr#4610 reported; this fixes the rest and adds the column the schema was missing. - BandPlanManager::Segment gains an optional `usage` string, parsed from the plan JSON. It is last in the struct so existing positional initialisers stay valid, and it never feeds isVoiceSegmentLabel(). - SpectrumWidget shows a segment's usage on hover over the band strip, after the spot and KiwiSDR fall-throughs. No usage, or strip Off: no tooltip, as before. - iaru-region1.json: 1.840, 14.101, 18.111, 24.931 and 29.200 become ALL; 7.050-7.060 splits at 7.053 per the chart; 21.110-21.120 stays DIGI (the chart says "not SSB") and carries that in `usage`. Usage text added to those rows and to 3.600-3.620. - ssa-sweden.json: the same rows become ALLA, including 3.600-3.620 which aethersdr#4635 never touched, with Swedish usage from SSA v2.61. Only rows where SSA v2.61 agrees with the 2020 R1 chart are changed. - bandplan_usage_resource_test loads both shipped plans through BandPlanManager and asserts every corrected row. Against main's data it fails 56 of 85 checks. - spectrum_confirmed_geometry_test (opt-in) gains a hover case with a spot-tooltip control and two negative cases. - docs/user: band plan overlay section mentions usage notes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ts out (aethersdr#4667) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NF0T
force-pushed
the
feat/bandplan-usage-4667
branch
from
October 18, 2026 20:08
f84a25d to
63fc82e
Compare
This branch has not been deployed
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.
Summary
Implements RFC #4667. The RFC has been open since 2026-08-01 with no maintainer decision, so this PR carries both parts as one reviewable change. Maintainers can accept, trim or reject it as a whole.
The IARU Region 1 HF chart (effective 16 Oct 2020) gives each row two columns, preferred mode and usage. Our band-plan JSON had a single
label. Every row reading "All modes" with "Digimodes" usage was therefore transcribed as digi-only and painted narrow-band red. #4610 reported one such row and #4635 fixed exactly that one. The rest are fixed here, and the schema gains the column that was missing.Part 1 — data. I re-checked every row against both charts on 2026-10-18 (
pdftotext -raw).iaru-region1.jsonssa-sweden.jsonDIGI→ALLDIGI→ALLAALLsince #4635) + usageDIGI→ALLA— #4635 never touched this fileDIGI→ALL, split at 7.053 per the chartDIGI→ALLA(SSA has one row)DIGI→ALLDIGI→ALLADIGI→ALLDIGI→ALLADIGI, usage says "All modes except SSB"DIGI, usage says "Alla moder utom SSB"DIGI→ALLDIGI→ALLADIGI→ALLDIGI→ALLAAll changed rows also move from
#c03030to#ff8000, the colour #4635 used. SSA usage text is in Swedish, transcribed from SSA Bandplan Kortvåg v2.61, to match the file's existing Swedish labels. As the RFC said, only rows where SSA v2.61 agrees with the 2020 R1 chart are changed. The 3.570 boundary is untouched.Why 21.110 keeps
DIGI: the chart's mode column there is "All modes … (not SSB)". A label that says so, such asNOT SSB, contains the tokenSSB, andisVoiceSegmentLabel()would then add the segment to the S-History voice mask (see the correction on the RFC). Keeping the label and putting the restriction inusageavoids that.Part 2 — schema.
BandPlanManager::Segmentgains an optionalQString usage, parsed from a"usage"key. It is last in the struct, so the existing positional initialisers inspectrum_overlay_band_highlight_testandkat500_tx_controls_teststay valid. Plans without the key behave exactly as before.Hover. In
SpectrumWidget::mouseMoveEvent, the band-row block gains a third fallback after band-plan spots and KiwiSDR spots. If the segment under the cursor hasusage, it showslow–high MHz — labelwith the usage note below. There is no new interaction or widget, and no change to clicks. It honours band-plan size Off, as the KiwiSDR fallback does. Segments withoutusagestill gethideText().Voice detection is unchanged.
usagenever reachesisVoiceSegmentLabel().DIGI→ALL/ALLAchanges no voice-mask membership, because neither label matches a voice token. A separate pre-existing defect in that mask came up during this work: on IARU R1, R3 and SSA, voice detection never fires on HF. It's filed as #6572, with a live A/B on a FLEX-8400, and is outside this PR's scope.Closes #4667.
Constitution principle honored
Principle IV — the data is transcribed from public documents: the IARU R1 HF band plan (eff. 16 Oct 2020) and SSA Bandplan Kortvåg v2.61. No proprietary sources.
Principle VIII — every claim below comes with the command that checks it, including a control showing the new test fails on main's data.
Test plan
Built with MSVC 2022 / Qt 6.12.0 on Windows 11,
RelWithDebInfo, in a separate worktree and build dir.Local build passes. Full build green.
New
bandplan_usage_resource_test: 92/92 pass. It loads both shipped plans throughBandPlanManager::loadPlans()andsetActivePlan(), so the parser and the resource are checked together. It checks label, colour and usage on every corrected row. It fails on any redDIGIrow other than the 21.110 exception, and checks thatARRL (US)parses with no usage. Settings are isolated withAETHER_SETTINGS_DIRplus Qt test mode.Control: the new test fails on main's data. With main's two plan files put back and only the test rebuilt, it reports 56 of 85 checks failed, each on a row this PR changes.
Existing tests pass:
bandplan_voice_labels_test,band_plan_license_filter_test,spectrum_overlay_band_highlight_test,kat500_tx_controls_test.The hover was checked on a real
SpectrumWidget, offscreen. I added a case to the opt-inspectrum_confirmed_geometry_test(-DAETHER_BUILD_SPECTRUM_GESTURE_TEST=ON). It loads IARU R1, sends a realQMouseEventto the band row, and readsQToolTip:14.100 MHz — IBP/NCDXF beacons.14.101–14.112 MHz — ALL/Digimodes, automatically controlled data stations (unattended).I could not run that test on this machine. It also covers the RTL-SDR backend, and RTL-SDR is compiled out here because librtlsdr isn't installed. It fails to link the same way on main. I compiled the test file to check the new case, and ran the identical case in a temporary probe built from the same app sources, which is where the results above come from. The probe is not committed.
One thing the probe showed: off-screen there is no QRhi, so right after
show()thePanadapterMessageOverlay"Spectrum renderer unavailable" notice covers the band row, andmouseMoveEventgives way to any child under the pointer. Without waiting for it to clear, the existing spot tooltip fails too. The committed case waits for it and checks the spot-tooltip control first. This is a test-environment artefact, not a user-facing behaviour.All 12
Static checksscripts pass locally with--strict, andcheck_a11y.pyreports 0 findings onSpectrumWidget.cpp.The docs site builds:
cd docs/user && npm ci && npm run build.Behaviour verified on a real radio — n/a. This is advisory display data plus a hover tooltip, with no radio interaction.
To reproduce the chart reading:
Checklist
docs/COMMIT-SIGNING.md)AppSettingscalls — none addedMeterSmoother— n/a, no meter UIdocs/user/docs/panadapter-controls.md(Band plan overlay). NoCHANGELOG.mdentry.Not in scope: IARU Region 2 and 3, ARRL (US) and RAC (Canada) are governed by their own charts and get no
usageyet. They fall back to today's behaviour.73,
Ryan NF0T
👨🏼💻 Co-authored by Claude Opus 5.5
🤖 Generated with Claude Code