mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
web: fix A=B/SWAP VFO ops, wire attenuator, TUN button, FNP filter overlay
- Add freq_a command: sets VFO A regardless of active VFO; fixes A=B and
SWAP when VFO B is active (prev. sent freq_b which overwrote wrong VFO)
- Add pend("freq") to B=A / A=B / SWAP to guard local display during round-trip
- RX step attenuator: HPSDRNetwork.SetStepAtten → bytes 1442/1443 in HP packet;
WebServer attn command; MainForm FAtten + SyncWebAttn; attSel.onchange in JS
- TUN mode: set_tun WebSocket command wired to ApplyTUN(); toneBtn toggles
with on/off highlight and pending protection; tuning field in state JSON
- FNP button opens semi-transparent filter overlay (10 buttons, 5×2 grid)
with mode-appropriate widths (SSB/CW/AM/FM); active filter highlighted;
cur.filter_bw updated immediately on click so passband redraws within 50ms
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+49
-1
@@ -197,6 +197,7 @@ type
|
||||
FHWPTTActive: Boolean; // True = hardware PTT нажата
|
||||
FMuted: Boolean;
|
||||
FVolume: Integer;
|
||||
FAtten: Integer; // RX step attenuator index: 0=0dB 1=10dB 2=20dB
|
||||
FLastSMeter: Double;
|
||||
FSMeterPeak: Double; // верхняя граница светлой зоны
|
||||
FSMeterMin: Double; // нижняя граница светлой зоны
|
||||
@@ -489,6 +490,9 @@ type
|
||||
procedure WebOnCenter(Hz: Double);
|
||||
procedure WebOnMOX(On_: Boolean);
|
||||
procedure WebOnDrive(V: Integer);
|
||||
procedure WebOnFreqA(Hz: Double);
|
||||
procedure WebOnAttn(Idx: Integer);
|
||||
procedure WebOnTun(On_: Boolean);
|
||||
// Synchronize-обёртки (выполняются в UI-потоке)
|
||||
procedure SyncWebFreq;
|
||||
procedure SyncWebMode;
|
||||
@@ -512,6 +516,9 @@ type
|
||||
procedure SyncWebCenter;
|
||||
procedure SyncWebMOX;
|
||||
procedure SyncWebDrive;
|
||||
procedure SyncWebFreqA;
|
||||
procedure SyncWebAttn;
|
||||
procedure SyncWebTun;
|
||||
// --- CAT callbacks -------------------------------------------------------
|
||||
function CATGetVfoA: Double;
|
||||
function CATGetVfoB: Double;
|
||||
@@ -1091,6 +1098,9 @@ begin
|
||||
FWebServer.OnCenter := WebOnCenter;
|
||||
FWebServer.OnMOX := WebOnMOX;
|
||||
FWebServer.OnDrive := WebOnDrive;
|
||||
FWebServer.OnFreqA := WebOnFreqA;
|
||||
FWebServer.OnAttn := WebOnAttn;
|
||||
FWebServer.OnTun := WebOnTun;
|
||||
FWebServer.Start;
|
||||
FillChar(FCATLastGlobal, SizeOf(FCATLastGlobal), 0);
|
||||
FCATLastGlobal.CATTcpPort := 19090;
|
||||
@@ -2765,7 +2775,8 @@ begin
|
||||
BtnNR.Tag, BtnNB.Tag, BtnSNB.Tag <> 0, BtnANF.Tag <> 0,
|
||||
FCenterFreq, FFilter,
|
||||
FVfoB, FActiveVfo,
|
||||
FTransmitting, TrkDrive.Position);
|
||||
FTransmitting, TrkDrive.Position,
|
||||
FAtten, FTuning);
|
||||
end;
|
||||
|
||||
// ===========================================================================
|
||||
@@ -5204,6 +5215,43 @@ begin
|
||||
TrkDrive.Position := FWebSyncInt;
|
||||
end;
|
||||
|
||||
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.WebOnAttn(Idx: Integer);
|
||||
begin
|
||||
FWebSyncInt := Idx;
|
||||
FWebSyncM := SyncWebAttn;
|
||||
TThread.Synchronize(nil, FWebSyncM);
|
||||
end;
|
||||
|
||||
procedure TMainForm.SyncWebAttn;
|
||||
begin
|
||||
FAtten := Max(0, Min(2, FWebSyncInt));
|
||||
FNetwork.SetStepAtten(FAtten * 10);
|
||||
end;
|
||||
|
||||
procedure TMainForm.WebOnTun(On_: Boolean);
|
||||
begin
|
||||
FWebSyncBool := On_;
|
||||
FWebSyncM := SyncWebTun;
|
||||
TThread.Synchronize(nil, FWebSyncM);
|
||||
end;
|
||||
|
||||
procedure TMainForm.SyncWebTun;
|
||||
begin
|
||||
ApplyTUN(FWebSyncBool);
|
||||
end;
|
||||
|
||||
procedure TMainForm.TrkDriveChange(Sender: TObject);
|
||||
begin
|
||||
FDriveLevel := CalcDriveByte;
|
||||
|
||||
Reference in New Issue
Block a user