Skip to content

rigctld: emulation diverges from Hamlib client expectations — VFO mode, split, CW-reverse, CTCSS/AGC, bare-mode framing #3620

Description

@K5PTB

Problem

AetherSDR's rigctld (Hamlib NET rigctl) emulation has a number of gaps and incorrect responses that break real Hamlib clients. These surfaced across several apps:

1. pat / Winlink can't load AetherSDR as a rig.

Cannot load rig 'AetherSDR': Unable to select VFO: rigctl is not running in VFO mode

AetherSDR reports chk_vfo → 0, but pat and WSJT-X require chk_vfo=1 (VFO-prefix mode). With chk_vfo=1, many VFO-sensitive commands then also need to accept a leading VFO argument, which several handlers didn't.

2. WSJT-X "Rig" split fails with a protocol error.

rig_set_split_mode returning(-8) Protocol error
rig_set_split_freq_mode returning(-8) Protocol error
  while setting split TX frequency and mode

With a targetable VFO, WSJT-X sets the TX VFO directly (set_freq VFOB <hz> / set_mode VFOB <mode>) without a preceding set_split_vfo. AetherSDR rejected those with RPRT -8 (no second slice yet), and the set_split_* handlers also didn't strip the VFO prefix (RPRT -1).

3. set_mode CWR produces the wrong mode. Setting Hamlib CW-reverse mapped to a Flex CWL slice mode that doesn't exist; the radio silently coerced it (observed → PKTUSB). FlexRadio has a single CW slice mode (sideband is global), so CW-reverse has no per-slice equivalent.

4. CTCSS / DCS / AGC not wired or lying. CTCSS TX tone and AGC level weren't connected to the radio; unsupported features (RX CTCSS squelch, DCS) returned RPRT 0 ("success") instead of an honest error.

5. Bare-mode response framing. Bare-mode getter terminators didn't match Hamlib's reference rigctld. Notably, dropping the trailing RPRT 0 on get_lock_mode reintroduces a ~20 s WSJT-X startup stall (previously fixed in #3115); conversely #3120 over-generalized by adding it to every getter.

6. Assorted chk_vfo=1 command gaps. get_func/set_func, set_ctcss_tone, set_ts, set_ant, vfo_op and others returned errors when sent with the VFO prefix that VFO mode implies. VFOMEM was silently redirected to the active RX slice. Several CAT-thread writes to the GUI-thread slice model were unsynchronized.

Impact

pat won't connect at all; WSJT-X split is unusable; CW-reverse, CTCSS, and AGC give wrong or dishonest results to any Hamlib consumer (WSJT-X, fldigi, MacLoggerDX, JTDX, …).

Fix

Addressed by #3619 — a broad correctness pass against Hamlib's tests/rigctl_parse.c / rigs/network/netrigctl.c, validated live with WSJT-X (FT8 + Rig split) and fldigi, plus 208/208 in the in-tree rigctld_test suite (Mac live, RPi 5, Win 11).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmaintainer-reviewRequires maintainer review before any action is takenpriority: highHigh 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