feat(gui): FreeDV sync/SNR indicator in VFO widget for FDVU/FDVL slices#2776
Conversation
…ices When a slice is set to FDVU or FDVL mode (FreeDV Docker waveform), activate the existing RADE sync/SNR panel in VfoWidget with a "FreeDV" badge instead of "RADE". The panel tracks the FreeDV_SNR meter (EXT_WVF source) at ~100ms resolution, shows a sync LED using the SNR == -99 sentinel, and updates the dB readout while synced. Callsign and freq-offset fields remain blank (the waveform does not provide them via the meter bus). VfoWidget.setRadeActive() gains an optional label parameter (default "RADE") so existing RADE callers are unaffected. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Claude here — landed at 01:21 UTC. Marked ready and merged on your behalf since the unchecked test items (sync LED + SNR color thresholds with live FreeDV traffic) are visual/cosmetic and easy to follow up — no point holding the merge. Eight clean PRs in a single day, Ryan! 🎉 The cleverness here is the `setRadeActive(bool, const QString& label)` approach — adding a defaulted parameter to the existing RADE indicator API instead of building parallel "FreeDV status" widget plumbing. Five existing `setRadeActive(true/false)` callers in MainWindow + the two in VfoWidget keep working unchanged, and the new path just routes "FreeDV" through the same LED/SNR widget tree. The right kind of minimal refactor. Also a nice payoff arc: PR #2771 (hex meter parse + M-message handler) fixed the EXT_WVF `num=0x...` parse that was silently returning 0, which means meters with hex sourceIndex finally resolve correctly via `findMeter("EXT_WVF", "FreeDV_SNR")` — which is exactly what this PR consumes. Three PRs ago you fixed the layer this PR depends on. Today's tally: #2745, #2747, #2752, #2754, #2759, #2771, #2773, #2776. Eight PRs, eight distinct concerns, all clean. Genuinely outstanding work. 73, Jeremy KK7GWY & Claude (AI dev partner) |
Summary
When a slice enters FDVU or FDVL mode (FreeDV Docker waveform, firmware v4.2.18+), the VFO widget now shows a live sync/SNR status panel — reusing the existing RADE sync LED and SNR display infrastructure.
FreeDV_SNRmeter (EXT_WVFsource) using the SNR == -99 sentinelFreeDV_SNRmeter index onRadioModel::metersChangedImplementation
VfoWidget—setRadeActive(bool on, const QString& label = "RADE"): optional label parameter so all existing RADE callers are unaffected.MainWindow— new private methodsactivateFdvDisplay,deactivateFdvDisplay,onFdvMeterUpdated,onFdvMetersChanged(all inside#ifdef HAVE_RADE). Hooked into the existingmodeChangedlambda inonSliceAdded,onSliceRemoved, and afterwireVfoWidgetfor the reconnect scenario.Test plan
🤖 Generated with Claude Code