Add CW keying, function key messages and the documentation

The function keys send through cwdaemon or a WinKeyer, with N1MM's message
macros. Escape stops sending.

Settings are read with the reflection serializer rather than a generated one:
the generated one hands back null for every property the file leaves out
instead of the value the property is declared with, which crashed the program
the first time a new setting was added.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Erik
2026-08-27 11:23:30 +00:00
parent d96cbe146b
commit f5aa77ece3
25 changed files with 1002 additions and 26 deletions

View File

@@ -0,0 +1,17 @@
namespace Nonemm.Keying;
/// Something that sends a message on the air: a CW keyer, or a voice keyer
/// playing a recording.
public interface MessageSender : IDisposable
{
bool IsReady { get; }
/// Sends the text. Whatever is already going out is finished first unless
/// `Abort` is called.
Task SendAsync(string text, CancellationToken cancellation = default);
/// Stops sending straight away, which is what Escape does mid-message.
Task AbortAsync(CancellationToken cancellation = default);
Task SetSpeedAsync(int wordsPerMinute, CancellationToken cancellation = default);
}