diff --git a/README.md b/README.md index 6c094d9..76a4240 100644 --- a/README.md +++ b/README.md @@ -247,14 +247,9 @@ Checked against N1MM 1.0.11031: a log this program wrote opens in N1MM, which reads the contest, its categories and the contacts. See [`docs/n1mm-interop.md`](docs/n1mm-interop.md) for what that took. -Not yet: voice keying, QTC handling for WAE, call history files, digital modes -beyond logging them, and the check window's Call History and Exchange columns, -which are left out rather than shown empty. +Nothing here has been run against a real radio, keyer, SO2R box or cluster node. +Every one of those is tested against a fake that speaks the same protocol, which +proves the two agree with each other and nothing more. -The radio, network and keyer clients are tested against fakes that speak the -documented protocols — the radio one over a real socket, against a stand-in for -`rigctld` that answers in the extended form. None has been run against a real -radio or keyer. The -cluster client is tested over a real socket against a node fake that sends the -telnet negotiation, the login prompt and spot lines, but not against a live -node. +[`docs/unfinished.md`](docs/unfinished.md) lists what is half-built and what has +never been tested against the real thing. diff --git a/docs/unfinished.md b/docs/unfinished.md new file mode 100644 index 0000000..c9ce077 --- /dev/null +++ b/docs/unfinished.md @@ -0,0 +1,71 @@ +# 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 | no `cwdaemon`, no radio keyed. | +| `WinkeyerSender` | nothing | no test at all, and no WinKeyer. The host-mode open sequence is from the WinKeyer datasheet. | + +The Cabrillo output has not been put in front of a contest sponsor's robot. + +## Half-built + +**Alternating CQ (SO2R).** Needs to know when the keyer has finished sending. +`MessageSender` is fire-and-forget: it has `SendAsync`, `AbortAsync` and +`SetSpeedAsync` and no completion signal. Both `cwdaemon` and a WinKeyer can +report completion, so the interface has to grow first. Timing it from the length +of the text would be a guess that goes wrong exactly when the contest is busy. + +**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. + +**The check window's Call History and Exchange columns.** Left out rather than +shown empty: there is no call history file support to fill them from. + +**Call history files.** Not read at all. They are what fills a known station's +name, state or zone in as soon as the call is typed. + +**QTC handling for WAE.** Not started. WAE logs will not be complete without it. + +**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. + +**Band-plan colouring of the bandmap scale.** N1MM colours the scale by CW, +digital and phone segment. The segments differ by ITU region and there is no +band-plan table here, so it is left out rather than guessed. + +**Contest coverage.** Eight contests 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 not in the registry fails with the contest name, which is the +right answer but it is still a wall. + +**The Available Mults and Qs window.** Not started. + +## 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. + +**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.