From 0a0a5c455e98ab45b773f5684a0e222e35a2252d Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Tue, 9 Jun 2026 10:18:59 +0300 Subject: [PATCH] Phase 3 (WA2e): move web Freq/FreqA handlers into the adapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- MainForm.pas | 42 +++++------------------------------------- WebAdapter.pas | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 37 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index 3a989c6..f74505a 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -436,9 +436,7 @@ type // Чистые-контроллерные перенесены в TWebAdapter (Mode/Filter/AGC/AGCTop/Volume/ // WfAGC/WfNF/Mute/NR/NB/SNB/ANF/FreqB/Center/Attn/ActiveVfo/Ctun/MOX/Tun/FMStep/ // ClientActive). Здесь только то, что дёргает UI-обёртки MainForm. - procedure WebOnFreq(Hz: Double); procedure WebOnRun(On_: Boolean); - procedure WebOnFreqA(Hz: Double); // Discovery / connect / saved-CRUD из web (маршалятся в UI) procedure WebOnConnect(const IP: string); procedure WebOnDiscover; @@ -454,9 +452,7 @@ type procedure SyncWebDevAutoStart; procedure PushDeviceListToWeb; // store → FWebServer.SetDeviceList // Synchronize-обёртки (выполняются в UI-потоке) — только host-зависимые - procedure SyncWebFreq; procedure SyncWebRun; - procedure SyncWebFreqA; // --- CAT callbacks ------------------------------------------------------- function CATGetVfoA: Double; function CATGetVfoB: Double; @@ -880,12 +876,12 @@ begin FWebServer.OnTun := FWebAdapter.OnTun; FWebServer.OnFMStep := FWebAdapter.OnFMStep; // Host-зависимые (UI-обёртки) — пока на MainForm: - FWebServer.OnFreq := WebOnFreq; + FWebServer.OnFreq := FWebAdapter.OnFreq; FWebServer.OnBand := FWebAdapter.OnBand; FWebServer.OnSpan := FWebAdapter.OnSpan; FWebServer.OnRun := WebOnRun; FWebServer.OnDrive := FWebAdapter.OnDrive; - FWebServer.OnFreqA := WebOnFreqA; + FWebServer.OnFreqA := FWebAdapter.OnFreqA; FWebServer.OnWebMic := FWebAdapter.OnMic; FWebServer.OnXvtrBand := FWebAdapter.OnXvtrBand; FWebServer.OnConnect := WebOnConnect; @@ -4657,25 +4653,9 @@ end; // не трогать UI и WDSP из чужого потока. // =========================================================================== -procedure TMainForm.WebOnFreq(Hz: Double); -begin - 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 (чистые команды контроллера). +// Mode/Filter/AGC/AGCTop/Volume/Drive/Span/Band/XvtrBand/Freq/FreqA/FreqB/Center/ +// WfAGC/WfNF/Mute/NR/NB/SNB/ANF/Attn/ClientActiveChanged перенесены в TWebAdapter +// (чистые команды контроллера). // ── Run ──────────────────────────────────────────────────────────────────── @@ -4830,18 +4810,6 @@ end; // ── 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); begin if FSyncingFromController then Exit; // программная установка из OnControllerState — не команда diff --git a/WebAdapter.pas b/WebAdapter.pas index ad7b09f..d579b6e 100644 --- a/WebAdapter.pas +++ b/WebAdapter.pas @@ -56,6 +56,8 @@ type procedure SyncNB; procedure SyncSNB; procedure SyncANF; + procedure SyncFreq; + procedure SyncFreqA; procedure SyncFreqB; procedure SyncCenter; procedure SyncAttn; @@ -85,6 +87,8 @@ type procedure OnNB(Mode: Integer); procedure OnSNB(On_: Boolean); procedure OnANF(On_: Boolean); + procedure OnFreq(Hz: Double); + procedure OnFreqA(Hz: Double); procedure OnFreqB(Hz: Double); procedure OnCenter(Hz: Double); procedure OnAttn(Idx: Integer); @@ -258,6 +262,23 @@ begin FSyncBool := On_; FController.Invoke(@SyncANF); end; procedure TWebAdapter.SyncANF; 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); begin FSyncFreq := Hz; FController.Invoke(@SyncFreqB); end;