Skip to content

Add CW (CWX) keying and macros over the TCI protocol #1677

Description

@e72xgordan-lgtm

Request preparation

  • I used an AI assistant to help structure this request
  • I checked for existing issues covering the same feature

What would you like?

These commands are well-documented in FlexLib (CWX.cs). They do NOT require
a separate VITA-49 stream — they travel on the existing TCP command channel.

TCI protocol

TCI uses a plain TCP socket with newline-delimited text commands.
Reference: https://github.com/maksimus1210/TCI
Key messages: cw:, cw_macros_speed:, voice_message:, stop, trx:, xit:

SSB voice playback

No radio-side command needed for voice playback — audio is injected on the
client side via the existing AudioEngine TX path. The radio receives it as
ordinary mic audio when xmit 1 is asserted.


Acceptance Criteria

  • AetherSDR starts a TCI server on the configured port when connected; a
    CW text command from N1MM+ or DXLog.net causes the radio to key CW
    correctly on the active slice.
  • The CW macro panel in PhoneCwApplet sends queued CW text via
    cw queue and the STOP button flushes the queue; macro text and labels
    survive an application restart.
  • CW speed set via the TCI cw_macros_speed message or the WPM spinner
    in the macro panel is reflected on the radio (verify with slice get
    response showing the new speed).
  • The SSB voice macro panel plays a .wav file over the TX audio path,
    asserts PTT automatically, and drops PTT when playback ends or STOP is
    pressed; no audio artifact is audible after PTT release.
  • TCI port, enable/disable toggle, and all macro slots are configurable
    in the GUI and persisted via AppSettings (not QSettings)

Metadata

Metadata

Assignees

No one assigned

    Labels

    CWCW keying, decode, and operationawaiting-responseWaiting for reporter to provide additional informationenhancementImprovement to existing featurepriority: lowLow priorityprotocolSmartSDR protocol

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions