Files
Nonemm/docs/unfinished.md
ericek111 9ae5078c84 Take WAE QTC traffic down
Ctrl+Z opens the QTC window for the station being worked, which is the key N1MM
puts it on, and the window is laid out the way N1MM lays it out: the header,
ten lines of time, callsign and serial number, an Agn and a Cfm button beside
each, Clear, Close and Cancel underneath, and the same colours — green for a
line that will be saved, red for one still empty, yellow for one that cannot be
read. Enter and Tab move forward and space moves within a line, so a line can be
walked while listening to it.

Sending, the lines are filled from the log and cannot be edited: the contacts
not reported to anybody yet, oldest first, never the station being worked, and
never past the ten any station may have. The rule for what has been reported is
N1MM's — a contact counts as reported when a QTC row carries its call and the
serial we sent it — so the pair is kept in the row the way N1MM keeps it.

Which way traffic goes is not the operator's choice on CW and SSB: Europe
receives and the rest of the world sends. On RTTY it goes both ways, and there
the window carries a switch. That is the one piece of the workflow that is ours
rather than N1MM's, which toggles a QTC mode outside the window instead.

Nothing here transmits. N1MM sends the lines on CW and RTTY and plays recorded
voice messages on SSB; we have no QTC message templates, no voice keyer and no
digital window, so Agn, Cfm and RX Ready move the cursor and the operator sends
by hand.

Running it caught what the tests could not: focus set in the constructor does
not stick, so the first thing typed into a freshly opened window was dropped and
every field after it took the value of the one before.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 00:02:47 +00:00

6.2 KiB

What is not finished, and what has not been tested

Two separate lists. A feature can be finished and untested, or half-built and exercised every day. Written 2026-08-27.

Never run against the real thing

Everything below is written from a published protocol or from N1MM's source and tested against a fake that speaks the same protocol. A fake agrees with whatever the person who wrote it believed, so these are the places where a wrong belief is still sitting there undiscovered.

What Tested against What has never happened
RigctldRadio a stand-in for rigctld over a real socket no real rigctld, no real radio. The extended answer format, the + prefix and the split commands are from the documented protocol. If the format is wrong, nothing works rather than something being subtly off — check this first.
OtrspBox a MemoryStream, checking the bytes no real SO2R box. Command forms are from N1MM's N1MMPort.cs.
ClusterClient a node fake over a real socket, sending the telnet negotiation, the login prompt and spot lines no live cluster node. Which nodes send bare CR, and which send option negotiation, is guessed from N1MM's code.
StationNetwork the message format, round-tripped no second station, and no N1MM on the same network.
CwDaemonSender the UDP messages, and a fake daemon that answers the <ESC>h reply request no cwdaemon, no radio keyed.
WinkeyerSender the status-byte reader, on its own no test of the serial side, and no WinKeyer. The host-mode open sequence is from the WinKeyer datasheet; the status bits are from N1MM's Winkey.cs.

The Cabrillo output has not been put in front of a contest sponsor's robot.

Half-built

Voice keying. MessageSender was written to cover a voice keyer playing a recording, and nothing implements it. No DVK support either, so the second radio of an SO2R station cannot call CQ by voice. Alternating CQ therefore works on CW only, though nothing in it is CW-specific: a voice keyer that reports when the recording has finished would drive it as it stands.

Alternating CQ does not restart itself after a contact. Escape stops it, and it has to be started again with Ctrl+B. N1MM carries on calling after the QSO is logged.

Call history: the section-validating directives. !!Validate50State!!, !!ValidateArrlSection!!, !!MapOnSection!! and !!GTA2GH_NT2TER!! are read and passed over. Acting on them means holding N1MM's section lists and its rules about which sections are retired, and getting that wrong throws away good data. The file is read without them.

The QTC window does not transmit. Ctrl+Z opens it and traffic goes into the log, but N1MM sends the QTC text itself: the lines on CW and RTTY, and recorded voice messages for QRV, Agn, Cfm and TU on SSB. Here the Agn, Cfm and RX Ready buttons only move the cursor. What is missing under it is the message templates for QTC traffic, a voice keyer, and the digital window.

N1MM's QTC setup tab is not there. Field spacing, the CW messages for Agn and TU, and the settings that skip the Cfm and QRV steps are all N1MM options this window does not have.

Two WAE numbers do not agree with N1MM, both from 2020 and 2021 logs. The disagreements are the country file of the day, not the rules: 4U1A counted as 4U1V then and as OE in today's wl_cty.dat, KP2BH counted as KP2 then and is listed as a US call now, and China was not split by call area yet. The 2022 to 2025 logs agree to the contact. One difference is ours on purpose: N1MM counts a callsign it cannot place — D1M — as a multiplier with an empty value, and we do not.

Digital modes. A contact can be logged as RTTY or another digital mode, and the contest rules score it, but there is no digital window: no decoding, no transmitting, no interface to fldigi, MMTTY or similar.

Contest coverage. Eight families are built in, plus whatever .udc files are in the user-defined folder. N1MM ships well over a hundred. Opening a log from a contest that is in neither place fails with the contest name, which is the right answer but it is still a wall.

Most of what is missing does not need code. A contest whose exchange is a report and one value, scored by band, mode, continent or country, and counted by country, zone, section or prefix, is a .udc file, and the file published for N1MM is read as it is. Code is for the ones .udc has no words for: WAE needs QTC traffic, IOTA needs island references as multipliers, and CQ WW RTTY needed a third multiplier and its own points table because it shares a name with the CW and SSB running of the contest.

What .udc cannot say here yet: an exchange that differs by the other station's country (the OK/OM district against a serial number from everyone else), points that depend on a zone or a distance, and multiplier sources beyond country, prefix, zone, section, exchange, grid and continent.

Known rough edges

The log window's column widths are the grid's own automatic sizing with a character-count floor. A column can change width as rows scroll into view.

Contacts arriving over the station network are applied from the socket thread, and AppSession.TakeFromNetwork reopens the whole contest to do it. That is correct but heavy, and it discards what is typed in an entry window on another radio.

The band plan covers 160M to 2M only. 60M and everything above 2M get no CW, digital or phone shading on the bandmap, because N1MM's own numbers for those bands contradict themselves — its CW top for 1.25M is below its phone start, and its 70CM CW top is above the band. Config ▸ Sub bands cannot add a band that has no default.

Available mults and Qs is only as good as the bandmap. It lists what is spotted, so a multiplier nobody has spotted is not there. N1MM's window also shows the mults a contest has and nobody has worked, which needs a list of every multiplier the contest counts. Only the section and state lists are held here, so the zone and country lists would have to come from the country file first.

Two entry windows and one keyer. The SO2R box is told which radio to key before each message, but nothing stops both radios sending at once if the operator asks them to.