v1.6 Β· Production Ready

One USB Cable
Any Device

Software SCU-LAN10 replacement for the Yaesu FT-710 HF/50MHz transceiver. Real-time FFT spectrum plot + waterfall via FT4222 SPI, bidirectional Opus 48kHz audio, full CAT control over 4 WebSocket channels β€” no $200 dongle required.

FT-710 Web Control Screenshot

FT-710 Web Control β€” FFT spectrum plot + waterfall on iPhone

Complete FT-710 Remote Control

From real FT4222 SPI spectrum waterfall to bidirectional Opus audio, CAT control, and mobile-optimized PTT β€” every feature built specifically for the FT-710.

Real FT4222 SPI Spectrum

850-point FFT spectrum at ~21 fps from the FT-710 DSP chip via FT4222 SPI. 120-line history waterfall with black→blue→green→yellow→red colormap. Dual-mode: S-meter synthetic fallback when FT4222 is unavailable.

  • FT4222 SPI direct read (libft4222 + libftd2xx)
  • 4096-byte scope blocks with 0xFF01EE01 sync
  • ~21 fps real spectrum, ~30 fps S-meter fallback

FFT Spectrum Line Plot

Real-time spectrum amplitude vs frequency polyline above the waterfall. Cyan (#06b6d4) line with EMA smoothing (Ξ±=0.30), 2Γ— amplitude boost for peak visibility, and horizontal + vertical grid lines aligned with frequency scale.

  • 33px polyline with subtle glow + grid reference
  • EMA-smoothed (30% new data per frame) β€” stable peaks
  • Shared Floor/Ceil controls with waterfall

Bidirectional Opus Audio

RX: FT-710 USB Audio β†’ PyAudio capture (44.1kHz Int16) β†’ frame-aligned resample to 48kHz β†’ Opus 64kbps encode β†’ browser AudioWorklet. TX: browser mic (48kHz) β†’ Opus 64kbps CBR β†’ server resample 48β†’44.1kHz β†’ PyAudio β†’ radio.

  • RX 48kHz high-fidelity via AudioWorklet
  • TX 64kbps CBR with 60ms jitter buffer
  • Graceful PTT release β€” word endings preserved
  • Zero-audio watchdog flags wedged radio USB audio in the status bar

Full CAT Control

Direct serial CAT over the Enhanced COM Port at 38400 baud. 40+ commands: frequency, 15 modes, 23 filter widths, VFO A/B, split, preamp, attenuator, NR/NB/AN, compressor, tuner, AF/RF/Mic gains, S-meter, multi-meter.

  • No Hamlib / wfview / middleware β€” direct serial
  • 7-task polling (~296 bytes/sec)
  • Dirty-field change tracking minimises WebSocket traffic

Mobile-First UI

Optimised for iPhone Safari: safe-area adaptation, PWA manifest with Service Worker offline caching, Wake Lock, Fullscreen toggle. Touch-and-hold PTT with dead-man release.

  • PWA manifest + Service Worker offline cache
  • Wake Lock API (screen stays on)
  • Canvas S-meter S1–S9+60dB + multi-meter (PWR/ALC/SWR/Id/Vd)

7-Task Background Polling

100ms→5s smart intervals at 38400 baud, 0.25s timeout ceiling, active PTT yield. Poll tiers: 100ms (freq/mode/S-meter), 500ms (TX meters zeroed on RX), 2s (filters/gains/NR/NB), 5s (voltage/current/compressor).

  • ~296 bytes/sec total serial utilisation
  • Auto-zero TX meters on RX transition
  • 0.25s timeout per command β€” never blocks PTT

Multi-Layer PTT Safety

Touch-and-hold TX β†’ instant release on touch-end. Fire-and-forget TX0 with 500ms TX-status poll + browser watchdog. Server-side forced RX when the last client β€” or the TX-audio owner β€” disconnects. Browser unload beacon sends TX0 on tab close.

  • 7 independent release layers β€” no single point of failure
  • Server force-RX on last-client or TX-owner disconnect
  • Graceful TX audio drain before RF drop

Native iPhone Client

SwiftUI companion app (iOS 17+) β€” same 4-channel WebSocket protocol as the browser, tuned for one-handed mobile operation.

Full Radio Control

Frequency (direct entry / step / band jump), VFO A/B, mode, filter width, Preamp/ATT, AGC, NB/NR/ANotch, RF power, mic gain, squelch β€” all from the iPhone.

  • 4 encrypted WebSocket channels (wss)
  • Token auth, password in Keychain

Waterfall + Meters

850-bin real-time waterfall with FFT curve, colormap matched to the web UI. S-meter plus TX meters (PWR / SWR / ALC / COMP) and memory channel list.

  • Same binary spectrum frames as the browser
  • Dark amber theme, portrait + landscape

Opus Voice RX/TX

RX: Opus 48kHz decode and playback through the device speaker. TX: mic capture at 48kHz in 20 ms PCM frames β€” hold PTT to talk.

  • libopus device build (arm64)
  • Settings: reconnect, gain, volume

Early access β€” build from source

Requires a physical iPhone (simulator unsupported β€” bundled libopus is arm64-device-only), iOS 17+, Xcode 15 + XcodeGen, and a TLS-enabled server. The 2026-07-20 audit lists known P0 PTT-safety issues β€” fixes are designed and in progress. Read the audit before transmitting.

FT710Mobile on GitHub

One Process, Three USB Channels

4 WebSocket connections, zero external middleware, built entirely on Python async frameworks.

Browser Phone / Tablet / Desktop AudioWorklet Β· Canvas WASM Opus Β· PWA MRRC FT-710 Server FastAPI + Uvicorn Single Python process macOS / Linux / Raspberry Pi Yaesu FT-710 HF/50MHz SDR 38400 baud CAT FT4222 SPI HTTPS / WSS 4 WebSocket links USB /WSradio JSON Β· fullState + partial /WSaudioRX 1B tag + Opus / PCM /WSaudioTX Mic uplink Β· Opus 64kbps CBR /WSspectrum 850 uint8 Β· ~21 fps
Serial CAT
CP210x UART Β· 38400 bps
Yaesu ASCII CMD;
Frequency, mode, VFO, filters, gains, PTT, meters
FT4222 SPI Scope
scope_pipe subprocess
ctypes β†’ libft4222 + libftd2xx
4096-byte blocks, 850-point FFT waterfall
USB Audio
C-Media USB Audio Class
PyAudio capture / playback
RX 48kHz Int16 Β· TX 44.1kHz mono
WebSocket API
4 endpoints Β· Token auth
JSON control + Binary audio/spectrum
REST: /api/status, /api/auth, /api/mem_channels

FFT Plot + Dual-Mode Waterfall

FT4222 SPI real spectrum from the FT-710 DSP chip β€” FFT amplitude line chart above 120-line waterfall, with automatic S-meter synthetic fallback.

850-pt
FFT Spectrum
Per frame from FT4222 SPI
~21 fps
Real Spectrum Rate
FT4222 CLK_DIV_16
~30 fps
S-meter Fallback
Synthetic multi-peak
120
Waterfall Lines
History depth
4096 B
SPI Block Size
0xFF01EE01 sync marker
v2
Spectrum Protocol
1701B frame (1B ver + 2Γ—850B)

Opus 48kHz Audio Pipeline

Tagged dual-codec transport (Opus 64kbps CBR + Int16 PCM fallback). 12Γ— bandwidth reduction vs raw PCM.

48kHz
RX Sample Rate
Int16 β†’ Opus 64kbps CBR
44.1kHz
TX Playback Rate
160:147 resample from 48kHz
220ms
RX Jitter Buffer
90ms recovery threshold
60ms
TX Pre-buffer
400ms hard cap
64kbps
Opus Bitrate
12Γ— smaller than 768kbps PCM
160:147
Resample Ratio
Linear interp, phase-continuous

Audio Stack

PyAudio PortAudio libopus ctypes AudioWorklet WASM Opus Decoder ScriptProcessor Web Audio API getUserMedia

Windows Desktop Installer

Windows 11/12 x64 β€” embedded Python 3.12 runtime, no manual Python install. Start Menu launcher with per-user config in %LOCALAPPDATA%.

1 Β· Install Drivers

Silicon Labs CP210x VCP driver for the FT-710 Enhanced COM Port. FTDI D2XX only if you want FT4222 true spectrum.

Device Manager β†’ Ports (COM & LPT) β†’ Enhanced COM Port

2 Β· Run the Installer

MRRC-FT710-Setup.exe β€” v1.6.0, 28.3 MB, x64. Start Menu + optional desktop shortcut.

MD5 2be2a654242f284f73104aea2e010c41

3 Β· Edit Configuration

Start Menu β†’ Edit Configuration β€” set the Enhanced COM Port and a strong web password.

%LOCALAPPDATA%\MRRC-FT710\ft710.env

4 Β· Launch

Start Menu β†’ MRRC FT-710 β€” the launcher starts the server and opens the browser automatically.

http://127.0.0.1:8888 β†’ login β†’ full control
Download for Windows GitHub Releases

Without the FTDI DLLs the app falls back to the S-meter synthetic spectrum β€” CAT control and audio are unaffected. macOS / Linux / Raspberry Pi: run from source (steps below).

Up and Running in 5 Minutes

Clone, install dependencies, start the server, open your browser β€” just four steps.

Clone the Repository

Get the latest code from GitHub

git clone https://github.com/cheenle/mrrc_ft710.git

Install Dependencies

Python 3.12+ with FastAPI, Uvicorn, PySerial, PyAudio, NumPy

cd mrrc_ft710 && pip install -r requirements.txt

Start the Server

Set the serial port and launch β€” auto-detects FT-710 USB devices

FT710_SERIAL_PORT=/dev/cu.usbserial-XXXX python server.py

Open Your Browser

Any device on your network β€” phone, tablet, desktop. Default password: ft710

https://server-ip:8888 β†’ login β†’ full control
View on GitHub

What You Need

Yaesu FT-710 USB Cable (A→B or C→B) Python 3.12+ macOS / Linux / RPi Modern Browser FTDI libs (for scope)

For real FT4222 SPI spectrum data, install libft4222 + libftd2xx from the wfview app bundle or FTDI website. CAT control and audio work without any FTDI libraries.