From ee9947acdeef7efd1c046e5c0862c69197cecdc9 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Mon, 27 Apr 2026 21:33:29 +0300 Subject: [PATCH] Fix AGC lines not updating on spectrum Three params were never synced to FSpecView after FormCreate: - WDSPReady: now set every timer tick so the draw branch (real WDSP thresh/hang vs. static AGCTop) is always correct - AGCThresh/AGCHangLevel: synced from FDSPEngine after UpdateAGCLines in SpectrumTimerTick - AGCTop: synced in TrkAGCChange, RestoreBand and DoConnectDevice Co-Authored-By: Claude Sonnet 4.6 --- MainForm.pas | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index 8dc854a..36ec917 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -884,6 +884,7 @@ begin FDSPEngine.SetAGCTop(FAGCTop); FDSPEngine.SetAGC(TWDSPAGCMode(FAGCMode), 50.0); end; + FSpecView.AGCTop := FAGCTop; // --- CTUN --- FCTun := B.CTun; @@ -2140,9 +2141,12 @@ begin if FWDSPReady then begin FLastSMeter := FDSPEngine.GetSMeterDBm; - FDSPEngine.SetSpectrumWidth(FSpectrumWidth); // актуальная ширина для SetAGC/SetAGCTop + FDSPEngine.SetSpectrumWidth(FSpectrumWidth); FDSPEngine.UpdateAGCLines(FSpectrumWidth); + FSpecView.AGCThresh := FDSPEngine.AGCThresh; + FSpecView.AGCHangLevel := FDSPEngine.AGCHangLevel; end; + FSpecView.WDSPReady := FWDSPReady; // Обновляем оверлей если видим if Assigned(FVfoOverlay) and FVfoOverlay.Visible then begin @@ -2815,8 +2819,8 @@ begin // ChangeSampleRate пересоздаёт WDSP-канал — восстанавливаем все настройки FDSPEngine.SetAGCTop(FAGCTop); FDSPEngine.SetAGC(TWDSPAGCMode(FAGCMode), 50.0); - // SetAGC вызывает UpdateAGCLines внутри — линии на спектре обновятся end; + FSpecView.AGCTop := FAGCTop; // DUC specific FillChar(DUCPkt, SizeOf(DUCPkt), 0); @@ -4415,8 +4419,8 @@ begin FDSPEngine.SetAGCTop(FAGCTop); FDSPEngine.SetAGC(TWDSPAGCMode(FAGCMode), 50.0); end; - // Обновляем кэш диапазона FBandCache[FCurrentBand].AGCTop := FAGCTop; + FSpecView.AGCTop := FAGCTop; FSpecView.DrawSpectrum; PbSpectrum.Invalidate; end;