mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
Phase 5: extract channel memory logic into ChannelController.pas
Channels are recall-of-saved-config — a client of the radio core, not part of DSP/network. Move ApplyChannel/CheckChannelActive + active-channel state (FActiveChannelIdx, FPreChannelPower) out of MainForm into TChannelController, which orchestrates controller commands and emits OnActiveChanged for the Channel-button render. Removes the last UI-held state blocking headless mode. Also completes TRadioController.SetDrive (was a skeleton): clamp + CalcDriveByte + SetDriveLevel + PushNetworkState + Changed(rfDrive), with an rfDrive render case; routes slider/web/channel drive through it. Adds SetCurrentBandIdx for the lightweight HF band switch. Behavior note: channel recall now applies the mode-default filter via SetMode (was: kept current filter — a latent quirk that left FM on an SSB bandwidth). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
06fd730ff4
commit
03f7359184
+21
-6
@@ -372,6 +372,7 @@ type
|
||||
procedure BandUp;
|
||||
procedure BandDown;
|
||||
procedure SetXvtrBand(Idx: Integer); // -1 = выход в HF
|
||||
procedure SetCurrentBandIdx(NewBand: Integer); // лёгкая смена HF-диапазона (band+drive+рендер), без restore
|
||||
procedure SetSpan(Hz: Integer);
|
||||
procedure SetSampleRate(Hz: Integer);
|
||||
|
||||
@@ -401,8 +402,8 @@ type
|
||||
procedure SetFMRptOffset(Hz: Double); // сдвиг репитера; применяет, если RPT вкл
|
||||
procedure UpdateRptAutoState; // авто-MINUS для 2 м под FVfoA
|
||||
|
||||
// Каналы
|
||||
procedure ApplyChannel(Idx: Integer);
|
||||
// Каналы: применение/деактивация каналов вынесено в TChannelController
|
||||
// (отдельный юнит-адаптер поверх контроллера), оркеструет команды ниже.
|
||||
|
||||
// Жизненный цикл движка / устройства
|
||||
procedure StartStop;
|
||||
@@ -1431,7 +1432,14 @@ procedure TRadioController.ToggleMute;
|
||||
begin SetMute(not FMuted); end;
|
||||
|
||||
procedure TRadioController.SetDrive(V: Integer);
|
||||
begin FDrivePercent := V; Changed(rfDrive); { TODO wiring: CalcDriveByte + WDSP } end;
|
||||
begin
|
||||
if V < 0 then V := 0 else if V > 100 then V := 100;
|
||||
FDrivePercent := V;
|
||||
FDriveLevel := CalcDriveByte;
|
||||
if FWDSPReady and Assigned(FDSPEngine) then FDSPEngine.SetDriveLevel(FDrivePercent / 100.0);
|
||||
PushNetworkState; // протолкнуть новый drive в радио (если подключено+Running)
|
||||
Changed(rfDrive);
|
||||
end;
|
||||
|
||||
procedure TRadioController.DriveBy(Delta: Integer);
|
||||
begin SetDrive(FDrivePercent + Delta); end;
|
||||
@@ -1550,6 +1558,16 @@ begin
|
||||
else DeactivateXvtr;
|
||||
end;
|
||||
|
||||
procedure TRadioController.SetCurrentBandIdx(NewBand: Integer);
|
||||
// Лёгкая смена HF-диапазона без полного restore: фиксируем индекс диапазона
|
||||
// (для drive-кал и подсветки кнопок) и пересчитываем drive-байт. Используется
|
||||
// канальным адаптером при переходе канала на другой HF-диапазон.
|
||||
begin
|
||||
FCurrentBand := NewBand;
|
||||
FDriveLevel := CalcDriveByte;
|
||||
Changed(rfBand);
|
||||
end;
|
||||
|
||||
procedure TRadioController.SetSpan(Hz: Integer);
|
||||
begin FSpanHz := Hz; Changed(rfSpan); { TODO wiring } end;
|
||||
|
||||
@@ -1946,9 +1964,6 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TRadioController.ApplyChannel(Idx: Integer);
|
||||
begin Changed(rfChannel); { TODO wiring } end;
|
||||
|
||||
procedure TRadioController.StartStop;
|
||||
begin SetRun(not FRunning); end;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user