diff --git a/docs/unfinished.md b/docs/unfinished.md index 0110d3e..8b6392a 100644 --- a/docs/unfinished.md +++ b/docs/unfinished.md @@ -355,13 +355,29 @@ 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. -**The QTC window transmits on CW only.** The header, the lines, the QRV, the TU -and the 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. N1MM's Send All, which -keys a whole series at once, belongs to that RTTY window and is not here -either. +**The QTC window sends on CW and RTTY, not on SSB.** On CW the header, the +lines, the QRV, the TU and the again messages go out through the keyer, with +N1MM's messages and N1MM's defaults. + +On RTTY the station reading traffic out has Send All, which is N1MM's: the whole +series as one message, the heading, then every line with the operator's spacing +between them, then the ending, and `{TX}` and `{RX}` around the lot so it keys +the transmitter and drops it again. A line is the three fields joined with +hyphens, which is how N1MM writes them and it offers no setting for it. Snd n +sends one line again for a station that missed it. The heading, the ending and +the spacing are settings, N1MM's `WAESendAllHeadingText`, +`WAESendAllEndingText` and `WAESQTCSpacing`, with its defaults; `{ENTERLF}` in +them is new to the expander and stands for a carriage return and a line feed. + +A whole series is the best part of a minute of transmission at 45 baud, which is +why it is one message rather than a button per line: the type-ahead buffer holds +it and paces the engine, and the operator presses one button. This has been +tested as text — what the message comes out as — and not on the air. + +What is not here: N1MM's four SSB recordings — QRV, Agn, Cfm and TU — which need +a voice keyer, and its RTTY messages for the station taking traffic down, which +are `WAERXReadyText`, `WAEAllAgnText`, `WAEAGNText` and `WAESaveQTCText`. Those +four are typed into the digital window's transmit pane here. **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 @@ -411,9 +427,11 @@ ones the station's log needs — and both of N1MM's names open a log with it. A sprint log would be scored by the wrong rules, and a log started here writes `BARTGRTTYS` into the contest name, which N1MM would read as the sprint. -**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. +**Digital interfaces other than MMTTY.** A contact can be logged as RTTY or +another digital mode and the contest rules score it, and the digital window +decodes and transmits through MMTTY over the Wine bridge. What is not here: +fldigi, MMVARI, 2Tone and the hardware TNCs, all of which N1MM drives. +`DigitalEngine` is the place to add them. **Contest coverage.** Twenty-five families are built in, plus whatever `.udc` files are in the user-defined folder. N1MM ships well over a hundred. Opening a log diff --git a/src/Nonemm.App/Configuration/Settings.cs b/src/Nonemm.App/Configuration/Settings.cs index 060eae0..681501b 100644 --- a/src/Nonemm.App/Configuration/Settings.cs +++ b/src/Nonemm.App/Configuration/Settings.cs @@ -169,6 +169,16 @@ public sealed record Settings public string QtcCwTu { get; init; } = ""; + /// The RTTY messages the QTC window sends, with N1MM's defaults. The + /// spacing goes between the lines of a series rather than between the + /// fields of one, and all three are macro templates: `{ENTER}` for a + /// carriage return, `{QTC}` for the header of the series. + public string QtcRttySpacing { get; init; } = QtcMessages.DefaultRttySpacing; + + public string QtcRttySendAllHeading { get; init; } = QtcMessages.DefaultSendAllHeading; + + public string QtcRttySendAllEnding { get; init; } = QtcMessages.DefaultSendAllEnding; + /// Sub-band boundaries the operator has changed. Empty means the defaults /// in `BandPlan.Default`; an entry replaces one band's boundaries. public IReadOnlyList SubBands { get; init; } = []; diff --git a/src/Nonemm.App/Dialogs/QtcSetupDialog.axaml b/src/Nonemm.App/Dialogs/QtcSetupDialog.axaml index 9ef7258..f83abf7 100644 --- a/src/Nonemm.App/Dialogs/QtcSetupDialog.axaml +++ b/src/Nonemm.App/Dialogs/QtcSetupDialog.axaml @@ -33,8 +33,19 @@ + + + + + + + + + + + Text="N1MM's SSB recordings are left out: playing those needs a voice keyer, and this program has none. So are its RTTY messages for the station taking traffic down — RX Ready, All Agn, Agn and Save — which are typed into the digital window's transmit pane here." />