mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
Phase 3 (batch 14): route VFO swap / A>B / B>A through controller
Filled the three VFO-transfer commands (the skeletons were also backwards: VfoACopyB stored A:=B etc). - VfoSwap: swaps A/B, retunes the receiver to the active VFO freq (center=freq, shift 0), HF band-detect, network push. Fires rfVfoA/rfVfoB/rfBand. UI handler is thin (+ ruler-cache invalidate, since a swap is a large freq jump). - VfoACopyB (A>B): delegates to SetVfoB(FVfoA) — store B:=A, retune when B active, render via rfVfoB. - VfoBCopyA (B>A): copies B->A; when A active goes through SetVfoA, else just fires rfVfoA. The desktop B>A handler still calls ApplyVfoA for the active-A case to preserve channel orchestration (auto-CTCSS / pre-channel drive), matching the original (A>B never had that path). Net simplification; builds clean, links. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
38947113f5
commit
a8a192a3a3
+31
-6
@@ -672,14 +672,39 @@ procedure TRadioController.SetCenter(Hz: Double);
|
||||
begin FCenterFreq := Hz; Changed(rfCenterFreq); { TODO wiring } end;
|
||||
|
||||
procedure TRadioController.VfoSwap;
|
||||
var T: Double;
|
||||
begin T := FVfoA; FVfoA := FVfoB; FVfoB := T; Changed(rfVfoA); Changed(rfVfoB); { TODO wiring } end;
|
||||
// Меняем VFO A/B местами и перестраиваем приёмник на новую частоту активного
|
||||
// VFO (центр=частота, shift 0 — CTUN-оффсет после свопа теряет смысл).
|
||||
var
|
||||
T: Double;
|
||||
ActiveFreq: Double;
|
||||
BandIdx: Integer;
|
||||
begin
|
||||
T := FVfoA; FVfoA := FVfoB; FVfoB := T;
|
||||
ActiveFreq := ActiveVfoHz;
|
||||
FCenterFreq := ActiveFreq;
|
||||
if FWDSPReady and Assigned(FDSPEngine) then FDSPEngine.SetShift(0.0);
|
||||
BandIdx := FreqToBandIdx(ActiveFreq);
|
||||
if (BandIdx >= 0) and (BandIdx <> FCurrentBand) then
|
||||
begin
|
||||
FCurrentBand := BandIdx;
|
||||
Changed(rfBand);
|
||||
end;
|
||||
PushNetworkState;
|
||||
Changed(rfVfoA);
|
||||
Changed(rfVfoB);
|
||||
end;
|
||||
|
||||
procedure TRadioController.VfoACopyB;
|
||||
begin FVfoA := FVfoB; Changed(rfVfoA); { TODO wiring } end;
|
||||
procedure TRadioController.VfoACopyB; // A>B: частота A копируется в B
|
||||
begin
|
||||
SetVfoB(FVfoA); // сохраняет B:=A, перестраивает если B активен, рендер rfVfoB
|
||||
end;
|
||||
|
||||
procedure TRadioController.VfoBCopyA;
|
||||
begin FVfoB := FVfoA; Changed(rfVfoB); { TODO wiring } end;
|
||||
procedure TRadioController.VfoBCopyA; // B>A: частота B копируется в A
|
||||
begin
|
||||
FVfoA := FVfoB;
|
||||
if FActiveVfo = 0 then SetVfoA(FVfoA) // A активен — перестраиваем приёмник
|
||||
else Changed(rfVfoA); // A неактивен — только рендер дисплея
|
||||
end;
|
||||
|
||||
procedure TRadioController.SetMode(M: Integer);
|
||||
begin
|
||||
|
||||
Reference in New Issue
Block a user