Keep the band when the frequency is past the edge

Contest operating goes outside the band edges. Someone answers a CQ at 14352, or
a radio reports a frequency a few hundred hertz off, and Bands.ForFrequency
returned null: the contact scored nothing, missed the per-band dupe check and
exported with no band.

N1MM buckets a frequency by its whole megahertz — its BandFor divides the
kilohertz by 1000 and switches on the result, with 1 and 2 both 160M, 3 and 4
both 80M, 28 and 29 both 10M — and never looks at a band edge. Same rule here,
except that the real edges are checked first: 2190M and 630M are both under
1 MHz and share the bucket, so nothing else can tell them apart. A frequency
under 1 MHz that misses both edge ranges still has no band, as it does in N1MM.

The bandmap clamped its slice to the band edges, so a radio past the edge left
the receiver bar off the top of the scale. The slice now stretches to wherever
the radio is.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-27 23:01:39 +00:00
parent d375d86466
commit e6d0b58305
4 changed files with 65 additions and 6 deletions

View File

@@ -219,7 +219,8 @@ to where it really is. That is what N1MM does, and the stacking follows its
rule: place the label centred on its frequency, and push it below the one above
if it would cover it.
The slice shown follows the receiver — 10, 20, 40 or 100 kHz, or the whole band.
The slice shown follows the receiver — 10, 20, 40 or 100 kHz, or the whole band
— and stretches past the band edge when the radio is past it.
Callsigns are coloured by the same scorer as the entry window, so a dupe reads
as a dupe here too. Clicking a callsign puts the radio there with the call
already in the entry window; clicking anywhere else just moves the radio.
@@ -231,6 +232,16 @@ other radio of a two-radio station.
Band-plan colouring of the scale is not there. The segments differ by ITU region
and the program has no band-plan table, so it would be guesswork.
### Band edges
A contact just outside a band edge keeps its band. `Bands.ForFrequency` first
checks the real edges, and for anything outside them falls back to the whole
megahertz: 14400 kHz is 20M, 7305 kHz is 40M. This is N1MM's rule, and it is
there because contest operating goes past the edges — someone answers a CQ at
14352, or a radio reports a frequency a few hundred hertz off — and a contact
with no band scores nothing and exports wrong. Below 1 MHz the megahertz is
always 0, so 2190M and 630M are told apart by their edges alone.
### The DX cluster
**Config → Cluster** takes the node's address, a password for the few nodes that