Request preparation
What would you like?
Feature Request: RF2K+ / RF2K-S Power Amplifier Integration
Summary
Add native support for the RF-Power RF2K+ and RF2K-S solid-state HF power amplifiers (~2 kW LDMOS). These amplifiers are widely used alongside FlexRadio transceivers in the DX and contesting community, and already ship with multiple network-accessible control interfaces that map cleanly onto AetherSDR's existing architecture.
The goal is to replicate — and extend — the kind of integration that the 4o3a Tuner Genius XL (TGXL) applet already provides, offering automatic band switching, telemetry display, and remote control directly from AetherSDR.
About the RF2K-S / RF2K+
| Property |
Details |
| Manufacturer |
RF-Power (rf-power.eu) |
| Models |
RF2K+ (kit), RF2K-S (assembled) |
| Controller |
Raspberry Pi 4 (internal), running Linux |
| Display |
7" touchscreen (HDMI) |
| Network |
Ethernet + WiFi (via RPi) |
The amplifier is currently controlled remotely only via VNC to the internal RPi screen — there is no dedicated desktop or web client. This is a known gap in the ecosystem.
Available Control Interfaces
The RF2K-S firmware exposes four independent control interfaces, all accessible over the network:
1. UDP Frequency Broadcast (simplest — recommended for Phase 1)
The amplifier listens for UDP broadcast packets containing the TX frequency. Any software on the LAN can send these packets; the amplifier parses the frequency, selects the correct bandpass filter, and loads the appropriate ATU preset — no acknowledgment or authentication required.
- Protocol: UDP broadcast, LAN
- Payload: TX frequency in Hz (ASCII decimal string in JSON envelope)
- Use case in AetherSDR: When the active TX slice changes frequency, emit a UDP packet. The amplifier follows automatically.
- Existing AetherSDR hook:
SliceModel::txFrequency is already tracked; a PaController UDP sender can attach here with minimal coupling.
Example packet:
{ "freq": 14225000, "source": "AetherSDR" }
2. TCI (Transceiver Control Interface) — bidirectional
The RF2K-S was the first power amplifier to implement TCI (open protocol by Expert Electronics). TCI is a WebSocket-based protocol that conveys frequency, mode, PTT, and optionally telemetry.
- Protocol: WebSocket (ws://), TCI v1.x
- Amplifier acts as TCI client — it connects to the TCI server exposed by the radio controller
- Relevant to AetherSDR: AetherSDR currently consumes SmartSDR natively; a lightweight TCI server shim listening on a local port could bridge the two ecosystems
- Reference: TCI Protocol Specification (open-source, MIT)
3. REST/JSON HTTP API (recommended for Phase 2 — telemetry + control)
The amplifier exposes a documented HTTP API (JSON) accessible on port 80 of the RPi. This API supports:
GET endpoints (polling or SSE):
GET /api/status — full amplifier state snapshot
GET /api/meters — real-time RF meters
GET /api/band — current band and filter selection
POST endpoints (control):
POST /api/operate — toggle Standby ↔ Operate
POST /api/tune — activate ATU tune cycle
POST /api/antenna — select antenna port (ANT1/ANT2)
POST /api/band — force band selection
Telemetry fields available from /api/meters:
{
"fwd_power_w": 1850,
"ref_power_w": 12,
"swr": 1.08,
"supply_v": 50.2,
"drain_current_a": 38.4,
"temp_pa_c": 42,
"temp_lpf_c": 38,
"fault_code": 0
}
Full API reference: https://rf-power.eu/wp-content/uploads/2024/12/RFKIT_api_doc_0_9_0.html
4. CAT / Serial (USB)
Classic serial CAT interface, lower priority for software integration. Suitable as fallback if network is unavailable.
Proposed Implementation
Phase 1 — Automatic Band Switching via UDP
Scope: New class Rf2kController (or PaController if designed generically).
Behavior:
- User configures RF2K IP address and UDP port in Settings → Radio → PA
- When
SliceModel::txFrequency changes on the active TX slice, Rf2kController emits a UDP frequency packet
- The amplifier handles all band/filter selection internally — no round-trip needed
Files to modify/create:
src/core/rf2kcontroller.{h,cpp} — new class
src/settings/radiosetupdialog.{h,cpp,.ui} — add PA tab (IP, UDP port, enable toggle)
src/core/slicemodel.cpp — connect txFrequencyChanged signal to Rf2kController
Complexity: Low — ~200 LOC, no new dependencies (QUdpSocket already used in project)
Phase 2 — RF2K Applet with Telemetry and Control
Scope: New dockable applet Rf2kApplet, modeled after the existing TgxlApplet.
UI elements:
- Forward power bar (0–2000 W) with numeric readout
- Reflected power + SWR display
- PA temperature (°C) with color warning (green/yellow/red)
- Drain current readout
- Operate / Standby toggle button (maps to
POST /api/operate)
- TUNE button (maps to
POST /api/tune)
- Antenna selector: ANT1 / ANT2 (maps to
POST /api/antenna)
- Fault indicator with fault code
Polling: HTTP GET /api/meters every 500 ms via QNetworkAccessManager (already a project dependency).
Files to create:
src/widgets/rf2kapplet.{h,cpp} — applet widget
src/models/rf2kmodel.{h,cpp} — data model + HTTP polling
- Integrate into main window dock system alongside TGXL applet
Complexity: Medium — ~600–800 LOC, no new dependencies
Phase 3 (Optional) — TCI Bridge for SO2R
For multi-operator or SO2R scenarios, a local TCI server that the RF2K-S connects to could provide richer integration (PTT interlock, automatic TX-follows-active-slice). This is lower priority but architecturally feasible given AetherSDR's existing multi-slice PTT logic.
Why This Matters
- No dedicated remote client exists — the only current option is VNC to the amplifier's internal RPi. A native AetherSDR applet would be the first proper headless client.
- Natural pairing — RF2K-S is commonly used with FlexRadio 6000/8000 series; AetherSDR users overlap heavily with RF2K-S owners.
- Follows existing patterns — the TGXL applet proves the architecture works. RF2K integration would follow the same model.
- Enables full remote station — combined with SmartLink, AetherSDR + RF2K applet = complete remote HF station control with no VNC dependency.
- SO2R use case — automatic band switching per active TX slice is critical for contest operating with a shared amplifier.
References
Requesting Feedback On
- Is a generic
PaController abstraction preferred over an RF2K-specific class (to allow future PA integrations)?
- Should Phase 1 (UDP) and Phase 2 (applet) be separate PRs or a single feature branch?
- Preference for polling interval on
/api/meters — 500 ms seems reasonable but open to guidance.
- Should the PA tab live in the existing Radio Setup dialog, or as a separate PA Setup dialog?
This feature request was prepared with reference to the RF-Power API documentation and AetherSDR's existing architecture (TGXL applet pattern, SliceModel signals, QNetworkAccessManager usage). Ready to contribute implementation if the approach is approved.
Request preparation
What would you like?
Feature Request: RF2K+ / RF2K-S Power Amplifier Integration
Summary
Add native support for the RF-Power RF2K+ and RF2K-S solid-state HF power amplifiers (~2 kW LDMOS). These amplifiers are widely used alongside FlexRadio transceivers in the DX and contesting community, and already ship with multiple network-accessible control interfaces that map cleanly onto AetherSDR's existing architecture.
The goal is to replicate — and extend — the kind of integration that the 4o3a Tuner Genius XL (TGXL) applet already provides, offering automatic band switching, telemetry display, and remote control directly from AetherSDR.
About the RF2K-S / RF2K+
The amplifier is currently controlled remotely only via VNC to the internal RPi screen — there is no dedicated desktop or web client. This is a known gap in the ecosystem.
Available Control Interfaces
The RF2K-S firmware exposes four independent control interfaces, all accessible over the network:
1. UDP Frequency Broadcast (simplest — recommended for Phase 1)
The amplifier listens for UDP broadcast packets containing the TX frequency. Any software on the LAN can send these packets; the amplifier parses the frequency, selects the correct bandpass filter, and loads the appropriate ATU preset — no acknowledgment or authentication required.
SliceModel::txFrequencyis already tracked; aPaControllerUDP sender can attach here with minimal coupling.Example packet:
{ "freq": 14225000, "source": "AetherSDR" }2. TCI (Transceiver Control Interface) — bidirectional
The RF2K-S was the first power amplifier to implement TCI (open protocol by Expert Electronics). TCI is a WebSocket-based protocol that conveys frequency, mode, PTT, and optionally telemetry.
3. REST/JSON HTTP API (recommended for Phase 2 — telemetry + control)
The amplifier exposes a documented HTTP API (JSON) accessible on port 80 of the RPi. This API supports:
GET endpoints (polling or SSE):
GET /api/status— full amplifier state snapshotGET /api/meters— real-time RF metersGET /api/band— current band and filter selectionPOST endpoints (control):
POST /api/operate— toggle Standby ↔ OperatePOST /api/tune— activate ATU tune cyclePOST /api/antenna— select antenna port (ANT1/ANT2)POST /api/band— force band selectionTelemetry fields available from
/api/meters:{ "fwd_power_w": 1850, "ref_power_w": 12, "swr": 1.08, "supply_v": 50.2, "drain_current_a": 38.4, "temp_pa_c": 42, "temp_lpf_c": 38, "fault_code": 0 }Full API reference: https://rf-power.eu/wp-content/uploads/2024/12/RFKIT_api_doc_0_9_0.html
4. CAT / Serial (USB)
Classic serial CAT interface, lower priority for software integration. Suitable as fallback if network is unavailable.
Proposed Implementation
Phase 1 — Automatic Band Switching via UDP
Scope: New class
Rf2kController(orPaControllerif designed generically).Behavior:
SliceModel::txFrequencychanges on the active TX slice,Rf2kControlleremits a UDP frequency packetFiles to modify/create:
src/core/rf2kcontroller.{h,cpp}— new classsrc/settings/radiosetupdialog.{h,cpp,.ui}— add PA tab (IP, UDP port, enable toggle)src/core/slicemodel.cpp— connecttxFrequencyChangedsignal toRf2kControllerComplexity: Low — ~200 LOC, no new dependencies (QUdpSocket already used in project)
Phase 2 — RF2K Applet with Telemetry and Control
Scope: New dockable applet
Rf2kApplet, modeled after the existingTgxlApplet.UI elements:
POST /api/operate)POST /api/tune)POST /api/antenna)Polling: HTTP GET
/api/metersevery 500 ms viaQNetworkAccessManager(already a project dependency).Files to create:
src/widgets/rf2kapplet.{h,cpp}— applet widgetsrc/models/rf2kmodel.{h,cpp}— data model + HTTP pollingComplexity: Medium — ~600–800 LOC, no new dependencies
Phase 3 (Optional) — TCI Bridge for SO2R
For multi-operator or SO2R scenarios, a local TCI server that the RF2K-S connects to could provide richer integration (PTT interlock, automatic TX-follows-active-slice). This is lower priority but architecturally feasible given AetherSDR's existing multi-slice PTT logic.
Why This Matters
References
Requesting Feedback On
PaControllerabstraction preferred over an RF2K-specific class (to allow future PA integrations)?/api/meters— 500 ms seems reasonable but open to guidance.This feature request was prepared with reference to the RF-Power API documentation and AetherSDR's existing architecture (TGXL applet pattern, SliceModel signals, QNetworkAccessManager usage). Ready to contribute implementation if the approach is approved.