fix vfo on web

This commit is contained in:
2026-03-11 21:58:23 +03:00
parent 443da44e40
commit 8d64bba6fc
3 changed files with 186 additions and 47 deletions
+79 -6
View File
@@ -476,6 +476,8 @@ type
procedure WebOnNB(Mode: Integer);
procedure WebOnSNB(On_: Boolean);
procedure WebOnANF(On_: Boolean);
procedure WebOnFreqB(Hz: Double);
procedure WebOnActiveVfo(Idx: Integer);
// Synchronize-обёртки (выполняются в UI-потоке)
procedure SyncWebFreq;
procedure SyncWebMode;
@@ -494,6 +496,8 @@ type
procedure SyncWebNB;
procedure SyncWebSNB;
procedure SyncWebANF;
procedure SyncWebFreqB;
procedure SyncWebActiveVfo;
procedure BtnWfAGCClick(Sender: TObject);
procedure BtnWfNFClick(Sender: TObject);
procedure BtnHidePanelClick(Sender: TObject);
@@ -822,6 +826,8 @@ begin
FWebServer.OnNB := WebOnNB;
FWebServer.OnSNB := WebOnSNB;
FWebServer.OnANF := WebOnANF;
FWebServer.OnFreqB := WebOnFreqB;
FWebServer.OnActiveVfo := WebOnActiveVfo;
FWebServer.Start;
FSMeterPeak := -130;
FSMeterMin := -130;
@@ -2906,7 +2912,8 @@ begin
FRunning and FNetwork.Connected,
FRunning, FMuted, FCTun,
BtnNR.Tag, BtnNB.Tag, BtnSNB.Tag <> 0, BtnANF.Tag <> 0,
FCenterFreq, FFilter);
FCenterFreq, FFilter,
FVfoB, FActiveVfo);
end;
// ===========================================================================
@@ -4357,15 +4364,30 @@ begin
end;
procedure TMainForm.SyncWebFreq;
var BandIdx: Integer;
begin
FVfoA := FWebSyncFreq;
if not FCTun then FCenterFreq := FVfoA;
UpdateVfoDisplay;
if FWDSPReady then
// Веб шлёт "freq" для активного VFO
if FActiveVfo = 0 then
ApplyVfoA(Round(FWebSyncFreq))
else
begin
FDSPEngine.SetShift(FVfoA - FCenterFreq);
FVfoB := FWebSyncFreq;
FreqDispB.Frequency := Round(FVfoB);
FCenterFreq := FVfoB;
if FWDSPReady then FDSPEngine.SetShift(0.0);
if FRunning then
FNetwork.SetRunAndFreq(True, FCenterFreq, FCenterFreq, FDriveLevel);
BandIdx := FreqToBandIdx(FVfoB);
if (BandIdx >= 0) and (BandIdx <> FCurrentBand) then
begin
StyleButton(BtnBand[FCurrentBand], False);
FCurrentBand := BandIdx;
StyleButton(BtnBand[FCurrentBand], True);
end;
FRulerLastFreq := -1.0; FRulerLastVfo := -1.0;
DrawSpectrum; PbSpectrum.Invalidate;
if PbRuler <> nil then PbRuler.Invalidate;
UpdateVfoDisplay;
end;
end;
@@ -4682,6 +4704,57 @@ begin
BtnANFClick(BtnANF);
end;
// ── VFO-B freq (из веба) ─────────────────────────────────────────────────
procedure TMainForm.WebOnFreqB(Hz: Double);
begin
FWebSyncFreq := Hz;
FWebSyncM := SyncWebFreqB;
TThread.Synchronize(nil, FWebSyncM);
end;
procedure TMainForm.SyncWebFreqB;
var BandIdx: Integer;
begin
FVfoB := FWebSyncFreq;
FreqDispB.Frequency := Round(FVfoB);
if FActiveVfo = 1 then
begin
FCenterFreq := FVfoB;
if not FCTun then
if FWDSPReady then FDSPEngine.SetShift(0.0);
if FRunning then
FNetwork.SetRunAndFreq(True, FCenterFreq, FCenterFreq, FDriveLevel);
BandIdx := FreqToBandIdx(FVfoB);
if (BandIdx >= 0) and (BandIdx <> FCurrentBand) then
begin
StyleButton(BtnBand[FCurrentBand], False);
FCurrentBand := BandIdx;
StyleButton(BtnBand[FCurrentBand], True);
end;
FRulerLastFreq := -1.0; FRulerLastVfo := -1.0;
DrawSpectrum; PbSpectrum.Invalidate;
if PbRuler <> nil then PbRuler.Invalidate;
end;
UpdateVfoDisplay;
end;
// ── Активный VFO (из веба) ───────────────────────────────────────────────
procedure TMainForm.WebOnActiveVfo(Idx: Integer);
begin
FWebSyncInt := Idx;
FWebSyncM := SyncWebActiveVfo;
TThread.Synchronize(nil, FWebSyncM);
end;
procedure TMainForm.SyncWebActiveVfo;
begin
if (FWebSyncInt < 0) or (FWebSyncInt > 1) then Exit;
if FWebSyncInt = FActiveVfo then Exit;
ActivateVfo(FWebSyncInt);
end;
procedure TMainForm.TrkDriveChange(Sender: TObject);
begin
FDriveLevel := Round(TrkDrive.Position / 100.0 * 255);