mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
Phase 3 (heavy prep): move XvtrTranslate/ActiveTXFreqHz into controller
Перенос частотных хелперов (общий блокер для Vfo/Mode/Band/CTun/TX/FM-Rpt) в TRadioController как чистых read-only функций над состоянием. Все константы (CFG_XVTR_COUNT, MODE_FM, RPT_MINUS/PLUS) уже доступны через Settings/WDSPEngine/FMRepeater в uses контроллера. MainForm.XvtrTranslate и MainForm.ActiveTXFreqHz стали тонкими обёртками-делегатами — ~40 мест вызова в UI/сетевом слое работают без изменений. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
fd145b28f6
commit
d895800f62
+4
-15
@@ -5767,14 +5767,8 @@ end;
|
|||||||
|
|
||||||
function TMainForm.ActiveTXFreqHz: Double;
|
function TMainForm.ActiveTXFreqHz: Double;
|
||||||
begin
|
begin
|
||||||
if FController.FSplitTxB then Result := FController.FVfoB
|
// Логика перенесена в контроллер; обёртка для существующих вызовов в UI.
|
||||||
else if FController.FActiveVfo = 0 then Result := FController.FVfoA
|
Result := FController.ActiveTXFreqHz;
|
||||||
else Result := FController.FVfoB;
|
|
||||||
if FController.FMode = MODE_FM then
|
|
||||||
case FController.FFMRptDir of
|
|
||||||
RPT_MINUS: Result := Result - FController.FFMRptOffsetHz;
|
|
||||||
RPT_PLUS: Result := Result + FController.FFMRptOffsetHz;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainForm.ApplyMOX(Active: Boolean);
|
procedure TMainForm.ApplyMOX(Active: Boolean);
|
||||||
@@ -6912,13 +6906,8 @@ end;
|
|||||||
// Если активный XVTR не задан — возвращает входную частоту без изменений.
|
// Если активный XVTR не задан — возвращает входную частоту без изменений.
|
||||||
function TMainForm.XvtrTranslate(VisibleHz: Double): Double;
|
function TMainForm.XvtrTranslate(VisibleHz: Double): Double;
|
||||||
begin
|
begin
|
||||||
Result := VisibleHz;
|
// Логика перенесена в контроллер; обёртка для существующих вызовов в UI.
|
||||||
if (FController.FCurrentXvtr < 0) or (FController.FCurrentXvtr >= CFG_XVTR_COUNT) then Exit;
|
Result := FController.XvtrTranslate(VisibleHz);
|
||||||
if not FController.FXvtrSettings.Entries[FController.FCurrentXvtr].Enabled then Exit;
|
|
||||||
// f_IF = f_visible - LOOffset + LOError
|
|
||||||
Result := VisibleHz
|
|
||||||
- FController.FXvtrSettings.Entries[FController.FCurrentXvtr].LOOffset
|
|
||||||
+ FController.FXvtrSettings.Entries[FController.FCurrentXvtr].LOError;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Передаёт XVTR-режим в сетевой слой. Вызывается при смене XVTR или его
|
// Передаёт XVTR-режим в сетевой слой. Вызывается при смене XVTR или его
|
||||||
|
|||||||
@@ -202,6 +202,14 @@ type
|
|||||||
// Снимок всего состояния (для синхронизации нового фронтенда).
|
// Снимок всего состояния (для синхронизации нового фронтенда).
|
||||||
function GetSnapshot: TRadioSnapshot;
|
function GetSnapshot: TRadioSnapshot;
|
||||||
|
|
||||||
|
// Частотные хелперы — чистые вычисления над состоянием, общие для всех
|
||||||
|
// фронтендов и сетевого слоя (Vfo/Mode/Band/CTun/TX/FM-Rpt).
|
||||||
|
// XvtrTranslate — переводит видимую частоту в частоту IF-тракта с учётом
|
||||||
|
// активного трансвертора (LOOffset/LOError).
|
||||||
|
// ActiveTXFreqHz — текущая TX-частота (split/active VFO + FM-репитер сдвиг).
|
||||||
|
function XvtrTranslate(VisibleHz: Double): Double;
|
||||||
|
function ActiveTXFreqHz: Double;
|
||||||
|
|
||||||
// ====================================================================
|
// ====================================================================
|
||||||
// КОМАНДЫ — единый API для GUI / Web / CAT / Arduino.
|
// КОМАНДЫ — единый API для GUI / Web / CAT / Arduino.
|
||||||
// Фаза 1: обновляют поле + шлют событие; логика движка — TODO-wiring.
|
// Фаза 1: обновляют поле + шлют событие; логика движка — TODO-wiring.
|
||||||
@@ -341,6 +349,29 @@ begin
|
|||||||
Result.PLLLock := FLastPLLLock;
|
Result.PLLLock := FLastPLLLock;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TRadioController.XvtrTranslate(VisibleHz: Double): Double;
|
||||||
|
begin
|
||||||
|
Result := VisibleHz;
|
||||||
|
if (FCurrentXvtr < 0) or (FCurrentXvtr >= CFG_XVTR_COUNT) then Exit;
|
||||||
|
if not FXvtrSettings.Entries[FCurrentXvtr].Enabled then Exit;
|
||||||
|
// f_IF = f_visible - LOOffset + LOError
|
||||||
|
Result := VisibleHz
|
||||||
|
- FXvtrSettings.Entries[FCurrentXvtr].LOOffset
|
||||||
|
+ FXvtrSettings.Entries[FCurrentXvtr].LOError;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TRadioController.ActiveTXFreqHz: Double;
|
||||||
|
begin
|
||||||
|
if FSplitTxB then Result := FVfoB
|
||||||
|
else if FActiveVfo = 0 then Result := FVfoA
|
||||||
|
else Result := FVfoB;
|
||||||
|
if FMode = MODE_FM then
|
||||||
|
case FFMRptDir of
|
||||||
|
RPT_MINUS: Result := Result - FFMRptOffsetHz;
|
||||||
|
RPT_PLUS: Result := Result + FFMRptOffsetHz;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
// Команды (Фаза 1 — каркас). Полная логика переносится из TMainForm.
|
// Команды (Фаза 1 — каркас). Полная логика переносится из TMainForm.
|
||||||
// =====================================================================
|
// =====================================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user