v1.13.0 · Stable

One USB Cable
Any Device

Software SCU-LAN10 replacement for the Yaesu FT-710 and Icom IC-7300/IC-7300MK2 HF/50MHz transceivers. Real-time FFT spectrum plot + waterfall (FT4222 SPI or CI-V), bidirectional Opus 48kHz audio, full CAT control over 4+1 WebSocket channels — no $200 dongle required.

FT-710 Web Control Screenshot

FT-710 Web Control — FFT spectrum plot + waterfall on iPhone

Watch the Intro

A two-minute product tour of FT-710 Web Control (Chinese narration and subtitles).

Complete Multi-Radio Remote Control

Real spectrum (FT4222 SPI or CI-V), bidirectional Opus audio, full CAT/CI-V control and multi-layer PTT safety — pluggable backends for FT-710, IC-7300 and IC-7300MK2, no middleware anywhere.

Real Spectrum — FT4222 SPI & CI-V

FT-710: 850-point FFT spectrum at ~21 fps read straight from the DSP chip over FT4222 SPI. IC-7300/MK2: CI-V 0x27 475-bin scope upsampled to 850 points. TX-aware pause keeps the scope clean while transmitting; automatic S-meter fallback when no hardware path is available.

  • FT4222 SPI direct read (libft4222 + libftd2xx)
  • CI-V 0x27 scope via the same USB serial link
  • TX-aware pause — no more post-PTT spectrum churn

FFT Plot + Waterfall

EMA-smoothed spectrum polyline above a 120-row history waterfall. Shared Floor/Ceil controls, six colormaps, and click-to-QSY anywhere on the spectrum.

  • ~30 fps S-meter fallback keeps the waterfall alive
  • Click-to-QSY with drag-guard for scroll gestures
  • Clear "TX — spectrum paused" indicator while transmitting

Bidirectional Opus Audio

One 48 kHz codec domain end to end: RX capture → Opus 64kbps → browser AudioWorklet; browser mic → Opus CBR → server → radio. The FT-710 backend bridges to its fixed 44.1 kHz USB-audio device boundary (960→882 per 20 ms); the IC-7300 backend uses native 48 kHz USB audio with no resample.

  • 64kbps Opus — 12× smaller than raw PCM
  • Zero-audio watchdog flags wedged USB audio
  • Graceful PTT release — word endings preserved

Full CAT / CI-V Control

FT-710: direct serial CAT over the Enhanced COM Port at 38400 baud (frequency, modes, filters, VFO A/B, split, preamp, ATT, NR/NB/AN, compressor, tuner, gains). IC-7300/MK2: USB CI-V at 115200 8N1 (addr 0x94), with Icom mode/band/filter tables and capability-driven UI adaptation.

  • No Hamlib / wfview / middleware — direct serial
  • Dirty-field tracking minimises WebSocket traffic
  • Read-back verification on filter width sets

Adaptive Polling

100ms→5s smart intervals, 0.25s per-query timeout ceiling, and priority preemption so PTT never waits for a poll cycle. Stale in-flight reads are discarded after user commands.

  • ~296 bytes/sec total serial utilisation
  • Auto-zero TX meters on RX transition
  • Scope re-init after every serial reconnect

Meters & Memory Channels

Canvas S-meter (S1–S9+60dB) with dBm readout plus full TX telemetry: PWR / ALC / SWR / Id / Vd / COMP. Memory channels with one-tap recall; every UI preference persists in cookies.

  • Seeded starter channels, per-user storage
  • AF volume, scope options, mic gain — all remembered

ATR1000 Tuner Linkage

Optional networked ATR1000 antenna tuner: learned LC relay values follow every frequency change, and a server-side tune assist runs the full carrier-measure-keep-or-rollback sequence for you.

  • Off by default — zero impact without the hardware
  • Learning gated on SWR 1.0–1.8, ±5kHz nearest match

Multi-Layer PTT Safety

Touch-and-hold TX with 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.

  • 7 independent release layers — no single point of failure
  • TX uplink ownership follows the keying client
  • Graceful TX audio drain before RF drop

Mobile-First UI

Optimised for iPhone Safari: safe-area adaptation, PWA manifest with Service Worker offline caching, Wake Lock, fullscreen toggle, and native iOS / Android companion apps.

  • PWA manifest + Service Worker offline cache
  • Wake Lock API (screen stays on)
  • Native iOS 17+ and Android apps share the same protocol

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%.

