Save/restore CTun, AGC, FM step per XVTR slot; add FM step to web

- Add LastCTun, LastAGCMode, LastAGCTop to TXvtrEntry; SaveCurrentBand
  now captures all three in the XVTR branch; ActivateXvtrBand restores
  them on slot switch/startup (previously CTun was always reset to False
  and AGC was never saved/restored for XVTR)
- WebServer: expose fmstep_idx in state JSON so web clients sync the
  FM step from desktop state
- WebPageHtml: swap stepSel options to FM steps (6.25k/12.5k/20k/25k)
  when mode=FM, restore HF steps when leaving FM; syncs fmstep_idx
  from server on connect and mode change

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 22:27:14 +03:00
co-authored by Claude Sonnet 4.6
parent c4cd8afb06
commit a59501f2c4
4 changed files with 53 additions and 13 deletions
+9 -4
View File
@@ -212,6 +212,7 @@ type
FFilterIdx: Integer;
FVfoB: Double;
FActiveVfo: Integer; // 0=A, 1=B
FFMStepIdx: Integer;
FStateLock: TCriticalSection;
// ── Callbacks ──
@@ -304,6 +305,7 @@ type
property WebClientActive: Boolean read FWebClientActive;
property FreqMhzDigits: Integer read FFreqMhzDigits write FFreqMhzDigits;
property FMStepIdx: Integer read FFMStepIdx write FFMStepIdx;
property OnFreq: TWebCmdFreq read FOnFreq write FOnFreq;
property OnMode: TWebCmdMode read FOnMode write FOnMode;
@@ -425,8 +427,9 @@ begin
FClientLock := TCriticalSection.Create;
FStateLock := TCriticalSection.Create;
// Начальные значения состояния
FFreq := 14200000;
FMode := 1;
FFreq := 14200000;
FMode := 1;
FFMStepIdx := 3; // 25 kHz default
FFilterBW:= 2700;
FAGCMode := 1;
FAGCTop := 90;
@@ -1296,7 +1299,8 @@ begin
'"nr_mode":%d,"nr":%s,"nb_mode":%d,"nb":%s,"snb":%s,"anf":%s,"connected":%s,' +
'"transmitting":%s,"drive":%d,"attn_idx":%d,"tuning":%s,"dup":%s,' +
'"fwd_w":%.1f,"swr":%.2f,"pa_max_power":%.0f,' +
'"xvtr_current":%d,"xvtr_bands":%s,"freq_mhz_digits":%d}',
'"xvtr_current":%d,"xvtr_bands":%s,"freq_mhz_digits":%d,' +
'"fmstep_idx":%d}',
[FFreq, FVfoB, FActiveVfo,
FMode, MODE_N[FMode mod 8],
FFilterIdx, FFilterBW,
@@ -1321,7 +1325,8 @@ begin
BoolToStr(FTuning, 'true', 'false'),
BoolToStr(FDuplex, 'true', 'false'),
FFwdW, FSWR, FPAMaxPower,
FCurrentXvtr, XvtrJson, FFreqMhzDigits
FCurrentXvtr, XvtrJson, FFreqMhzDigits,
FFMStepIdx
], FS);
finally
FStateLock.Leave;