| SDD V1.6 |
2026-07-18 |
Kimi |
TX-chain documentation synchronization after end-to-end TX analysis, plus runtime fixes from the “SSB filter no effect” investigation. TX Opus params corrected: AD-004/Ch9.4/Ch11 said 28kbps CBR complexity=3; actual opus_codec.js config is 64kbps CBR complexity=5 (fidelity-priority voice). 44.1kHz device reality: AD-011 rewritten — the FT-710 USB audio interface is 44.1kHz native; audio_resample.py bridges the 48kHz codec domain ↔︎ 44.1kHz device domain (960↔︎882 frame-aligned). Ch9.3/9.4 chain diagrams, Ch4.4 flows, NFR-060, Ch10 TXAudioService, Ch11 component rows and AGENTS.md module table updated; stale docstrings/comments fixed in opus_rx.py (16kHz remnants), tx_opus_worker.js (SAB marked dormant, packet size), tx_capture_worklet.js (header). tx-gain-staging.svg documented as sunmrrc-lineage (its preamp/EQ/tanh gain staging does not exist in this codebase) — retained for reference only. RX zero-audio watchdog: AudioHandler.note_rx_chunk() tracks bit-exact-zero RX runs; ≥20s silent with squelch open → WARNING + new rx_audio_silent state field → status-bar “无声” indicator; “Audio loop” log now includes chunk peak. (Root cause of the filter report: the FT-710 USB audio was streaming digital zeros — wedged codec — so no filter change was ever audible; the watchdog makes this class of failure visible.) WS auth-failure redirect: the server rejects bad-token WS upgrades with HTTP 403 before accept, so browsers see 1006, never 4001 — /WSradio onclose now verifies via /api/auth/check and redirects to /login instead of retrying a stale token forever. TX-owner dead-carrier fix: /WSaudioTX owner disconnect during TX now forces TX0; (previously only stopped audio); Ch15 Layer 4 updated. |
| SDD V1.5 |
2026-07-18 |
Kimi |
Documentation synchronization after deep SDD review. PTT safety chapters aligned with runtime: the triple TX0 verify loop was removed in V1.2 but Ch1/Ch2/Ch3/Ch4/Ch6/Ch8/Ch13/Ch15/README still described it — all updated to the actual 7-layer model (fire-and-forget TX0; + 500ms TX-status poll + browser watchdog). Ch15 rewritten with layer renumbering and a removal note. Polling naming: “5-tier” corrected to 7-task polling in Ch1/Ch3/Ch4/Ch7 and AGENTS.md. TX audio: Ch4.4 TX flow corrected to 48kHz (was 16kHz, pre-AD-011); tx-gain-staging.svg Opus label likewise. Scope clarified (Ch3.3): FT710Mobile/ iOS app and website/ noted as in-repo but outside this SDD’s scope. Tuner AC discrepancy flagged: gap-analysis §1.1 now notes this codebase’s deliberate AC000/AC001/AC003 mapping contradicts the Hamlib AC010/AC011 claim — pending radio re-verification; cross-reference added in Ch10.4. Frame size fix: Ch1 spectrum v1 frame 850B→851B. New open issues (Ch13.4): I6 multi-client control arbitration, I7 mem_channels.json validation/backup. README Quick Facts bumped to V1.5. |
| SDD V1.4 |
2026-07-12 |
Claude |
FFT spectrum line plot: new 33px canvas above waterfall renders real-time amplitude-vs-frequency polyline from shared wf1 data. Cyan (#06b6d4) line with 1px width + subtle glow, EMA smoothing (Float32Array buffer, α=0.30, 2× boost), horizontal grid at 25/50/75% amplitude, vertical grid aligned with frequency scale ticks. Shared Floor/Ceil controls with waterfall. Waterfall refinements: VFO red line thinned 1.0→0.2px, frequency label removed (now scale-only). install.sh: added --dev flag for dev dependency installation, --no-audio and --no-scope flags. Documentation: Chinese introduction article with setup guide for non-technical users, project screenshot added to README and website, FFT feature cards on website index and SDD page, comprehensive FAQ. |
| SDD V1.3 |
2026-07-08 |
Codex |
Runtime/documentation synchronization for CAT control, polling, and website docs. Priority CAT preemption: introduced send_priority_set_command() with _cancel_polls cooperative abort so latency-sensitive TX/TUNE commands preempt queued poll reads/waits. TUNE sequence fix: tune=true now performs TX2 then AC003 (start tuning); tune=false sends AC000 then exits TX. FT-710 CAT corrections: tuner mapping corrected to AC000/AC001/AC003; compressor control kept at PR00/PR01 (Yaesu PDF errata noted). State model expansion: added meter_display (MS), amc_level (AO), rf_gain (RG0), and RI-derived telemetry (hi_swr, recording_status, rx_tx_status, tuner_tuning, scan_status, squelch_open). Polling updates: scheduler now runs 7 tasks (IF, VFO, TX status, TX meters, settings, slow telemetry, connection watchdog), with RM3 included in TX meter polling and poll-side awareness of _cancel_polls. Calibration update: power calibration dead-zone entry removed so low-power modulation reports non-zero values earlier. UI memory recall: selecting a memory channel now applies both frequency and stored mode. Website docs: added dedicated SDD HTML pages (website/sdd.html, website/zh/sdd.html) and linked from landing pages. |
| SDD V1.2 |
2026-07-08 |
Claude |
Major bug fixes and performance optimization. Freq drift fix: DN; is FT-710 active-VFO step-DOWN (~20 Hz), not DNR — removed from settings poll. Active-VFO tracking: added VS/FB polling (0.5 s), freq web command targets active VFO. TX meter fix: FT-710 RM response is 9 chars RM+id+6 digits with raw 0-255 in first 3 digits (was resp[4:]), added piecewise-linear calibration (Power/SWR/Vd/Id from FT-710.rig). PTT latency: 5→3 queries in IF poll, inter-query pause checks, poll timeout 0.25 s, release verify loop removed, TX_DRAIN 150→50 ms. TX audio: reverted background start_tx (race with queue-clearing caused SSB zero-power). RX audio: removed blocking stderr diagnostic prints (30 fps flush), parallelized WS audio sends via asyncio.gather. CAT robustness: AI1 disabled (interfered with FA/MD0/SM0), AI0 sent before ID query. restart.sh: fixed .env source. Updated gap-analysis doc (DN correction). |
| SDD V1.1 |
2026-07-06 |
Claude |
Bug fix: TX audio chain unified to 48 kHz (was 16 kHz mic → 48 kHz playback = crackling). Enhanced _find_rx_device() with multi-layer detection (config env var, name match, mono-channel heuristic, full-duplex TX). Enhanced _find_tx_device() with same heuristics. opus_rx.py: TX_RATE 16k→48k, added TX_FRAME_SAMPLES constant. tx_opus_worker.js: FRAME_SIZE 320→960, OpusEncoder 16k→48k. ft710_main.js: getUserMedia + AudioContext sampleRate 16k→48k (both main + fallback). TX Opus encoder optimized for voice: CBR 28kbps, VBR/FEC/DTX/HPF disabled. Added SSL CLI args. Event-based power button (mobile-first connect). Added AD-011 (Unified 48kHz TX audio pipeline). AudioContext gain explicitly set to 1.0. iOS unlock oscillator during user gesture. |
| SDD V1.0 |
2026-07-06 |
Claude |
Initial SDD baseline for MRRC FT-710 codebase. All 15 chapters written from scratch based on current repository state: server.py, cat_controller.py, audio_handler.py, opus_rx.py, radio_state.py, poll_scheduler.py, scope_handler.py, scope_pipe.py, config.py, static/ (HTML, CSS, JS, modules, worklets, worker). Documents: Full CAT control, FT4222 scope + S-meter fallback, Opus/PCM dual-codec bidirectional audio, AudioWorklet RX playback, TX mic capture, 5-tier polling, dirty-field state broadcasting, session auth, memory channels, PTT safety architecture. |