TCI Server (TCI Applet)¶
AetherSDR can run an Expert-style TCI WebSocket server so third-party logging, digital-mode, and SDR software (Log4OM, SunSDR tools, etc.) can read and control the radio over the TCI protocol. TCI TX audio is received over the WebSocket and fed into a dedicated dax_tx stream slot that is independent of the Windows SmartSDR DAX2 audio device path, so TCI TX works on all platforms including Windows and Linux without PipeWire.
Before you start¶
- A FLEX-8600 radio is connected and visible in the application.
- The TCI applet is visible. If it is not, click the
TCItray button on the right sidebar to show it.
Steps¶
- Open the TCI applet by clicking the
TCItray button on the right sidebar if it is not already visible. - In the
Portfield, enter a port value between 1024 and 65535. The default is50001. If the field is blank or out of range, type50001and press Enter β the field snaps to50001automatically for out-of-range values. - Click
Enableto start the TCI server. - Confirm the status indicator next to
Enableshows:<port> (0 clients)rather than(port in use). If it shows(port in use), see Troubleshooting below. - Configure your third-party software to connect to the TCI server at
localhost:<port>.
What each control does¶
| Control | Default | Valid range | Setting key | Behavior |
|---|---|---|---|---|
Port field |
50001 |
1024β65535 | TciPort |
Changing the port restarts the server if enabled. Out-of-range values snap to 50001. |
Enable toggle |
Off | On / Off | None | Starts or stops the TCI server; emits tciToggled. If bind fails the toggle snaps back to off and status shows (port in use). |
| RX1 gain+meter | 0.5 | 0.0β1.0 | TciRxGain1 |
Combined meter/slider; drag sets the TCI RX gain for the channel and emits tciRxGainChanged. |
| RX2 gain+meter | 0.5 | 0.0β1.0 | TciRxGain2 |
Combined meter/slider; drag sets the TCI RX gain for the channel and emits tciRxGainChanged. |
| RX3 gain+meter | 0.5 | 0.0β1.0 | TciRxGain3 |
Combined meter/slider; drag sets the TCI RX gain for the channel and emits tciRxGainChanged. |
| RX4 gain+meter | 0.5 | 0.0β1.0 | TciRxGain4 |
Combined meter/slider; drag sets the TCI RX gain for the channel and emits tciRxGainChanged. |
| TX gain+meter | 0.5 | 0.0β1.0 | TciTxGain |
Drags set the TCI TX gain and emit tciTxGainChanged. Right-click opens TX overflow-mode picker (Clip / NaNGuard / Measure). |
| TX overflow mode (right-click) | Clip (0) | Clip (0), NaNGuard (1), Measure (2) | TciTxOverflowMode |
Right-click the TX gain meter/slider to open a context menu selecting the TX overflow handling mode. Emits tciTxOverflowModeChanged. |
RX gain+meter details¶
Each RX channel (1β4) has a combined meter and slider. Drag the slider to set the TCI RX gain for that channel. The gain value is persisted separately per channel as TciRxGain1 through TciRxGain4. Each slider has an accessible name ("TCI RX 1 gain", "TCI RX 2 gain", etc.) for screen reader compatibility.
TX gain+meter details¶
Drags set the TCI TX gain and emit tciTxGainChanged. TCI TX audio is always allowed regardless of platform or hosted-DAX availability.
Right-click the TX gain meter/slider to open the TX overflow-mode context menu. This lets you choose how out-of-range (>1.0) samples from digital-mode clients are handled:
- Clip (saturating Β±1.0) β Hard-clamp overshoots to Β±1.0. This is the legacy default; it protects downstream int16 conversion but introduces harmonics on overshoot.
- NaN guard (zero NaN/Inf only) β Pass samples through bit-exact; only zero pathological NaN/Inf values. Preserves digital-mode tone fidelity. Out-of-range float values reach the radio.
- Measure only (true bypass) β Never mutate samples. Count overshoots for telemetry only. The downstream int16 conversion still clamps in the radio-native DAX route.
The selected mode is persisted as TciTxOverflowMode (0/½). Default is Clip so existing users see no behavior change.
Slice assignment labels¶
The RX1βRX4 and TX rows show a label indicating which slice currently drives that channel. The label shows β when no slice is assigned, or Slice <letter> when a slice is active. These labels share the DAX channel mapping.
Server status indicator¶
The status label next to Enable shows the server state and connected client count:
(stopped)β Server is not running.:<port> (N clients)β Server is running on the specified port with N connected clients.(port in use)β Server failed to start because another process is bound to the port.
The label is styled using the application theme. In earlier versions the label used a hard-coded color; in v26.6.1 the color is derived from the theme's background.3 color for consistent appearance across light and dark themes.
Tips¶
- If you use
Settings > Autostart TCI with AetherSDR, the TCI server starts automatically on each launch. - The crash on quit that affected v0.9.6 and earlier was fixed in v0.9.7. The fix ensures the TCI server is torn down after the audio thread stops but while the radio model is still alive, preventing a use-after-free.
- Starting with v26.5.2.1, the slice assignment labels (RX1βRX4 status and TX status) can render rich text. If a slice letter contains HTML characters (such as an ampersand or angle brackets), the label displays correctly instead of showing raw markup.
- Starting with v26.5.1, three TCI v2.0 commands (volume, drive, rx_volume) are supported with bidirectional state sync.
- Starting with v26.5.3, panadapter spectrum forwarding and tx_gain / ALC are exposed.
Troubleshooting¶
- Status shows
(port in use)after clickingEnableβ Another process is already bound to that port. Enter a different port number in thePortfield and press Enter, then clickEnableagain. - Application crashes on quit β Confirm you are running v0.9.7 or later. Check
Help > Aboutfor the version string. If the version is correct and crashes persist, disableEnablebefore quitting to isolate whether TCI is still involved. Enablesnaps back to off immediately β The port bind failed. The status label turns red and shows(port in use). Change the port value and try again.- Slice assignment label shows raw HTML β This indicates you are running a version earlier than v26.5.2.1. Upgrade to the latest version to ensure proper rendering of slice identifiers.