MRRC-Modern-Setup.exe — v1.13.0 Stable

45.4 MB · x64 · 45,433,215 bytes
SHA-256: 15ab8f9b6ddbabda0308cff041f1f5e48547d91c000724198a0b903549a808b0

v1.13.0 is zero-config on first run: it auto-generates a web password, auto-detects the radio (FT-710 ASCII CAT / Icom CI-V 0x19) and its serial port (COM), and the login page shows the auto-generated password. The web 连接设置 (Connection Settings) dialog changes the radio model, serial port, RX+TX audio devices, and password with save-and-restart — the server auto-restarts, and the launcher restarts on config change. CAT, audio, PTT, and scope behavior is unchanged from the previous release. Physical USB, RF, power-cycle, and audio-quality acceptance still requires a connected radio.

Download for Windows Versioned v1.13.0 GitHub Releases

MRRC-Modern-v1.13.0-arm64.dmg — v1.13.0 Stable

55.9 MB · arm64 · Apple Silicon (M1/M2/M3/M4) · macOS 11+ · 55,883,753 bytes
SHA-256: a13935457fdc570d65e9336e89e930c2f1cfac3b8a242cba11161a5632fd404d

First run needs zero configuration: MRRC Modern auto-generates a web password, auto-detects the radio (FT-710 ASCII CAT / Icom CI-V 0x19) and its serial port, and bundles the FT4222 true-spectrum dylibs — the FT-710 FFT waterfall works out of the box. A web 连接设置 (Connection Settings) dialog lets you change the radio model, serial port, RX+TX audio devices, and password with save-and-restart. HTTPS is on by default with an auto-generated self-signed certificate, and the server binds :: dual-stack (IPv4+IPv6), so LAN devices reach https://<mac-ip>:8888 (browser warns once about the self-signed cert — accept it). The DMG is ad-hoc signed — on first launch, right-click → Open once.

macOS install & setup walkthrough →

Download for macOS GitHub Releases

Without the FTDI DLLs the FT-710 backend falls back to the S-meter synthetic spectrum — CAT control and audio are unaffected (the IC-7300 backend needs no FTDI at all). macOS users: use the installer above, or run from source. Linux / Raspberry Pi: run from source (see Quick Start below).

Up and Running in 5 Minutes

Windows and macOS users take the installer track; Linux / Raspberry Pi run from source. All end at the same browser UI.

Track A — Windows Installer

1 · Install Drivers

FT-710: Silicon Labs CP210x VCP driver for the Enhanced COM Port; FTDI D2XX only if you want FT4222 true spectrum. IC-7300: none — single USB cable with built-in serial driver.

Device Manager → Ports (COM & LPT) → Enhanced COM Port

2 · Run the Installer

MRRC-Modern-Setup.exe — v1.13.0, 45.4 MB, x64. Start Menu + optional desktop shortcut.

SHA-256 15ab8f9b6ddbabda0308cff041f1f5e48547d91c000724198a0b903549a808b0

3 · Edit Configuration

First run auto-configures the radio and password. The web 连接设置 (Connection Settings) dialog sets the radio model, serial port, RX+TX audio devices, and password with save-and-restart.

%LOCALAPPDATA%\MRRC-Modern\mrrc_modern.env

IC-7300 vs FT-710 Windows setup walkthrough →

4 · Launch

Start Menu → MRRC Modern — the launcher starts the server and opens the browser automatically.

http://127.0.0.1:8888 → login → full control

Track B — macOS Installer

1 · Install

Drag MRRC-Modern-v1.13.0-arm64.dmg → double-click to mount → drag MRRC Modern into Applications. On first launch, right-click the app → Open → Open (one-time Gatekeeper bypass for the ad-hoc signature).

2 · Launch

The menu-bar icon MRRC Modern :8888 appears and the browser opens the login page (over HTTPS — the first time the browser shows an "untrusted" warning, click Advanced → Continue), which shows the auto-generated password.

3 · Plug in the Radio

Connect the FT-710 or IC-7300/MK2 via USB; the radio model and serial port auto-detect on first run.

4 · Fine-tune

Menu bar → 连接设置… (Connection Settings) to change the radio, serial port, RX+TX audio devices, or password, then 保存并重启 (Save & Restart). LAN devices reach https://<mac-ip>:8888.

Track C — From Source (Linux / RPi)

1 · Clone the Repository

Get the latest code from GitHub

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

2 · Install Dependencies

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

cd mrrc_modern && pip install -r requirements.txt

