From 7630172e50201b7373b827c95ce9f578f13057da Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Tue, 9 Jun 2026 10:09:06 +0300 Subject: [PATCH] Phase 3 (WA2d): move web Band/XvtrBand handlers into the adapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now that RestoreBand and XVTR enter/exit are full controller commands, the web Band and XvtrBand handlers carry no MainForm orchestration — move them to TWebAdapter.OnBand/OnXvtrBand (validation + SaveCurrentBand/persist + command). CAT Ctx.DoBandByIndex and CAT band up/down repointed to FWebAdapter.OnBand. Remaining host-coupled web handlers: Freq/FreqA (ApplyVfoA channel orchestration), Run/Connect/device CRUD (daemon entry). Co-Authored-By: Claude Opus 4.8 --- MainForm.pas | 58 +++++--------------------------------------------- WebAdapter.pas | 40 +++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 54 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index f13423f..3a989c6 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -437,10 +437,8 @@ type // WfAGC/WfNF/Mute/NR/NB/SNB/ANF/FreqB/Center/Attn/ActiveVfo/Ctun/MOX/Tun/FMStep/ // ClientActive). Здесь только то, что дёргает UI-обёртки MainForm. procedure WebOnFreq(Hz: Double); - procedure WebOnBand(Idx: Integer); procedure WebOnRun(On_: Boolean); procedure WebOnFreqA(Hz: Double); - procedure WebOnXvtrBand(Idx: Integer); // Discovery / connect / saved-CRUD из web (маршалятся в UI) procedure WebOnConnect(const IP: string); procedure WebOnDiscover; @@ -457,8 +455,6 @@ type procedure PushDeviceListToWeb; // store → FWebServer.SetDeviceList // Synchronize-обёртки (выполняются в UI-потоке) — только host-зависимые procedure SyncWebFreq; - procedure SyncWebBand; - procedure SyncWebXvtrBand; procedure SyncWebRun; procedure SyncWebFreqA; // --- CAT callbacks ------------------------------------------------------- @@ -885,13 +881,13 @@ begin FWebServer.OnFMStep := FWebAdapter.OnFMStep; // Host-зависимые (UI-обёртки) — пока на MainForm: FWebServer.OnFreq := WebOnFreq; - FWebServer.OnBand := WebOnBand; + FWebServer.OnBand := FWebAdapter.OnBand; FWebServer.OnSpan := FWebAdapter.OnSpan; FWebServer.OnRun := WebOnRun; FWebServer.OnDrive := FWebAdapter.OnDrive; FWebServer.OnFreqA := WebOnFreqA; FWebServer.OnWebMic := FWebAdapter.OnMic; - FWebServer.OnXvtrBand := WebOnXvtrBand; + FWebServer.OnXvtrBand := FWebAdapter.OnXvtrBand; FWebServer.OnConnect := WebOnConnect; FWebServer.OnDiscoverDev := WebOnDiscover; FWebServer.OnDisconnectDev := WebOnDisconnect; @@ -4681,50 +4677,6 @@ end; // Mode/Filter/AGC/AGCTop/Volume/WfAGC/WfNF/Mute/NR/NB/SNB/ANF/FreqB/Center/Attn + // ClientActiveChanged перенесены в TWebAdapter (чистые команды контроллера). -procedure TMainForm.WebOnBand(Idx: Integer); -begin - FWebSyncInt := Idx; - FWebSyncM := SyncWebBand; - TThread.Synchronize(nil, FWebSyncM); -end; - -procedure TMainForm.SyncWebBand; -begin - if (FWebSyncInt < 0) or (FWebSyncInt >= BAND_COUNT) then Exit; - // Выйти из XVTR при переходе на HF из web. DeactivateXvtr вернёт HF-состояние. - if FController.FCurrentXvtr >= 0 then - begin - DeactivateXvtr; - if FWebSyncInt = FController.FCurrentBand then Exit; - end - else if FWebSyncInt = FController.FCurrentBand then - Exit; - if FController.FDevConnected then begin SaveCurrentBand; FController.FSettings.Save; end; - FController.FCurrentBand := FWebSyncInt; - RestoreBand(FController.FCurrentBand); -end; - -procedure TMainForm.WebOnXvtrBand(Idx: Integer); -begin - FWebSyncInt := Idx; - FWebSyncM := SyncWebXvtrBand; - TThread.Synchronize(nil, FWebSyncM); -end; - -procedure TMainForm.SyncWebXvtrBand; -begin - if FWebSyncInt < 0 then - begin - DeactivateXvtr; - Exit; - end; - if (FWebSyncInt >= CFG_XVTR_COUNT) then Exit; - if not FController.FXvtrSettings.Entries[FWebSyncInt].Enabled then Exit; - if FWebSyncInt = FController.FCurrentXvtr then Exit; - if FController.FDevConnected then begin SaveCurrentBand; FController.FSettings.Save; end; - ActivateXvtrBand(FWebSyncInt); -end; - // ── Run ──────────────────────────────────────────────────────────────────── procedure TMainForm.WebOnRun(On_: Boolean); @@ -5661,7 +5613,7 @@ begin Ctx.DoBandDown := CATDoBandDown; Ctx.DoTuneUp := CATDoTuneUp; Ctx.DoTuneDown := CATDoTuneDown; - Ctx.DoBandByIndex := WebOnBand; + Ctx.DoBandByIndex := FWebAdapter.OnBand; FCATEngine := TCATEngine.Create(Ctx); FCATSerial := TCATSerialManager.Create(FCATEngine); FCATTcp := TCATTcpServer.Create(FCATEngine); @@ -5813,13 +5765,13 @@ end; procedure TMainForm.SyncCATBandUp; begin if FController.FCurrentBand < BAND_COUNT - 1 then - WebOnBand(FController.FCurrentBand + 1); + FWebAdapter.OnBand(FController.FCurrentBand + 1); end; procedure TMainForm.SyncCATBandDown; begin if FController.FCurrentBand > 0 then - WebOnBand(FController.FCurrentBand - 1); + FWebAdapter.OnBand(FController.FCurrentBand - 1); end; procedure TMainForm.SyncCATTuneUp; diff --git a/WebAdapter.pas b/WebAdapter.pas index 6e80bf5..ad7b09f 100644 --- a/WebAdapter.pas +++ b/WebAdapter.pas @@ -19,7 +19,7 @@ interface uses Classes, SysUtils, - RadioController, WebServer, WDSPEngine, HPSDRNetwork, HPSDRProtocol, BoardUtils; + RadioController, WebServer, WDSPEngine, HPSDRNetwork, HPSDRProtocol, BoardUtils, Settings; type // UI/оркестрационные операции, которые адаптер дёргает у хозяина (пока не @@ -47,6 +47,8 @@ type procedure SyncVolume; procedure SyncDrive; procedure SyncSpan; + procedure SyncBand; + procedure SyncXvtrBand; procedure SyncWfAGC; procedure SyncWfNF; procedure SyncMute; @@ -74,6 +76,8 @@ type procedure OnVolume(V: Integer); procedure OnDrive(V: Integer); procedure OnSpan(Hz: Integer); + procedure OnBand(Idx: Integer); + procedure OnXvtrBand(Idx: Integer); procedure OnWfAGC(On_: Boolean); procedure OnWfNF(On_: Boolean); procedure OnMute(On_: Boolean); @@ -160,6 +164,40 @@ begin FSyncInt := V; FController.Invoke(@SyncDrive); end; procedure TWebAdapter.SyncDrive; begin FController.SetDrive(FSyncInt); end; // rfDrive снимет память канала (ChannelController) +procedure TWebAdapter.OnBand(Idx: Integer); +begin FSyncInt := Idx; FController.Invoke(@SyncBand); end; + +procedure TWebAdapter.SyncBand; +// Смена HF-диапазона из web/CAT. Выход из XVTR (если активен) + persist + restore. +begin + if (FSyncInt < 0) or (FSyncInt >= CFG_BAND_COUNT) then Exit; + if FController.FCurrentXvtr >= 0 then + begin + FController.SetXvtrBand(-1); // выход в HF (DeactivateXvtr несёт HF-возврат) + if FSyncInt = FController.FCurrentBand then Exit; + end + else if FSyncInt = FController.FCurrentBand then + Exit; + if FController.FDevConnected then + begin FController.SaveCurrentBand; FController.FSettings.Save; end; + FController.FCurrentBand := FSyncInt; + FController.RestoreBand(FController.FCurrentBand); +end; + +procedure TWebAdapter.OnXvtrBand(Idx: Integer); +begin FSyncInt := Idx; FController.Invoke(@SyncXvtrBand); end; + +procedure TWebAdapter.SyncXvtrBand; +begin + if FSyncInt < 0 then begin FController.SetXvtrBand(-1); Exit; end; + if FSyncInt >= CFG_XVTR_COUNT then Exit; + if not FController.FXvtrSettings.Entries[FSyncInt].Enabled then Exit; + if FSyncInt = FController.FCurrentXvtr then Exit; + if FController.FDevConnected then + begin FController.SaveCurrentBand; FController.FSettings.Save; end; + FController.SetXvtrBand(FSyncInt); // ActivateXvtr (рендер/wideband/web — rfXvtr) +end; + procedure TWebAdapter.OnSpan(Hz: Integer); begin FSyncInt := Hz; FController.Invoke(@SyncSpan); end;