mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
Phase 3 (batch 21): route web Mode/Filter through controller commands
SyncWebMode now delegates to FController.SetMode (default filter + DSP +
band cache; render via rfMode), and SyncWebFilter to FController.SetFilterBW,
whose stub is filled in: it applies the requested bandwidth and highlights
the nearest preset (render via rfFilter). The JS client only ever sends a
bandwidth in Hz ({cmd:"filter",bw:N}), so the old negative-index branch
was dead code and is removed. Both web handlers now use the same controller
commands as the desktop; the duplicated inline mode/filter logic is gone.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
c7d93c2e46
commit
33c433ce5e
+4
-60
@@ -5628,16 +5628,9 @@ begin
|
||||
end;
|
||||
|
||||
procedure TMainForm.SyncWebMode;
|
||||
var i: Integer;
|
||||
begin
|
||||
if (FWebSyncInt < 0) or (FWebSyncInt >= MODE_COUNT) then Exit;
|
||||
FController.FMode := FWebSyncInt;
|
||||
for i := 0 to MODE_COUNT - 1 do StyleButton(BtnMode[i], i = FController.FMode);
|
||||
if FController.FWDSPReady then FController.FDSPEngine.SetMode(FController.FMode);
|
||||
UpdateFilterButtons;
|
||||
FController.ApplyModeFilter;
|
||||
SyncSpecViewFreq;
|
||||
FController.FBandCache[FController.FCurrentBand].Mode := FController.FMode;
|
||||
FController.SetMode(FWebSyncInt); // дефолт фильтра + DSP + cache; рендер через rfMode
|
||||
end;
|
||||
|
||||
procedure TMainForm.WebOnFilter(BW: Integer);
|
||||
@@ -5648,59 +5641,10 @@ begin
|
||||
end;
|
||||
|
||||
procedure TMainForm.SyncWebFilter;
|
||||
var
|
||||
best, dist, i, j: Integer;
|
||||
BW_arr: array[0..FILT_COUNT-1] of Integer;
|
||||
Idx: Integer;
|
||||
begin
|
||||
// Negative value = -(idx+1) means filter index was passed directly
|
||||
if FWebSyncInt < 0 then
|
||||
begin
|
||||
Idx := (-FWebSyncInt) - 1;
|
||||
if (Idx >= 0) and (Idx < FILT_COUNT) then
|
||||
begin
|
||||
FController.FFilter := Idx;
|
||||
case FController.FMode of
|
||||
0,1: FController.FFilterBW := FILT_SSB_BW[Idx];
|
||||
2: FController.FFilterBW := FILT_DSB_BW[Idx];
|
||||
3,4: FController.FFilterBW := FILT_CW_BW[Idx];
|
||||
5: if Idx < FILT_FM_COUNT then
|
||||
begin
|
||||
FController.FFilterBW := FILT_FM_BW[Idx];
|
||||
FController.FFMDeviation := FILT_FM_DEV[Idx];
|
||||
end;
|
||||
else FController.FFilterBW := FILT_AM_BW[Idx];
|
||||
end;
|
||||
for j := 0 to FILT_COUNT-1 do StyleButton(BtnFilter[j], j = FController.FFilter);
|
||||
FController.ApplyModeFilter;
|
||||
SyncSpecViewFreq;
|
||||
FController.FBandCache[FController.FCurrentBand].FilterBW := FController.FFilterBW;
|
||||
end;
|
||||
Exit;
|
||||
end;
|
||||
// Positive value = bandwidth in Hz, find closest filter
|
||||
FController.FFilterBW := FWebSyncInt;
|
||||
for i := 0 to FILT_COUNT-1 do BW_arr[i] := MaxInt;
|
||||
case FController.FMode of
|
||||
0,1: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_SSB_BW[i];
|
||||
2: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_DSB_BW[i];
|
||||
3,4: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_CW_BW[i];
|
||||
5: for i := 0 to FILT_FM_COUNT-1 do BW_arr[i] := FILT_FM_BW[i];
|
||||
else for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_AM_BW[i];
|
||||
end;
|
||||
best := 0; dist := MaxInt;
|
||||
for i := 0 to FILT_COUNT-1 do
|
||||
if Abs(BW_arr[i] - FWebSyncInt) < dist then
|
||||
begin
|
||||
dist := Abs(BW_arr[i] - FWebSyncInt);
|
||||
best := i;
|
||||
end;
|
||||
FController.FFilter := best;
|
||||
if FController.FMode = 5 then FController.FFMDeviation := FILT_FM_DEV[best];
|
||||
for j := 0 to FILT_COUNT-1 do StyleButton(BtnFilter[j], j = FController.FFilter);
|
||||
FController.ApplyModeFilter;
|
||||
SyncSpecViewFreq;
|
||||
FController.FBandCache[FController.FCurrentBand].FilterBW := FController.FFilterBW;
|
||||
// Web-клиент шлёт полосу в Гц (кнопки панели фильтров = пресетные значения);
|
||||
// команда применяет её и подсвечивает ближайший пресет (рендер — rfFilter).
|
||||
FController.SetFilterBW(FWebSyncInt);
|
||||
end;
|
||||
|
||||
procedure TMainForm.WebOnAGC(Mode: Integer);
|
||||
|
||||
+28
-1
@@ -981,7 +981,34 @@ begin
|
||||
end;
|
||||
|
||||
procedure TRadioController.SetFilterBW(BWHz: Integer);
|
||||
begin FFilterBW := BWHz; Changed(rfFilterBW); { TODO wiring } end;
|
||||
// Непрерывная полоса (web-ползунок): применяем запрошенный BW как есть, а
|
||||
// FFilter подбираем ближайшим пресетом — только для подсветки кнопки.
|
||||
var
|
||||
BW_arr: array[0..FILT_COUNT-1] of Integer;
|
||||
best, dist, i: Integer;
|
||||
begin
|
||||
FFilterBW := BWHz;
|
||||
for i := 0 to FILT_COUNT-1 do BW_arr[i] := MaxInt;
|
||||
case FMode of
|
||||
0, 1: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_SSB_BW[i];
|
||||
2: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_DSB_BW[i];
|
||||
3, 4: for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_CW_BW[i];
|
||||
MODE_FM: for i := 0 to FILT_FM_COUNT-1 do BW_arr[i] := FILT_FM_BW[i];
|
||||
else for i := 0 to FILT_COUNT-1 do BW_arr[i] := FILT_AM_BW[i];
|
||||
end;
|
||||
best := 0; dist := MaxInt;
|
||||
for i := 0 to FILT_COUNT-1 do
|
||||
if Abs(BW_arr[i] - BWHz) < dist then
|
||||
begin
|
||||
dist := Abs(BW_arr[i] - BWHz);
|
||||
best := i;
|
||||
end;
|
||||
FFilter := best;
|
||||
if FMode = MODE_FM then FFMDeviation := FILT_FM_DEV[best];
|
||||
FBandCache[FCurrentBand].FilterBW := FFilterBW;
|
||||
ApplyModeFilter;
|
||||
Changed(rfFilter);
|
||||
end;
|
||||
|
||||
procedure TRadioController.ApplyAGCToEngine;
|
||||
const
|
||||
|
||||
Reference in New Issue
Block a user