Phase 3 (WA2e): move web Freq/FreqA handlers into the adapter

With ApplyVfoA now a thin SetVfoA delegate (channel orchestration on the
OnAfterTune hook), the web Freq/FreqA handlers carry no MainForm logic — move
them to TWebAdapter.OnFreq (active-VFO routing → SetVfoA/SetVfoB) and OnFreqA
(SetVfoA). CAT freq (CATSetVfoA/SyncCATVfoA) left as-is — moves with the CAT
adapter (Phase 4).

Remaining host-coupled web handlers: Run / Connect / device CRUD (daemon entry).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Uladzimir Karpenka
2026-06-09 10:18:59 +03:00
co-authored by Claude Opus 4.8
parent 7630172e50
commit 0a0a5c455e
2 changed files with 26 additions and 37 deletions
+5 -37
View File
@@ -436,9 +436,7 @@ type
// Чистые-контроллерные перенесены в TWebAdapter (Mode/Filter/AGC/AGCTop/Volume/ // Чистые-контроллерные перенесены в TWebAdapter (Mode/Filter/AGC/AGCTop/Volume/
// WfAGC/WfNF/Mute/NR/NB/SNB/ANF/FreqB/Center/Attn/ActiveVfo/Ctun/MOX/Tun/FMStep/ // WfAGC/WfNF/Mute/NR/NB/SNB/ANF/FreqB/Center/Attn/ActiveVfo/Ctun/MOX/Tun/FMStep/
// ClientActive). Здесь только то, что дёргает UI-обёртки MainForm. // ClientActive). Здесь только то, что дёргает UI-обёртки MainForm.
procedure WebOnFreq(Hz: Double);
procedure WebOnRun(On_: Boolean); procedure WebOnRun(On_: Boolean);
procedure WebOnFreqA(Hz: Double);
// Discovery / connect / saved-CRUD из web (маршалятся в UI) // Discovery / connect / saved-CRUD из web (маршалятся в UI)
procedure WebOnConnect(const IP: string); procedure WebOnConnect(const IP: string);
procedure WebOnDiscover; procedure WebOnDiscover;
@@ -454,9 +452,7 @@ type
procedure SyncWebDevAutoStart; procedure SyncWebDevAutoStart;
procedure PushDeviceListToWeb; // store → FWebServer.SetDeviceList procedure PushDeviceListToWeb; // store → FWebServer.SetDeviceList
// Synchronize-обёртки (выполняются в UI-потоке) — только host-зависимые // Synchronize-обёртки (выполняются в UI-потоке) — только host-зависимые
procedure SyncWebFreq;
procedure SyncWebRun; procedure SyncWebRun;
procedure SyncWebFreqA;
// --- CAT callbacks ------------------------------------------------------- // --- CAT callbacks -------------------------------------------------------
function CATGetVfoA: Double; function CATGetVfoA: Double;
function CATGetVfoB: Double; function CATGetVfoB: Double;
@@ -880,12 +876,12 @@ begin
FWebServer.OnTun := FWebAdapter.OnTun; FWebServer.OnTun := FWebAdapter.OnTun;
FWebServer.OnFMStep := FWebAdapter.OnFMStep; FWebServer.OnFMStep := FWebAdapter.OnFMStep;
// Host-зависимые (UI-обёртки) — пока на MainForm: // Host-зависимые (UI-обёртки) — пока на MainForm:
FWebServer.OnFreq := WebOnFreq; FWebServer.OnFreq := FWebAdapter.OnFreq;
FWebServer.OnBand := FWebAdapter.OnBand; FWebServer.OnBand := FWebAdapter.OnBand;
FWebServer.OnSpan := FWebAdapter.OnSpan; FWebServer.OnSpan := FWebAdapter.OnSpan;
FWebServer.OnRun := WebOnRun; FWebServer.OnRun := WebOnRun;
FWebServer.OnDrive := FWebAdapter.OnDrive; FWebServer.OnDrive := FWebAdapter.OnDrive;
FWebServer.OnFreqA := WebOnFreqA; FWebServer.OnFreqA := FWebAdapter.OnFreqA;
FWebServer.OnWebMic := FWebAdapter.OnMic; FWebServer.OnWebMic := FWebAdapter.OnMic;
FWebServer.OnXvtrBand := FWebAdapter.OnXvtrBand; FWebServer.OnXvtrBand := FWebAdapter.OnXvtrBand;
FWebServer.OnConnect := WebOnConnect; FWebServer.OnConnect := WebOnConnect;
@@ -4657,25 +4653,9 @@ end;
// не трогать UI и WDSP из чужого потока. // не трогать UI и WDSP из чужого потока.
// =========================================================================== // ===========================================================================
procedure TMainForm.WebOnFreq(Hz: Double); // Mode/Filter/AGC/AGCTop/Volume/Drive/Span/Band/XvtrBand/Freq/FreqA/FreqB/Center/
begin // WfAGC/WfNF/Mute/NR/NB/SNB/ANF/Attn/ClientActiveChanged перенесены в TWebAdapter
FWebSyncFreq := Hz; // (чистые команды контроллера).
FWebSyncM := SyncWebFreq;
TThread.Synchronize(nil, FWebSyncM);
end;
procedure TMainForm.SyncWebFreq;
begin
// Веб шлёт "freq" для активного VFO — маршрутизируем через те же команды,
// что и десктоп (рендер/сеть/band-detect внутри них и в OnControllerState).
if FController.FActiveVfo = 0 then
ApplyVfoA(Round(FWebSyncFreq))
else
FController.SetVfoB(FWebSyncFreq);
end;
// Mode/Filter/AGC/AGCTop/Volume/WfAGC/WfNF/Mute/NR/NB/SNB/ANF/FreqB/Center/Attn +
// ClientActiveChanged перенесены в TWebAdapter (чистые команды контроллера).
// ── Run ──────────────────────────────────────────────────────────────────── // ── Run ────────────────────────────────────────────────────────────────────
@@ -4830,18 +4810,6 @@ end;
// ── CTUN ────────────────────────────────────────────────────────────────── // ── CTUN ──────────────────────────────────────────────────────────────────
procedure TMainForm.WebOnFreqA(Hz: Double);
begin
FWebSyncFreq := Hz;
FWebSyncM := SyncWebFreqA;
TThread.Synchronize(nil, FWebSyncM);
end;
procedure TMainForm.SyncWebFreqA;
begin
ApplyVfoA(Round(FWebSyncFreq));
end;
procedure TMainForm.TrkDriveChange(Sender: TObject); procedure TMainForm.TrkDriveChange(Sender: TObject);
begin begin
if FSyncingFromController then Exit; // программная установка из OnControllerState — не команда if FSyncingFromController then Exit; // программная установка из OnControllerState — не команда
+21
View File
@@ -56,6 +56,8 @@ type
procedure SyncNB; procedure SyncNB;
procedure SyncSNB; procedure SyncSNB;
procedure SyncANF; procedure SyncANF;
procedure SyncFreq;
procedure SyncFreqA;
procedure SyncFreqB; procedure SyncFreqB;
procedure SyncCenter; procedure SyncCenter;
procedure SyncAttn; procedure SyncAttn;
@@ -85,6 +87,8 @@ type
procedure OnNB(Mode: Integer); procedure OnNB(Mode: Integer);
procedure OnSNB(On_: Boolean); procedure OnSNB(On_: Boolean);
procedure OnANF(On_: Boolean); procedure OnANF(On_: Boolean);
procedure OnFreq(Hz: Double);
procedure OnFreqA(Hz: Double);
procedure OnFreqB(Hz: Double); procedure OnFreqB(Hz: Double);
procedure OnCenter(Hz: Double); procedure OnCenter(Hz: Double);
procedure OnAttn(Idx: Integer); procedure OnAttn(Idx: Integer);
@@ -258,6 +262,23 @@ begin FSyncBool := On_; FController.Invoke(@SyncANF); end;
procedure TWebAdapter.SyncANF; procedure TWebAdapter.SyncANF;
begin FController.SetANF(FSyncBool); end; begin FController.SetANF(FSyncBool); end;
procedure TWebAdapter.OnFreq(Hz: Double);
begin FSyncFreq := Hz; FController.Invoke(@SyncFreq); end;
procedure TWebAdapter.SyncFreq;
begin
// "freq" для АКТИВНОГО VFO. SetVfoA/SetVfoB несут CTUN/band-detect/сеть +
// канальную оркестрацию (через OnAfterTune-хук); рендер — rfVfoA/rfVfoB.
if FController.FActiveVfo = 0 then FController.SetVfoA(FSyncFreq)
else FController.SetVfoB(FSyncFreq);
end;
procedure TWebAdapter.OnFreqA(Hz: Double);
begin FSyncFreq := Hz; FController.Invoke(@SyncFreqA); end;
procedure TWebAdapter.SyncFreqA;
begin FController.SetVfoA(FSyncFreq); end;
procedure TWebAdapter.OnFreqB(Hz: Double); procedure TWebAdapter.OnFreqB(Hz: Double);
begin FSyncFreq := Hz; FController.Invoke(@SyncFreqB); end; begin FSyncFreq := Hz; FController.Invoke(@SyncFreqB); end;