From dc1c593b4d4b0b0d21eb8664e6fbef19a4adace0 Mon Sep 17 00:00:00 2001 From: ericek111 Date: Sun, 30 Aug 2026 23:03:17 +0000 Subject: [PATCH] Send WAE QTC traffic on CW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_01RoGtneMQaz4M9w7Kk49AVD --- README.md | 31 ++++-- docs/unfinished.md | 19 ++-- src/Nonemm.App/Configuration/Settings.cs | 14 +++ src/Nonemm.App/Dialogs/QtcSetupDialog.axaml | 17 +++- .../Dialogs/QtcSetupDialog.axaml.cs | 10 ++ src/Nonemm.App/Windows/EntryWindow.Macros.cs | 29 ++++++ src/Nonemm.App/Windows/EntryWindow.axaml.cs | 2 +- src/Nonemm.App/Windows/QtcWindow.axaml | 1 + src/Nonemm.App/Windows/QtcWindow.axaml.cs | 96 +++++++++++++++++-- src/Nonemm.Session/QtcMessages.cs | 36 +++++++ .../Nonemm.Session.Tests/QtcMessagesTests.cs | 34 +++++++ 11 files changed, 263 insertions(+), 26 deletions(-) create mode 100644 src/Nonemm.Session/QtcMessages.cs create mode 100644 tests/Nonemm.Session.Tests/QtcMessagesTests.cs diff --git a/README.md b/README.md index fb72c05..287071c 100644 --- a/README.md +++ b/README.md @@ -554,15 +554,30 @@ edited. On CW and SSB the direction is fixed by the rules; on RTTY traffic goes both ways and the window has a switch. Right-click the window for **Setup**: how many QTCs a series carries, whether -the RX Ready and Cfm steps are stopped at, and whether Hdr Agn and Agn clear -what they ask for again. The defaults are N1MM's — both steps skipped, the -header cleared, the line left alone. +the RX Ready and Cfm steps are stopped at, whether Hdr Agn and Agn clear what +they ask for again, and the CW messages below. The defaults are N1MM's — both +steps skipped, the header cleared, the line left alone. -Nothing in the window transmits. On CW the operator sends from the entry window, -on SSB by voice, and RTTY has no digital window yet, so Agn, Cfm and RX Ready -move the cursor rather than putting anything on the air. N1MM's QTC settings for -sending — the CW messages for Agn and TU, the field spacing, the SSB recordings -and the RTTY templates — are left out with them. +On CW the window puts the traffic on the air itself, through the same keyer a +function key sends through: + +| | | +|---|---| +| Send Hdr | the header of the series, `QTC 3/10` | +| Send1 to Send10 | one line: the time, the callsign and the serial number | +| Close | the TU message, when one is set | +| Hdr Agn | `HDR AGN`, asking for the header again | +| Shift and Enter in a box | asks for that one field again — `AGN TIME`, `AGN CALL`, `AGN SERIAL` — and clears it | + +The gap between the fields of a line is written N1MM's way, with `S` for a +space, so `SS` is two and anything else goes out as it stands. All five messages +are N1MM's defaults and are edited in Setup. The serial number goes out as +digits: N1MM can send cut numbers, and nothing here does, for any message. + +Nothing is sent on SSB or RTTY. N1MM plays four recordings on SSB — QRV, Agn, +Cfm and TU — and sends RTTY through its digital window; this program has no +voice keyer and no digital window, so on those two modes Agn, Cfm and RX Ready +move the cursor as they did before. The scoring was checked against six real WAE logs, and agrees with N1MM on points and on weighted multipliers to the contact. diff --git a/docs/unfinished.md b/docs/unfinished.md index e5de75b..0ba528c 100644 --- a/docs/unfinished.md +++ b/docs/unfinished.md @@ -39,17 +39,16 @@ 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. +**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. -**The QTC setup covers the window, not the sending.** Right-click ▸ Setup has -the four settings that change how the window behaves, with N1MM's defaults. -What is not there is everything about putting QTCs on the air: N1MM's CW -messages for Agn and TU, its SQTC field spacing, its four SSB recordings, and -its RTTY message templates. Those wait on a transmit path. +**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 diff --git a/src/Nonemm.App/Configuration/Settings.cs b/src/Nonemm.App/Configuration/Settings.cs index dfbd63d..abecea4 100644 --- a/src/Nonemm.App/Configuration/Settings.cs +++ b/src/Nonemm.App/Configuration/Settings.cs @@ -1,6 +1,7 @@ using System.Reflection; using System.Text.Json; using Nonemm.Core; +using Nonemm.Session; namespace Nonemm.App.Configuration; @@ -155,6 +156,19 @@ public sealed record Settings public bool QtcAgainClearsLine { get; init; } + /// The CW messages the QTC window sends, with N1MM's defaults. The spacing + /// is written N1MM's way, with `S` for a space. An empty TU message sends + /// nothing, which is N1MM's "Not Set". + public string QtcCwFieldSpacing { get; init; } = QtcMessages.DefaultFieldSpacing; + + public string QtcCwTimeAgain { get; init; } = QtcMessages.DefaultTimeAgain; + + public string QtcCwCallAgain { get; init; } = QtcMessages.DefaultCallAgain; + + public string QtcCwNumberAgain { get; init; } = QtcMessages.DefaultNumberAgain; + + public string QtcCwTu { get; init; } = ""; + /// 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 fb300db..9ef7258 100644 --- a/src/Nonemm.App/Dialogs/QtcSetupDialog.axaml +++ b/src/Nonemm.App/Dialogs/QtcSetupDialog.axaml @@ -18,8 +18,23 @@ FontSize="11" Opacity="0.7" TextWrapping="Wrap" Margin="24,-6,0,0" /> + + + + + + + + + + + + + + + Text="N1MM's SSB recordings and RTTY message templates are left out: sending those needs a voice keyer and a digital window, and this program has neither." />