mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-26 19:57:33 +00:00
Phase 3 (WA2c): move web Span into the adapter; SetSampleRate self-persists
Now that global-settings persistence is controller-owned, fold the persist into SetSampleRate (sample rate is global; self-gated on FDevConnected). OnSampleRateSelect becomes a thin wrapper. Web Span moves to TWebAdapter.OnSpan (keeps the valid-span whitelist), so the last span coupling to MainForm is gone. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
2c356beb77
commit
5f5558e4a2
+3
-30
@@ -438,7 +438,6 @@ type
|
||||
// ClientActive). Здесь только то, что дёргает UI-обёртки MainForm.
|
||||
procedure WebOnFreq(Hz: Double);
|
||||
procedure WebOnBand(Idx: Integer);
|
||||
procedure WebOnSpan(Hz: Integer);
|
||||
procedure WebOnRun(On_: Boolean);
|
||||
procedure WebOnFreqA(Hz: Double);
|
||||
procedure WebOnXvtrBand(Idx: Integer);
|
||||
@@ -460,7 +459,6 @@ type
|
||||
procedure SyncWebFreq;
|
||||
procedure SyncWebBand;
|
||||
procedure SyncWebXvtrBand;
|
||||
procedure SyncWebSpan;
|
||||
procedure SyncWebRun;
|
||||
procedure SyncWebFreqA;
|
||||
// --- CAT callbacks -------------------------------------------------------
|
||||
@@ -899,7 +897,7 @@ begin
|
||||
// Host-зависимые (UI-обёртки) — пока на MainForm:
|
||||
FWebServer.OnFreq := WebOnFreq;
|
||||
FWebServer.OnBand := WebOnBand;
|
||||
FWebServer.OnSpan := WebOnSpan;
|
||||
FWebServer.OnSpan := FWebAdapter.OnSpan;
|
||||
FWebServer.OnRun := WebOnRun;
|
||||
FWebServer.OnDrive := FWebAdapter.OnDrive;
|
||||
FWebServer.OnFreqA := WebOnFreqA;
|
||||
@@ -4656,13 +4654,9 @@ end;
|
||||
|
||||
procedure TMainForm.OnSampleRateSelect(SampleRate: Integer);
|
||||
begin
|
||||
if SampleRate = FController.FSampleRate then Exit;
|
||||
// Движок (пересоздание WDSP-канала, DDC-rate, восстановление DSP) — в
|
||||
// контроллере; рендер overlay + AGC-линий — в OnControllerState(rfSampleRate).
|
||||
// Тонкая обёртка: движок (пересоздание WDSP-канала, DDC-rate, DSP-restore) +
|
||||
// персист — в команде SetSampleRate; рендер overlay/AGC — OnControllerState.
|
||||
FController.SetSampleRate(SampleRate);
|
||||
// SampleRate глобальный — сохраняем в global settings.
|
||||
if FController.FDevConnected then
|
||||
FController.SaveGlobalSettings;
|
||||
end;
|
||||
|
||||
// ===========================================================================
|
||||
@@ -4735,27 +4729,6 @@ begin
|
||||
ActivateXvtrBand(FWebSyncInt);
|
||||
end;
|
||||
|
||||
procedure TMainForm.WebOnSpan(Hz: Integer);
|
||||
begin
|
||||
FWebSyncInt := Hz;
|
||||
FWebSyncM := SyncWebSpan;
|
||||
TThread.Synchronize(nil, FWebSyncM);
|
||||
end;
|
||||
|
||||
procedure TMainForm.SyncWebSpan;
|
||||
const
|
||||
ValidSpans: array[0..5] of Integer = (48000, 96000, 192000, 384000, 768000, 1536000);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to High(ValidSpans) do
|
||||
if ValidSpans[i] = FWebSyncInt then
|
||||
begin
|
||||
OnSampleRateSelect(FWebSyncInt);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
// ── Run ────────────────────────────────────────────────────────────────────
|
||||
|
||||
procedure TMainForm.WebOnRun(On_: Boolean);
|
||||
|
||||
+3
-2
@@ -1652,8 +1652,8 @@ begin FSpanHz := Hz; Changed(rfSpan); { TODO wiring } end;
|
||||
procedure TRadioController.SetSampleRate(Hz: Integer);
|
||||
// Смена частоты дискретизации DDC. В этом приложении span ≡ sample rate.
|
||||
// Несёт: пересоздание WDSP-канала (Close+FlushQueue+Open), новый rate в
|
||||
// трансивер и полное восстановление DSP-состояния. Сохранение в global
|
||||
// settings + рендер overlay/AGC-линий остаются в UI (OnControllerState).
|
||||
// трансивер и полное восстановление DSP-состояния. Команда сама персистит
|
||||
// (sample rate глобальный); рендер overlay/AGC-линий — в OnControllerState.
|
||||
begin
|
||||
if (Hz <= 0) or (Hz = FSampleRate) then Exit;
|
||||
FSampleRate := Hz;
|
||||
@@ -1690,6 +1690,7 @@ begin
|
||||
FDSPEngine.SetShift(FVfoA - FCenterFreq);
|
||||
end;
|
||||
end;
|
||||
SaveGlobalSettings; // sample rate глобальный — персистим (гейт по FDevConnected внутри)
|
||||
Changed(rfSampleRate);
|
||||
end;
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ type
|
||||
procedure SyncAGCTop;
|
||||
procedure SyncVolume;
|
||||
procedure SyncDrive;
|
||||
procedure SyncSpan;
|
||||
procedure SyncWfAGC;
|
||||
procedure SyncWfNF;
|
||||
procedure SyncMute;
|
||||
@@ -72,6 +73,7 @@ type
|
||||
procedure OnAGCTop(DB: Integer);
|
||||
procedure OnVolume(V: Integer);
|
||||
procedure OnDrive(V: Integer);
|
||||
procedure OnSpan(Hz: Integer);
|
||||
procedure OnWfAGC(On_: Boolean);
|
||||
procedure OnWfNF(On_: Boolean);
|
||||
procedure OnMute(On_: Boolean);
|
||||
@@ -158,6 +160,24 @@ begin FSyncInt := V; FController.Invoke(@SyncDrive); end;
|
||||
procedure TWebAdapter.SyncDrive;
|
||||
begin FController.SetDrive(FSyncInt); end; // rfDrive снимет память канала (ChannelController)
|
||||
|
||||
procedure TWebAdapter.OnSpan(Hz: Integer);
|
||||
begin FSyncInt := Hz; FController.Invoke(@SyncSpan); end;
|
||||
|
||||
procedure TWebAdapter.SyncSpan;
|
||||
// span ≡ sample rate. Принимаем только валидные значения (как десктоп-оверлей);
|
||||
// SetSampleRate сам пересоздаёт WDSP-канал + персистит (idempotent при том же rate).
|
||||
const
|
||||
ValidSpans: array[0..5] of Integer = (48000, 96000, 192000, 384000, 768000, 1536000);
|
||||
var i: Integer;
|
||||
begin
|
||||
for i := 0 to High(ValidSpans) do
|
||||
if ValidSpans[i] = FSyncInt then
|
||||
begin
|
||||
FController.SetSampleRate(FSyncInt);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWebAdapter.OnWfAGC(On_: Boolean);
|
||||
begin FSyncBool := On_; FController.Invoke(@SyncWfAGC); end;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user