Fix DAX/SSB TX edge sync and isolate DAX TX path#353
Conversation
Merge PlanThanks for this PR — the DAX edge-sync and SSB delay fixes are well-documented and the engineering report is thorough. CI passes clean. Here's our plan for merging. Merge approachWe'll rebase onto current Conflict resolution planFile-by-file analysis: 1.
|
|
Merged in 08ae00e. Tested and verified:
Adjustments made during merge:
Thanks for the thorough fix and documentation, @pepefrog1234! 73, Jeremy KK7GWY & Claude (AI dev partner) |
v0.7.10 highlights: - **PR #353 merged**: DAX/SSB TX edge sync fix — immediate SSB TX audio gating, DAX backlog stabilization, low-latency DAX route option for FreeDV - **MIDI CW keying**: straight key, iambic dit/dah paddle, and PTT via Gate param type (#295) - **Spot hover tooltips**: callsign, frequency, source, spotter, comment, spotted time on hover - **Spot trigger on click**: sends 'spot trigger <index>' to radio for external logging software (#341) - **Spot lines stop at label**: no visual clutter above spot labels in FFT (#337) - **Single-click-to-tune**: configurable View menu toggle (#342) - **SpotHub cross-band tuning**: spot click now uses tuneAndRecenter so band changes work (#352) - **3v/4v pan layouts**: 3 and 4 vertical pan stacking options (#312) - **Line out volume fix**: master slider controls radio line out when PC Audio is disabled (#244) - **Audio output preserved on profile change**: PcAudioEnabled check prevents profile load from switching to PC audio (#336) - **CW decode after profile change**: deferred re-check restarts decoder when mode status arrives late (#305) - **XVTR band stack fix**: added 2m, 1.25m, 440, 33cm, 23cm to frequency lookup table (#346) - **Full model reset on disconnect**: prevents stale capabilities carrying over between different radio models (#359) - **Bundled RtMidi**: MIDI support on all platforms without external package dependency Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… PR 8) (#2953) Eight docs leave the top-level docs/ tree, partitioned by purpose: docs/archive/ — historical planning/session notes, kept for grep context: - issue-2136-feasibility-report.md (PR #2759, shipped) - issue-2136-implementation-plan.md (PR #2759, shipped) - TX_SYNC_FIX_REPORT.md (PR #353, RadioModel.cpp still references the report by name) - aether-dsp-session-notes.md (#796 maintainer notebook) docs/data/ — reference fixtures (not bundled, not runtime): - SSDR.settings + SmartSDR.exe.config (SmartSDR parity reference) - rxapplet_mode_settings.csv (per-mode RX control research) - vfo_mode_filters.csv (VFO filter-preset research; VfoWidget.cpp comment updated to new path) Kept in docs/ (still active): - audio_test_plan.md (17 KB, edited 2026-04-29, ongoing test plan) - profile-import-export-manual-checklist.md (PR #2641 QA checklist) Both new dirs include a one-paragraph README explaining the convention so a future maintainer doesn't have to guess what belongs where. Cross-references audited: - AppSettings.h:9 mentions "SmartSDR's SSDR.settings" as a concept, not a path — no change. - RadioModel.cpp:3991 references TX_SYNC_FIX_REPORT by name — no change, file is findable via grep/find. - VfoWidget.cpp:3324 carried a literal "docs/vfo_mode_filters.csv" path — updated to docs/data/. Verified with a clean local Release build (cmake --build … --target AetherSDR exits 0). After this PR, docs/ contains 18 markdown files (architecture/user docs), the assets/ subdir from PR 5, and the new archive/ + data/ subdirs — matches the acceptance criteria in the cleanup plan. Principle I. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…sdr#2933, PR 8) (aethersdr#2953) Eight docs leave the top-level docs/ tree, partitioned by purpose: docs/archive/ — historical planning/session notes, kept for grep context: - issue-2136-feasibility-report.md (PR aethersdr#2759, shipped) - issue-2136-implementation-plan.md (PR aethersdr#2759, shipped) - TX_SYNC_FIX_REPORT.md (PR aethersdr#353, RadioModel.cpp still references the report by name) - aether-dsp-session-notes.md (aethersdr#796 maintainer notebook) docs/data/ — reference fixtures (not bundled, not runtime): - SSDR.settings + SmartSDR.exe.config (SmartSDR parity reference) - rxapplet_mode_settings.csv (per-mode RX control research) - vfo_mode_filters.csv (VFO filter-preset research; VfoWidget.cpp comment updated to new path) Kept in docs/ (still active): - audio_test_plan.md (17 KB, edited 2026-04-29, ongoing test plan) - profile-import-export-manual-checklist.md (PR aethersdr#2641 QA checklist) Both new dirs include a one-paragraph README explaining the convention so a future maintainer doesn't have to guess what belongs where. Cross-references audited: - AppSettings.h:9 mentions "SmartSDR's SSDR.settings" as a concept, not a path — no change. - RadioModel.cpp:3991 references TX_SYNC_FIX_REPORT by name — no change, file is findable via grep/find. - VfoWidget.cpp:3324 carried a literal "docs/vfo_mode_filters.csv" path — updated to docs/data/. Verified with a clean local Release build (cmake --build … --target AetherSDR exits 0). After this PR, docs/ contains 18 markdown files (architecture/user docs), the assets/ subdir from PR 5, and the new archive/ + data/ subdirs — matches the acceptance criteria in the cleanup plan. Principle I. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
This PR fixes TX edge-timing regressions that affected both digital DAX TX and traditional SSB TX behavior.
It delivers two concrete outcomes:
In addition, this PR includes a detailed engineering report:
TX_SYNC_FIX_REPORT.mdProblem
During iterative DAX latency tuning, we observed two classes of issues:
Root causes were primarily gating/routing related:
What Changed
1) DAX edge and backlog stabilization
m_txRequested,txAudioGateChanged) to keep pipeline decisions aligned with local key/unkey edges.2) SSB immediate edge-sync restoration
moxChangedso SSB starts/stops on the local edge (no intentional wait-for-interlock on TX-on).3) DAX/SSB source isolation
Files Included
Code changes:
src/core/AudioEngine.cppsrc/core/AudioEngine.hsrc/core/VirtualAudioBridge.cppsrc/gui/MainWindow.cppsrc/gui/MainWindow.hsrc/models/RadioModel.cppsrc/models/RadioModel.hsrc/models/TransmitModel.cppDocumentation:
TX_SYNC_FIX_REPORT.mdValidation
main.cmake --build build-new -j8Scope Control
This PR intentionally contains only the TX sync fix code and the accompanying technical report. Unrelated local workspace changes were not included.