-
Notifications
You must be signed in to change notification settings - Fork 64
TCI Server
AetherSDR includes a built-in TCI (Transceiver Control Interface) server. TCI is an open protocol that carries CAT control, RX/TX audio, IQ data, CW keying, and spot injection over a single WebSocket connection — replacing the need to configure separate rigctld, DAX audio pipes, and virtual serial ports.
AetherSDR is the first FlexRadio client with built-in TCI support.
TCI was created by Expert Electronics for their ExpertSDR3 software and has become a de facto standard for SDR integration. It uses a WebSocket connection (text frames for commands, binary frames for audio/IQ) so any application on your machine or LAN can connect with zero audio routing configuration.
TCI vs traditional setup:
| Task | Traditional | TCI |
|---|---|---|
| CAT control | rigctld TCP or virtual serial port | Single WebSocket |
| RX audio | DAX PulseAudio pipes | Same WebSocket |
| TX audio | DAX TX pipe | Same WebSocket |
| IQ data | DAX IQ pipes | Same WebSocket |
| Spots | Separate DX cluster connection | Same WebSocket |
| CW keying | Serial DTR/RTS or rigctld | Same WebSocket |
- Settings menu → Autostart TCI with AetherSDR — starts the server on every radio connect
- Or manually: open the DIGI applet → TCI Server section → click Enable
| Setting | Default | Location |
|---|---|---|
| Port | 50001 | DIGI applet → Port field |
| Autostart | Off | Settings menu |
The DIGI applet shows the server status and connected client count.
Point your TCI-capable application to:
ws://localhost:50001
Or from another machine on your LAN:
ws://192.168.1.x:50001
WSJT-X Improved v3.0+ supports TCI for rig control.
Setup:
- In WSJT-X, go to File → Settings → Radio
- Set Rig to
Expert Electronics (TCI) - Set Network Server to
localhost:50001 - Click Test CAT — should show green
WSJT-X uses TCI for CAT control (frequency, mode, PTT) and system audio devices for RX/TX audio. You can use DAX or PulseAudio routing for the audio side.
MSHV supports TCI for both CAT control and audio.
Setup:
- Go to Settings → Interface
- Select TCI as the interface type
- Enter
localhostand port50001 - Enable audio streaming if desired
Log4OM v2 has full TCI support including CAT, audio, IQ, and spot display.
Setup:
- Go to Settings → Radio
- Select TCI as the radio connection type
- Enter
localhost:50001
JTDX has TCI support but is no longer maintained and may crash with some TCI servers. We recommend WSJT-X Improved instead.
Any software that implements the TCI protocol can connect:
- HamDeck — Stream Deck automation via TCI
- TCI-Hamlib Adapter (DL3NEY) — bridges TCI to Hamlib for apps that only support rigctld
- eesdr-tci — Python TCI client library for scripting
You can test the TCI server interactively using wscat:
# Install
npm install -g wscat
# Connect
wscat -c ws://localhost:50001You'll see the init burst with full radio state. Try these commands:
# Get current frequency
vfo:0;
# Get current mode
modulation:0;
# Tune to 14.074 MHz (FT8)
vfo:0,0,14074000;
# Switch to DIGU
modulation:0,digu;
# Get drive level
drive;
# Set drive to 25 watts
drive:25;
# Key PTT
trx:0,true;
# Unkey PTT
trx:0,false;
# Start audio streaming
audio_start:0;
# Stop audio streaming
audio_stop:0;
AetherSDR implements the full TCI v2.0 protocol specification (72 command handlers):
| Category | Commands |
|---|---|
| VFO/Mode |
vfo, modulation, rx_filter_band, dds, if, vfo_limits, if_limits, vfo_lock
|
| TX |
trx, tx_enable, tune, drive, tune_drive, tx_frequency
|
| RIT/XIT |
rit_enable/offset, xit_enable/offset, split_enable
|
| Audio |
volume, mute, rx_volume, rx_mute, rx_balance, mon_enable, mon_volume
|
| AGC/SQL |
agc_mode, agc_gain, sql_enable, sql_level, lock
|
| DSP |
rx_nb_enable/param, rx_nr_enable, rx_anf_enable, rx_apf_enable, rx_bin_enable, rx_anc_enable, rx_dse_enable, rx_nf_enable
|
| CW |
cw_macros_speed, cw_keyer_speed, cw_macros_delay, cw_msg, cw_macros, cw_macros_stop, cw_terminal, keyer
|
| Audio Streaming |
audio_start/stop, audio_samplerate, audio_stream_sample_type, audio_stream_channels, audio_stream_samples
|
| IQ |
iq_start/stop, iq_samplerate
|
| Spots |
spot, spot_delete, spot_clear, clicked_on_spot
|
| Sensors |
rx_sensors_enable, tx_sensors_enable, rx_channel_sensors, tx_sensors
|
| Digital |
digl_offset, digu_offset
|
TCI audio streaming sends RX audio and accepts TX audio over the same WebSocket connection as binary frames.
The native radio sample rate is 24 kHz. TCI clients can request a different rate:
audio_samplerate:48000;
Supported rates: 8000, 12000, 24000 (native), 48000 Hz. Resampling is handled by AetherSDR's r8brain polyphase resampler — per client, so each connected application can use its preferred rate.
Default is float32 stereo. Clients can negotiate:
audio_stream_sample_type:0; # int16
audio_stream_channels:1; # mono
Audio doesn't flow until the client requests it:
audio_start:0; # start RX audio for receiver 0
audio_stop:0; # stop
TCI clients can subscribe to meter data:
rx_sensors_enable:true; # receive S-meter updates
tx_sensors_enable:true; # receive TX power/SWR/mic during transmit
RX sensors broadcast per-slice S-meter readings in dBm at 200ms intervals:
rx_channel_sensors:0,0,-97.3;
TX sensors broadcast during transmit:
tx_sensors:0,-27.2,47.4,47.4,1.3;
# trx, mic_dBm, fwd_W, peak_W, SWR
TCI supports both CW macros (text-based) and straight key (paddle/key input):
# Send CW text
cw_macros:CQ CQ CQ DE KK7GWY;
# Stop CW
cw_macros_stop;
# Set speed
cw_keyer_speed:25;
# Straight key (for remote keying)
keyer:0,true; # key down
keyer:0,false; # key up
Port conflict: If port 50001 is in use, change it in the DIGI applet Port field.
No audio: Make sure the client sends audio_start:0; after connecting. Audio doesn't flow by default.
JTDX crashes: This is a known JTDX bug (unmaintained Qt5 code). Use WSJT-X Improved instead.
Firewall: If connecting from another machine, ensure port 50001 (TCP) is open.
- Panadapter Controls
- VFO Widget
- RX Controls
- TX Controls
- Aetherial Audio
- Multi-Slice Operation
- Diversity and ESC
- TNF (Tracking Notch Filters)
- Memory Channels
- Profile Management
- Slice Colors
- XVTR (Transverters)
- CWX Panel
- CW Decoder
- DVK Panel
- RTTY Operation
- RADE Digital Voice
- DAX Virtual Audio
- DAX IQ Streaming
- WSJT-X Integration
- CAT Control
- TCI Server