SunMRRC SDD - Software Design Description
SunSDR2 DX Mobile Remote Radio Control IBM Team Solution Design (TeamSD) v2.3.2 aligned documentation set
Purpose
This SDD is the canonical design record for the sunmrrc codebase. It captures the current requirements, architecture, design decisions, component boundaries, operational model, capability inventory, known gaps, and evolution history for the mobile-first SunSDR2 DX remote control implementation.
Runtime facts are derived from the current repository, primarily server.py, static/index.html, static/controls.js, static/mobile.js, static/modules/*, static/tx_button.js, restart.sh, and the imported shared SunSDR implementation under ../web_control/.
Document Index
📥 Presentation: SunMRRC-Architecture-SDD-V3.4.pptx — 13-slide architecture overview PPTX (dark minimal, 12 ADs, gain staging, telemetry, SVG diagrams)
| # | Chapter | ART Code | File |
|---|---|---|---|
| 1 | Executive Summary | - | 01-executive-summary.md |
| 2 | Business Direction | BUS 411 | 02-business-direction.md |
| 3 | Project Definition | ENG 343 | 03-project-definition.md |
| 4 | System Context | APP 011 | 04-system-context.md |
| 5 | Non-Functional Requirements | ART 0507 | 05-non-functional-requirements.md |
| 6 | Use Case Model | ART 0508 | 06-use-case-model.md |
| 7 | Subject Area Model | APP 408 | 07-subject-area-model.md |
| 8 | Architecture Decisions | ART 0513 | 08-architecture-decisions.md |
| 9 | Architecture Overview | ART 0512 | 09-architecture-overview.md |
| 10 | Service Model | ART 0582 | 10-service-model.md |
| 11 | Component Model | ART 0515 | 11-component-model.md |
| 12 | Operational Model | ART 0522 | 12-operational-model.md |
| 13 | Feasibility Assessment | ART 0530 | 13-feasibility-assessment.md |
| 14 | Version History | - | 14-version-history.md |
| 15 | PTT Safety Architecture | ART 0535 | 15-ptt-safety-architecture.md |
Quick Facts
| Attribute | Value |
|---|---|
| Document ID | SDD-SUNMRRC-2026-001 |
| SDD Version | V3.5 (SunMRRC V1.0) |
| Baseline Date | 2026-06-26 |
| Status | Production release |
| Project | SunMRRC |
| Primary Radio | SunSDR2 DX |
| Runtime | Python 3.12+, FastAPI, Uvicorn, NumPy |
| Frontend | HTML5, CSS3, vanilla JavaScript, Web Audio API |
| Transport | HTTPS/WSS for browser, UDP for SunSDR2 DX |
| Default Production Entry | https://radio.vlsc.net:8889 |
System at a Glance
See
diagrams/system-architecture.svgfor a detailed visual.
Browser mobile UI (iOS Safari / Chrome)
| HTTPS static assets · WSS: /WSCTRX /WSaudioRX /WSaudioTX /WSspectrum
v
FastAPI/Uvicorn sunmrrc server (server.py + ../web_control/)
| SunSDR2DXClient · StreamProcessor · TXModulator · Opus Codec · Auth
| UDP control :50001 · UDP IQ stream :50002
v
SunSDR2 DX Hardware (192.168.16.200)
| DRIVE (0x0017) per-band power · 0x1F00 telemetry (W/V/°C)
Architecture Diagrams
SVG diagrams are in diagrams/:
| Diagram | File | Description |
|---|---|---|
| System Architecture | diagrams/system-architecture.svg |
Full system: browser → server → DSP → SunSDR2 DX. All WebSocket endpoints, components, protocols. |
| TX Gain Staging | diagrams/tx-gain-staging.svg |
End-to-end TX audio chain with gain values at each stage, client EQ pipeline, server Hilbert/drive/tanh, healthy vs distorted comparison. AD-012. |
| Telemetry Flow | diagrams/telemetry-flow.svg |
0x1F00 packet layout with verified field offsets (off30=W, off16=V, off18=°C). Documents what was corrected on 2026-06-25. |
Capability Summary
| Area | Status | Notes |
|---|---|---|
| Mobile UI | Implemented | static/index.html, mobile.css, mobile.js |
| RX audio | Implemented | IQ demodulation to tagged dual-codec (Opus/PCM) over /WSaudioRX |
| Spectrum waterfall | Implemented | Quantized 512-bin frames over /WSspectrum |
| Radio control | Implemented | Frequency, DSP mode, PTT, tune, gain, filter, AGC/preamp controls |
| WDSP controls | Implemented when libwdsp is available | NR2, NB, ANF, NF, AGC, notches |
| HTTPS/WSS | Implemented | Auto-detects certs/fullchain.pem and certs/radio.vlsc.net.key; DISABLE_SSL=1 for HTTP |
| TX voice modulation | Implemented | /WSaudioTX mic PCM → Hilbert SSB → 24-bit IQ → 0xFFFD TX stream. Gain-staged: client preamp ×1.5, server TX_DRIVE_GAIN ×3.0, TX_IQ_PEAK=1.0, tanh soft limiter. On-air verified. |
| TX power / drive | Implemented | Device DRIVE command (0x0017), runtime per-band power via /api/band_power + Band Power menu panel (persisted to band_power.json) |
| TX audio EQ | Implemented | Client-side Web Audio EQ presets (DEFAULT/MEDIUM/STRONG/RAGCHEW), compressor 3:1, anti-alias lowpass. Gain-staged per AD-012. |
| TX telemetry (0x1F00) | Implemented | off30 f32 = forward watts, off16 u16/10 = supply volts, off18 f32 = PA temp °C. Device has NO reverse-power → no SWR (use ATR-1000). |
| Memory channel API | Implemented | /api/mem_channels GET/POST with JSON persistence (mem_channels.json) |
| Recordings | Implemented | recordings.html + server-side RX MP3 capture/download (/api/recordings) |
| Session authentication | Implemented | Shared-password login (/login → /api/auth/login); _auth_tokens + sunmrrc_auth cookie (30-day); all routes and WS endpoints gated; WS uses ?token= query param |
| ATR-1000 | Frontend legacy/planned | UI references exist; backend /WSATR1000 is not implemented in this codebase |
| CW/FT8 menu links | Removed | Dead links cleaned from the menu; pages not present in this repository snapshot. Recordings page is present (recordings.html) |