3 · Start the Server

Choose the radio model and serial port, then launch

MRRC_RADIO_MODEL=ft710 MRRC_SERIAL_PORT=/dev/cu.usbserial-XXXX python server.py

4 · Open Your Browser

Any device on your network — phone, tablet, desktop. Set a strong password before exposing the server.

https://server-ip:8888 → login → full control

What You Need

Yaesu FT-710 Icom IC-7300 / IC-7300MK2 USB Cable (A→B or C→B) Windows Installer (bundled Python) or Python 3.12+ from source Windows / macOS / Linux / RPi Modern Browser FTDI libs (FT-710 scope only)

For real FT4222 SPI spectrum data on the FT-710, install libft4222 + libftd2xx from the wfview app bundle or FTDI website; the IC-7300 backend reads spectrum over the same USB serial cable and needs no FTDI libraries. CAT/CI-V control and audio always work without them.

One Process, Pluggable Backends

4+1 WebSocket connections (optional ATR1000 tuner link), zero external middleware, built entirely on Python async frameworks. Pick the radio with MRRC_RADIO_MODEL.

Browser Phone / Tablet / Desktop AudioWorklet · Canvas WASM Opus · PWA MRRC Modern Server FastAPI + Uvicorn Single Python process Windows / macOS / Linux / RPi FT-710 / IC-7300 HF/50MHz SDR CAT / CI-V SPI / 0x27 HTTPS / WSS 4+1 WS links USB /WSradio JSON · fullState + partial /WSaudioRX 1B tag + Opus / PCM /WSaudioTX Mic uplink · Opus 64kbps CBR /WSspectrum 850 uint8 · ~21 fps
CAT / CI-V
FT-710 CAT · IC-7300 CI-V
Yaesu ASCII CMD; · Icom BCD CI-V
Frequency, mode, VFO, filters, gains, PTT, meters
Scope — SPI / CI-V
FT4222 SPI · CI-V 0x27
ctypes → libft4222 / CI-V scope
4096-byte blocks, 850-point FFT waterfall
USB Audio
USB Audio Class
PyAudio capture / playback
FT-710 44.1kHz · IC-7300 48kHz native
WebSocket API
4+1 endpoints · Token auth
JSON control + Binary audio/spectrum
REST: /api/status, /api/auth, /api/mem_channels

Spectrum, Audio, Serial — by the Numbers

850-pt
FFT Spectrum
Per frame from FT4222 SPI
~21 fps
Real Spectrum Rate
4096B blocks, 0xFF01EE01 sync
120
Waterfall Lines
History depth
48kHz
Codec Domain
Opus 64kbps CBR, 12× vs PCM
0.25s
Poll Timeout Ceiling
PTT never waits on a query
633
Hardware-Free Tests
v1.12.0 release, macOS + Windows

Technology Stack

FastAPI + Uvicorn asyncio PySerial PyAudio / PortAudio libopus ctypes FT4222 SPI AudioWorklet WASM Opus Web Audio API Service Worker PWA

Native iOS & Android Clients

SwiftUI (iOS 17+) and Kotlin/Compose (Android) companion apps — same 4+1-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

Android Client — FT710Android

Kotlin + Jetpack Compose (Material3, minSdk 26) app speaking the same protocol: full control, waterfall + meters, Opus RX/TX, memory channels, and DataStore settings.

  • PTT state machine designed-in from day one
  • JVM-tested protocol & PTT logic — device RF acceptance pending

Early access — build from source

iOS build requires a physical iPhone (simulator unsupported — bundled libopus is arm64-device-only), iOS 17+, Xcode 15 + XcodeGen, and a TLS-enabled server. The P0 PTT-safety issues from the 2026-07-20 audit are resolved — TX uplink ownership follows the keying client. Android: pure logic (protocol, PTT, spectrum, memory channels) is covered by JVM tests via ./gradlew test assembleDebug lintDebug; on-device RF acceptance is pending.

iOS App on GitHub Android App on GitHub

Join the MRRC-HAM WeChat Group

Scan the QR code with WeChat to join the MRRC-HAM group.

WeChat QR code for MRRC-HAM group

QR code valid until Aug 29, 2026. Will be updated when refreshed.

Software Design Description

IBM TeamSD methodology · 15 chapters · V2.27 · Architecture decisions, component model, PTT safety, and full version history.

Browse SDD All Chapters
AD-001–016 65 NFRs 8 Use Cases 7-Layer PTT Safety Feasibility Assessment