mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37: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.
|
// ClientActive). Здесь только то, что дёргает UI-обёртки MainForm.
|
||||||
procedure WebOnFreq(Hz: Double);
|
procedure WebOnFreq(Hz: Double);
|
||||||
procedure WebOnBand(Idx: Integer);
|
procedure WebOnBand(Idx: Integer);
|
||||||
procedure WebOnSpan(Hz: Integer);
|
|
||||||
procedure WebOnRun(On_: Boolean);
|
procedure WebOnRun(On_: Boolean);
|
||||||
procedure WebOnFreqA(Hz: Double);
|
procedure WebOnFreqA(Hz: Double);
|
||||||
procedure WebOnXvtrBand(Idx: Integer);
|
procedure WebOnXvtrBand(Idx: Integer);
|
||||||
@@ -460,7 +459,6 @@ type
|
|||||||
procedure SyncWebFreq;
|
procedure SyncWebFreq;
|
||||||
procedure SyncWebBand;
|
procedure SyncWebBand;
|
||||||
procedure SyncWebXvtrBand;
|
procedure SyncWebXvtrBand;
|
||||||
procedure SyncWebSpan;
|
|
||||||
procedure SyncWebRun;
|
procedure SyncWebRun;
|
||||||
procedure SyncWebFreqA;
|
procedure SyncWebFreqA;
|
||||||
// --- CAT callbacks -------------------------------------------------------
|
// --- CAT callbacks -------------------------------------------------------
|
||||||
@@ -899,7 +897,7 @@ begin
|
|||||||
// Host-зависимые (UI-обёртки) — пока на MainForm:
|
// Host-зависимые (UI-обёртки) — пока на MainForm:
|
||||||
FWebServer.OnFreq := WebOnFreq;
|
FWebServer.OnFreq := WebOnFreq;
|
||||||
FWebServer.OnBand := WebOnBand;
|
FWebServer.OnBand := WebOnBand;
|
||||||
FWebServer.OnSpan := WebOnSpan;
|
FWebServer.OnSpan := FWebAdapter.OnSpan;
|
||||||
FWebServer.OnRun := WebOnRun;
|
FWebServer.OnRun := WebOnRun;
|
||||||
FWebServer.OnDrive := FWebAdapter.OnDrive;
|
FWebServer.OnDrive := FWebAdapter.OnDrive;
|
||||||
FWebServer.OnFreqA := WebOnFreqA;
|
FWebServer.OnFreqA := WebOnFreqA;
|
||||||
@@ -4656,13 +4654,9 @@ end;
|
|||||||
|
|
||||||
procedure TMainForm.OnSampleRateSelect(SampleRate: Integer);
|
procedure TMainForm.OnSampleRateSelect(SampleRate: Integer);
|
||||||
begin
|
begin
|
||||||
if SampleRate = FController.FSampleRate then Exit;
|
// Тонкая обёртка: движок (пересоздание WDSP-канала, DDC-rate, DSP-restore) +
|
||||||
// Движок (пересоздание WDSP-канала, DDC-rate, восстановление DSP) — в
|
// персист — в команде SetSampleRate; рендер overlay/AGC — OnControllerState.
|
||||||
// контроллере; рендер overlay + AGC-линий — в OnControllerState(rfSampleRate).
|
|
||||||
FController.SetSampleRate(SampleRate);
|
FController.SetSampleRate(SampleRate);
|
||||||
// SampleRate глобальный — сохраняем в global settings.
|
|
||||||
if FController.FDevConnected then
|
|
||||||
FController.SaveGlobalSettings;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ===========================================================================
|
// ===========================================================================
|
||||||
@@ -4735,27 +4729,6 @@ begin
|
|||||||
ActivateXvtrBand(FWebSyncInt);
|
ActivateXvtrBand(FWebSyncInt);
|
||||||
end;
|
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 ────────────────────────────────────────────────────────────────────
|
// ── Run ────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
procedure TMainForm.WebOnRun(On_: Boolean);
|
procedure TMainForm.WebOnRun(On_: Boolean);
|
||||||
|
|||||||
+3
-2
@@ -1652,8 +1652,8 @@ begin FSpanHz := Hz; Changed(rfSpan); { TODO wiring } end;
|
|||||||
procedure TRadioController.SetSampleRate(Hz: Integer);
|
procedure TRadioController.SetSampleRate(Hz: Integer);
|
||||||
// Смена частоты дискретизации DDC. В этом приложении span ≡ sample rate.
|
// Смена частоты дискретизации DDC. В этом приложении span ≡ sample rate.
|
||||||
// Несёт: пересоздание WDSP-канала (Close+FlushQueue+Open), новый rate в
|
// Несёт: пересоздание WDSP-канала (Close+FlushQueue+Open), новый rate в
|
||||||
// трансивер и полное восстановление DSP-состояния. Сохранение в global
|
// трансивер и полное восстановление DSP-состояния. Команда сама персистит
|
||||||
// settings + рендер overlay/AGC-линий остаются в UI (OnControllerState).
|
// (sample rate глобальный); рендер overlay/AGC-линий — в OnControllerState.
|
||||||
begin
|
begin
|
||||||
if (Hz <= 0) or (Hz = FSampleRate) then Exit;
|
if (Hz <= 0) or (Hz = FSampleRate) then Exit;
|
||||||
FSampleRate := Hz;
|
FSampleRate := Hz;
|
||||||
@@ -1690,6 +1690,7 @@ begin
|
|||||||
FDSPEngine.SetShift(FVfoA - FCenterFreq);
|
FDSPEngine.SetShift(FVfoA - FCenterFreq);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
SaveGlobalSettings; // sample rate глобальный — персистим (гейт по FDevConnected внутри)
|
||||||
Changed(rfSampleRate);
|
Changed(rfSampleRate);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ type
|
|||||||
procedure SyncAGCTop;
|
procedure SyncAGCTop;
|
||||||
procedure SyncVolume;
|
procedure SyncVolume;
|
||||||
procedure SyncDrive;
|
procedure SyncDrive;
|
||||||
|
procedure SyncSpan;
|
||||||
procedure SyncWfAGC;
|
procedure SyncWfAGC;
|
||||||
procedure SyncWfNF;
|
procedure SyncWfNF;
|
||||||
procedure SyncMute;
|
procedure SyncMute;
|
||||||
@@ -72,6 +73,7 @@ type
|
|||||||
procedure OnAGCTop(DB: Integer);
|
procedure OnAGCTop(DB: Integer);
|
||||||
procedure OnVolume(V: Integer);
|
procedure OnVolume(V: Integer);
|
||||||
procedure OnDrive(V: Integer);
|
procedure OnDrive(V: Integer);
|
||||||
|
procedure OnSpan(Hz: Integer);
|
||||||
procedure OnWfAGC(On_: Boolean);
|
procedure OnWfAGC(On_: Boolean);
|
||||||
procedure OnWfNF(On_: Boolean);
|
procedure OnWfNF(On_: Boolean);
|
||||||
procedure OnMute(On_: Boolean);
|
procedure OnMute(On_: Boolean);
|
||||||
@@ -158,6 +160,24 @@ begin FSyncInt := V; FController.Invoke(@SyncDrive); end;
|
|||||||
procedure TWebAdapter.SyncDrive;
|
procedure TWebAdapter.SyncDrive;
|
||||||
begin FController.SetDrive(FSyncInt); end; // rfDrive снимет память канала (ChannelController)
|
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);
|
procedure TWebAdapter.OnWfAGC(On_: Boolean);
|
||||||
begin FSyncBool := On_; FController.Invoke(@SyncWfAGC); end;
|
begin FSyncBool := On_; FController.Invoke(@SyncWfAGC); end;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user