From 06fd730ff4d3e5401fdfb25764705a48f2be6d1a Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Mon, 8 Jun 2026 16:15:52 +0300 Subject: [PATCH] Phase 3 (WA2a): move WebOnMic into the web adapter WebOnMic only feeds TX mic samples to the controller's WDSP engine (no UI, thread-safe like the other engine data callbacks), so it moves verbatim into TWebAdapter.OnMic. FWebServer.OnWebMic now points there. Co-Authored-By: Claude Opus 4.8 --- MainForm.pas | 21 +-------------------- WebAdapter.pas | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/MainForm.pas b/MainForm.pas index 28029f6..a452104 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -445,7 +445,6 @@ type procedure WebOnRun(On_: Boolean); procedure WebOnDrive(V: Integer); procedure WebOnFreqA(Hz: Double); - procedure WebOnMic(Samples: PSingle; Count: Integer); procedure WebOnXvtrBand(Idx: Integer); // Discovery / connect / saved-CRUD из web (маршалятся в UI) procedure WebOnConnect(const IP: string); @@ -982,7 +981,7 @@ begin FWebServer.OnRun := WebOnRun; FWebServer.OnDrive := WebOnDrive; FWebServer.OnFreqA := WebOnFreqA; - FWebServer.OnWebMic := WebOnMic; + FWebServer.OnWebMic := FWebAdapter.OnMic; FWebServer.OnXvtrBand := WebOnXvtrBand; FWebServer.OnConnect := WebOnConnect; FWebServer.OnDiscoverDev := WebOnDiscover; @@ -5252,24 +5251,6 @@ begin ApplyVfoA(Round(FWebSyncFreq)); end; -procedure TMainForm.WebOnMic(Samples: PSingle; Count: Integer); -var - Buf: array[0..5759] of Double; - SP: PSingle; - i, n: Integer; -begin - if not FController.FWDSPReady then Exit; - n := Count; - if n > Length(Buf) then n := Length(Buf); - SP := Samples; - for i := 0 to n - 1 do - begin - Buf[i] := SP^; - Inc(SP); - end; - FController.FDSPEngine.PushTXMicSamplesD(Buf, n); -end; - procedure TMainForm.TrkDriveChange(Sender: TObject); begin FController.FDrivePercent := TrkDrive.Position; // слайдер — ввод; контроллер — истина diff --git a/WebAdapter.pas b/WebAdapter.pas index acb13f1..500ba32 100644 --- a/WebAdapter.pas +++ b/WebAdapter.pas @@ -86,6 +86,9 @@ type procedure OnTun(On_: Boolean); procedure OnFMStep(Idx: Integer); procedure OnClientActiveChanged(Active: Boolean); + // TX-mic от web-клиента → WDSP. Вызывается из WS-потока; без маршалинга — + // подача в движок thread-safe (как OnMicPacket/OnDDCIQ контроллера). + procedure OnMic(Samples: PSingle; Count: Integer); end; implementation @@ -261,4 +264,22 @@ begin FController.FWebClientActive := Active; end; +procedure TWebAdapter.OnMic(Samples: PSingle; Count: Integer); +var + Buf: array[0..5759] of Double; + SP: PSingle; + i, n: Integer; +begin + if not FController.FWDSPReady then Exit; + n := Count; + if n > Length(Buf) then n := Length(Buf); + SP := Samples; + for i := 0 to n - 1 do + begin + Buf[i] := SP^; + Inc(SP); + end; + FController.FDSPEngine.PushTXMicSamplesD(Buf, n); +end; + end.