Write down what is unfinished and what is untested
The README said "not yet" and listed four things. There are more than four, and the more useful split is between what is half-built and what is finished but has never met the hardware it talks to. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
15
README.md
15
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
|
reads the contest, its categories and the contacts. See
|
||||||
[`docs/n1mm-interop.md`](docs/n1mm-interop.md) for what that took.
|
[`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
|
Nothing here has been run against a real radio, keyer, SO2R box or cluster node.
|
||||||
beyond logging them, and the check window's Call History and Exchange columns,
|
Every one of those is tested against a fake that speaks the same protocol, which
|
||||||
which are left out rather than shown empty.
|
proves the two agree with each other and nothing more.
|
||||||
|
|
||||||
The radio, network and keyer clients are tested against fakes that speak the
|
[`docs/unfinished.md`](docs/unfinished.md) lists what is half-built and what has
|
||||||
documented protocols — the radio one over a real socket, against a stand-in for
|
never been tested against the real thing.
|
||||||
`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.
|
|
||||||
|
|||||||
71
docs/unfinished.md
Normal file
71
docs/unfinished.md
Normal file
@@ -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.
|
||||||
Reference in New Issue
Block a user