12. Operational Model (ART 0522)
12.1 Runtime Topology
Client Browser
→ http://host:8888 (or https:// with reverse proxy)
→ WS endpoints on same host/port
MRRC FT-710 Host
→ python3 server.py
→ Uvicorn on 0.0.0.0:8888 (configurable via FT710_WEB_HOST / FT710_WEB_PORT)
→ Serial CAT: USB Enhanced COM Port (configurable via FT710_SERIAL_PORT)
→ FT4222 SPI: internal FTDI chip (via scope_pipe subprocess)
→ USB Audio: FT-710 USB audio device (auto-detected by PyAudio)
→ PID file: .ft710-server.pid
→ Logs: stdout/stderr (redirected to logs/ by start.sh)
Yaesu FT-710
→ USB connection to host
→ Enhanced COM Port (38400 baud, 8N1)
→ Standard COM Port (115200 baud, for SCU-LAN10 scope models — optional)
→ FT4222 SPI chip (internal)
→ USB Audio interface
12.2 Configuration
| Name |
Default |
Purpose |
FT710_SERIAL_PORT |
/dev/cu.SLAB_USBtoUART |
CAT serial port (Enhanced COM Port) |
FT710_BAUD_RATE |
38400 |
CAT serial baud rate |
FT710_WEB_PORT |
8888 |
Uvicorn listen port |
FT710_WEB_PASSWORD |
changeme_please_use_strong_password! |
Web login password |
FT710_WEB_HOST |
:: |
Bind address |
FT710_FTDI_LIB_DIR |
(auto) |
Directory containing FTDI libraries |
FT710_FT4222_CLK_DIV |
6 |
SPI clock divider (1=fastest, 9=slowest; CLK_DIV_64 default) |
FT710_SCOPE_PORT |
(optional) |
Scope serial port (Standard COM Port, SCU-LAN10) |
FT710_SCOPE_BAUD |
115200 |
Scope serial baud rate |
FT710_MEM_FILE |
mem_channels.json |
Memory channel store (Windows launcher uses %LOCALAPPDATA%) |
.ft710-server.pid |
runtime |
Process ID for start/stop scripts |
12.3 Startup Modes
| Mode |
Command |
Behavior |
| Foreground |
python server.py |
Direct console output; Ctrl-C to stop |
| Background |
./start.sh |
Starts in background, logs to logs/, writes PID file |
| Stop |
./stop.sh |
Reads PID file, sends SIGTERM, cleans up PID |
| Custom port |
FT710_WEB_PORT=8889 python server.py |
Override listen port |
| Custom serial |
FT710_SERIAL_PORT=/dev/ttyUSB0 python server.py |
Override serial port |
| Custom password |
FT710_WEB_PASSWORD=mysecret python server.py |
Override login password |
12.4 Connection Matrix
| Source |
Target |
Protocol |
Port/Path |
Description |
| Browser |
Server |
HTTP |
$FT710_WEB_PORT |
Static UI |
| Browser |
Server |
WS |
/WSradio |
Control (JSON) |
| Browser |
Server |
WS |
/WSaudioRX |
RX audio (binary tagged) |
| Browser |
Server |
WS |
/WSaudioTX |
TX mic uplink (binary tagged + text) |
| Browser |
Server |
WS |
/WSspectrum |
Spectrum waterfall (binary) |
| Browser |
Server |
HTTP |
/api/status |
Full radio state |
| Browser |
Server |
HTTP |
/api/mem_channels |
Memory channels |
| Browser |
Server |
HTTP |
/api/auth/login |
Login |
| Browser |
Server |
HTTP |
/api/auth/logout |
Logout |
| Server |
FT-710 |
Serial |
USB Enhanced COM |
CAT commands |
| Server |
FT-710 |
SPI |
Internal FT4222 |
Scope data |
| FT-710 |
Server |
USB Audio |
USB Audio IN |
RX audio |
| Server |
FT-710 |
USB Audio |
USB Audio OUT |
TX audio |
12.5 Operational Procedures
| Procedure |
Steps |
| Start service |
./start.sh; check logs/ for startup messages |
| Stop service |
./stop.sh |
| Verify CAT connection |
Server log: “Connected to FT-710 (ID=…)” |
| Verify scope |
Server log: “scope_pipe: first frame received — spectrum active” |
| Verify RX audio |
Open browser; listen for radio audio; check “RX …K” bitrate indicator |
| Verify TX audio |
Key PTT; speak; confirm on monitoring receiver |
| Verify PTT safety |
Release PTT; confirm radio returns to RX; check log for “TX0” |
| Change password |
FT710_WEB_PASSWORD=newpass python server.py |
| Change serial port |
FT710_SERIAL_PORT=/dev/ttyUSB0 ./start.sh |
| View server status |
curl http://localhost:8888/api/status (with auth cookie) |
12.6 Logs and Artifacts
| Artifact |
Purpose |
logs/ directory |
Server stdout/stderr when background-started |
.ft710-server.pid |
Running process PID |
mem_channels.json |
Persisted memory channels |
config.py |
All mode/band/filter/S-meter calibration tables |
lib/ |
FTDI libraries (libft4222.dylib, libftd2xx.dylib, ftd2xx.cfg) |
12.7 Operational Risks
| Risk |
Mitigation |
| Wrong serial port |
Server logs warning; check ls /dev/cu.* or ls /dev/ttyUSB* |
| FT4222 not working |
Falls back to S-meter synthetic spectrum; check D2XX config |
| Audio not working |
Check PyAudio device list in logs; verify FT-710 USB audio appears |
| Port already in use |
./stop.sh first; check for stale processes |
| Stale JS cached |
Service worker bypasses JS/HTML; version query strings |
| Stuck TX |
Multiple safety layers (see Ch. 15); server forces RX on WS disconnect |