The QTC window took traffic down and read it out of the log, but nothing left the window: on CW the operator had to send the lines by hand. It now puts them on the air through the entry window's keyer, the way N1MM's QTC window sends through its own entry window, so the same macros are expanded and the same transmitter is pointed at first. Sending a series: Send Hdr keys the header, Send1 to Send10 key one line each — the time, the callsign and the serial number — and Close keys the TU message when one is set. Taking one down: Hdr Agn asks for the header again, and shift with Enter in a box asks for that one field again and clears it. The messages and their defaults are N1MM's: AGN TIME, AGN CALL, AGN SERIAL, the hard-coded HDR AGN with its two spaces, and a TU that sends nothing until the operator writes one. So is the field spacing, written N1MM's way with S for a space. All five are in Setup, where the note about the missing settings used to be. Nothing is sent on SSB or RTTY. N1MM plays four recordings on SSB and sends RTTY from its digital window, and there is neither here, so on those modes the buttons move the cursor as before. RX Ready sends nothing on any mode, because a recording is all N1MM ever sends from it. Serial numbers go out as digits: N1MM can send cut numbers and nothing here does, in any message. Driven under Xvfb against a fake cwdaemon, in a WAE CW contest with four contacts logged. Sending, it keyed QTC 1/2, 2257 DL1AAA 01, 2257 DL2BBB 01, then QTC 2/2 with its two lines and TU DE W1ABC on close. Receiving, HDR AGN, AGN TIME, AGN CALL and AGN SERIAL. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RoGtneMQaz4M9w7Kk49AVD
131 lines
7.7 KiB
Markdown
131 lines
7.7 KiB
Markdown
# 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 transmits on CW only.** The header, the lines, the TU and the
|
|
four again messages go out through the keyer, with N1MM's messages and N1MM's
|
|
defaults. Nothing goes out on SSB or RTTY: N1MM plays four recordings on SSB —
|
|
QRV, Agn, Cfm and TU — and sends RTTY from its digital window, and this program
|
|
has neither a voice keyer nor a digital window. RX Ready therefore sends nothing
|
|
on any mode here, because N1MM only ever sends a recording from it.
|
|
|
|
**Cut numbers are not sent.** N1MM can key a serial number as letters — `N` for
|
|
9, `T` for 0 — and offers several styles. Nothing here does, in a QTC line or in
|
|
any other message.
|
|
|
|
**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.
|
|
|
|
**Telnet window: what N1MM has and this does not.** Left out: the special-calls
|
|
list, and saving received spots to a database — N1MM keeps those spots in its
|
|
admin database, which is not the log file the two programs share, so there is
|
|
nothing to be compatible with and nothing asks to read them back. The band plan
|
|
tab is not repeated either, because Config ▸ Sub bands already edits the same
|
|
numbers.
|
|
|
|
The node list is downloaded from the public NG3K page rather than from N1MM's
|
|
own web service, which asks the operator to opt in to data collection and is
|
|
N1MM's to run. A page that changes shape would stop the download working; the
|
|
reading only needs `telnet://` links in a table, and the old list stays in place
|
|
when a download brings back something unreadable.
|
|
|
|
**Not every action macro is acted on.** The text macros and the action macros
|
|
that this program can carry out are listed in the README. What is read and
|
|
passed over: the `{CAT…}` and radio-hex families, the audio and rotator macros,
|
|
`{STEREOON}` and `{STEREOOFF}`, `{CONDJUMP}`,
|
|
`{QSYCQ}`, `{FORCELOG}`, `{SwapContests}`, the digital TNC macros (`{ENTER}`,
|
|
`{ESC}`, `{CTRL-A}`…), and the wav-directory macros, which wait on voice keying.
|
|
A message holding any of them still sends the right characters.
|
|
|
|
The CW keyer macros are not read either: `<` and `>` for speed, `~` for a half
|
|
space, and the prosign characters `]`, `[`, `+` and `=`. They belong to the
|
|
keyer rather than to the expander — cwdaemon and a WinKeyer each have their own
|
|
way of saying them — and they go out as the characters they are.
|
|
|
|
**The busted-spot check is one character wide.** N1MM offers two. Every call one
|
|
character away from the spotted one is looked up in the callsign database, which
|
|
is a few hundred lookups per spot; two characters away is a few hundred thousand,
|
|
which is too much work per spot for the little it would add.
|
|
|
|
**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 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.
|