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
+20 -8
View File
@@ -1030,6 +1030,9 @@ begin
FXvtrSettings.Entries[FCurrentXvtr].LastCTCSSToneIdx := FFMCTCSSToneIdx;
FXvtrSettings.Entries[FCurrentXvtr].LastFMStepOn := FFMStepOn;
FXvtrSettings.Entries[FCurrentXvtr].LastFMStepIdx := FFMStepIdx;
FXvtrSettings.Entries[FCurrentXvtr].LastCTun := FCTun;
FXvtrSettings.Entries[FCurrentXvtr].LastAGCMode := FAGCMode;
FXvtrSettings.Entries[FCurrentXvtr].LastAGCTop := FAGCTop;
end;
FSettings.SaveXvtr(FDevMAC, FXvtrSettings);
Exit;
@@ -4801,6 +4804,7 @@ begin
FBtnFMSteps[OldIdx].Active := False;
if FBtnFMSteps[Idx] <> nil then
FBtnFMSteps[Idx].Active := True;
if FWebServer <> nil then FWebServer.FMStepIdx := Idx;
end;
procedure TMainForm.BtnFMStepClick(Sender: TObject);
@@ -6243,17 +6247,25 @@ begin
FFMStepOn := E.LastFMStepOn;
SetFMStep(E.LastFMStepIdx);
if BtnFMStep <> nil then StyleButton(BtnFMStep, FFMStepOn);
// VFO на видимую частоту; FCenterFreq тоже visible (как и для HF — DDC переход
// в IF происходит только в момент UpdateState/SetRunAndFreq через XvtrTranslate).
// AGC
FAGCMode := E.LastAGCMode;
FAGCTop := E.LastAGCTop;
for i := 0 to 4 do StyleButton(BtnAGCMode[i], i = FAGCMode);
TrkAGC.Position := FAGCTop;
LblAGCTop.Caption := Format('%ddB', [FAGCTop]);
if FWDSPReady then
begin
FDSPEngine.SetAGCTop(FAGCTop);
FDSPEngine.SetAGC(TWDSPAGCMode(FAGCMode), 50.0);
end;
FSpecView.AGCTop := FAGCTop;
// CTUN
FCTun := E.LastCTun;
StyleButton(BtnCTun, FCTun);
// VFO на видимую частоту; FCenterFreq тоже visible
FVfoA := Vis;
FCenterFreq := Vis;
FreqDispA.Frequency := Round(FVfoA);
// Сбросить CTUN — не имеет смысла в начальном состоянии XVTR-band
if FCTun then
begin
FCTun := False;
StyleButton(BtnCTun, False);
end;
if FWDSPReady then FDSPEngine.SetShift(0.0);
// Применяем драйв (если есть кастомный TX power для этого XVTR)
// Сделано на стороне ActiveTXFreqHz / TX path — здесь только обновляем дисплей.