Skip to content

fix(tci): use device:AetherSDR + protocol:ExpertSDR3 to restore TCI TX audio level (#2806)#2807

Merged
ten9876 merged 1 commit into
mainfrom
auto/fixtci-revert-deviceprotocol-identity-to-v2651-to-
May 17, 2026
Merged

fix(tci): use device:AetherSDR + protocol:ExpertSDR3 to restore TCI TX audio level (#2806)#2807
ten9876 merged 1 commit into
mainfrom
auto/fixtci-revert-deviceprotocol-identity-to-v2651-to-

Conversation

@ten9876

@ten9876 ten9876 commented May 17, 2026

Copy link
Copy Markdown
Collaborator

PR #2597 changed TCI server identity from
device: protocol: ExpertSDR3,1.5
to
device: SunSDR2DX protocol: ExpertSDR2,1.9
so RF2K-S amplifier firmware would whitelist AetherSDR. WSJT-X reads the
same fields to decide TX audio scaling: the SunSDR2DX/ExpertSDR2,1.9
pair drops TCI TX power by roughly 1 dB (measured 70 W vs 100 W
expected; reverting recovers to 88 W out of 100 W, the remaining
0.5 dB is within ALC/calibration variance).

Reverts only the device + protocol strings. Everything else from #2597
that the RF2K-S parser actually needs — strict init-burst order,
vfo_limits, if_limits, channels_count (plural-form), split_enable —
remains intact, so the amp interop work is mostly preserved.

A clean fix that keeps both clients happy (e.g. per-client adaptive
identity or a user-facing TCI Identity setting) is tracked in #2806.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

@ten9876 ten9876 requested a review from jensenpat as a code owner May 17, 2026 14:10
@ten9876 ten9876 enabled auto-merge (squash) May 17, 2026 14:10
…X audio level (#2806)

WSJT-X's TCITransceiver applies a -6 dB amplitude scaling to TCI TX
audio when BOTH of these match the server's init burst:
  device  == "SunSDR2DX" or "SunSDR2PRO"
  protocol != starts-with "ExpertSDR3"
(reference: wsjtx/Transceiver/TCITransceiver.cpp:823 + .hpp:188-200,
K1=0.999/0x7FFF vs K2=0.499/0x7FFF.)

PR #2597 hit both conditions exactly — device=SunSDR2DX +
protocol=ExpertSDR2,1.9 — so WSJT-X halved every TX sample at the
source and TCI users measured ~70 W of 100 W expected.

Fix:
  - device: literal "AetherSDR" — avoids the SunSDR-specific gain trap
    AND avoids the leading-space bug in the older "<name> <model>"
    form when the radio nickname is empty.
  - protocol: "ExpertSDR3,1.5" — sets WSJT-X's ESDR3 flag, gating off
    the gain reduction and selecting command formats that AetherSDR
    already handles correctly (proven in v26.5.1).

Verified: WSJT-X TX output restored to 100 W of 100 W expected.

Everything else from #2597 (strict init-burst order, vfo_limits,
if_limits, channels_count plural-form, split_enable, post-READY audio
stream configuration) is preserved — that's the bulk of what the
RF2K-S TCI parser actually needs to engage. The amp's device/protocol
whitelist regresses, tracked separately in #2806.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ten9876 ten9876 force-pushed the auto/fixtci-revert-deviceprotocol-identity-to-v2651-to- branch from 4d3934e to 31980df Compare May 17, 2026 14:27
@ten9876 ten9876 changed the title fix(tci): revert device/protocol identity to v26.5.1 to restore TX audio level (#2806) fix(tci): use device:AetherSDR + protocol:ExpertSDR3 to restore TCI TX audio level (#2806) May 17, 2026
@ten9876

ten9876 commented May 17, 2026

Copy link
Copy Markdown
Collaborator Author

Force-pushed a stronger fix on top.

After cloning wsjtx upstream and reading TCITransceiver.cpp:823 + TCITransceiver.hpp:188-200, the exact mechanism is clear: WSJT-X halves every TX sample (K2 = 0.499/0x7FFF vs K1 = 0.999/0x7FFF) when both hold:

  • device: equals SunSDR2DX or SunSDR2PRO
  • protocol: does NOT start with ExpertSDR3

PR #2597 hit both conditions. The previous form of this PR fixed it by reverting both, but used the old device: <flex name> <flex model> form which has a leading-space bug when the radio nickname is empty.

The amended commit uses:

Verified locally: 100 W of 100 W on the meter (was 70 W before identity revert, 88 W with the first revert form).

73, Jeremy KK7GWY & Claude (AI dev partner)

@ten9876 ten9876 merged commit fed2413 into main May 17, 2026
4 checks passed
@ten9876 ten9876 deleted the auto/fixtci-revert-deviceprotocol-identity-to-v2651-to- branch May 17, 2026 14:38
@ten9876 ten9876 mentioned this pull request May 17, 2026
ten9876 added a commit that referenced this pull request May 17, 2026
Hotfix recommended for TCI digital-mode operators, Windows users with
MQTT or floating-panel windows, and Linux Ubuntu 22.04 builders.

- TCI TX audio level regression vs v26.5.1 (#2806/#2807) — restores
  WSJT-X / JTDX output to full level by reverting only the device +
  protocol identity strings from #2597 to a form that bypasses
  WSJT-X's TCITransceiver SunSDR2DX/non-ExpertSDR3 gain trap.
- Windows process lingering in Task Manager after close (#2802,
  chibondking) — three independent root causes addressed: Channel
  Strip + applet-panel float window WA_QuitOnClose, MqttClient
  destructor loop_stop.
- AppImage CI build failure on gcc 11 strict mode (#2799) — qualifies
  bitstream.h:192 member access with `this->` for two-phase name
  lookup. Restores the v26.5.2 x86_64 AppImage artifact.
- SSA (Sweden) band plan (#2805, NF0T) — Swedish national overlay
  with PTSFS 2025:1 constraints, Swedish labels, 89 spots.

Bumps version 26.5.2 → 26.5.2.1 in CMakeLists.txt, README.md,
CLAUDE.md; regenerates WhatsNewData.cpp from CHANGELOG.md.
CalVer scheme expanded to YY.M.patch[.hotfix] to document the
4th-component hotfix convention used historically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant