mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
fix(pluto): TX-разъём — по диапазону передачи, а не приёма
ApplyAntPorts брал оба разъёма по центру приёма, поэтому при мультислайс-TX (или split на другой диапазон) передача могла уйти в разъём RX-диапазона. Теперь RX-разъём — по FCenterFreq, TX — по ActiveTXFreqHz (TX-слайс/TX-VFO); TX вне VU-плана падает обратно на диапазон приёма. Пересчёт добавлен в SetTxSlice, SetSplit и в SetMOX(True) как страховка перед выходом в эфир. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+17
-7
@@ -1432,9 +1432,11 @@ end;
|
||||
procedure TRadioController.ApplyAntPorts;
|
||||
// Антенна — свойство диапазона (как RxAnt/TxAnt у Alex): при смене диапазона или
|
||||
// входе/выходе из трансвертера включаем разъёмы, выбранные для этого контекста.
|
||||
// RX-разъём берём по диапазону ПРИЁМА, TX — по диапазону ПЕРЕДАЧИ: с мультислайс-TX
|
||||
// (или split) передача может идти не на частоте центра приёма.
|
||||
var
|
||||
Rx, Tx: Byte;
|
||||
Bi: Integer;
|
||||
BiRx, BiTx: Integer;
|
||||
begin
|
||||
if not (Assigned(FNetwork) and FNetwork.Connected) then Exit;
|
||||
if not FNetwork.Caps.HasAntSwitch then Exit;
|
||||
@@ -1445,11 +1447,13 @@ begin
|
||||
end
|
||||
else
|
||||
begin
|
||||
// Диапазон — по ВИДИМОЙ частоте приёма (VU-план AD936x).
|
||||
Bi := FreqToBandIdx(FCenterFreq, IsPluto);
|
||||
if (Bi < 0) or (Bi >= CFG_BAND_COUNT) then Exit; // вне плана — не трогаем
|
||||
Rx := FAnt936x.RxAnt[Bi];
|
||||
Tx := FAnt936x.TxAnt[Bi];
|
||||
// Диапазоны — по ВИДИМЫМ частотам (VU-план AD936x).
|
||||
BiRx := FreqToBandIdx(FCenterFreq, IsPluto);
|
||||
if (BiRx < 0) or (BiRx >= CFG_BAND_COUNT) then Exit; // вне плана — не трогаем
|
||||
Rx := FAnt936x.RxAnt[BiRx];
|
||||
BiTx := FreqToBandIdx(ActiveTXFreqHz, IsPluto);
|
||||
if (BiTx < 0) or (BiTx >= CFG_BAND_COUNT) then BiTx := BiRx; // TX вне плана — как RX
|
||||
Tx := FAnt936x.TxAnt[BiTx];
|
||||
end;
|
||||
FNetwork.SetAntPorts(Rx, Tx);
|
||||
end;
|
||||
@@ -1860,6 +1864,7 @@ begin
|
||||
if FWDSPReady and Assigned(FDSPEngine) then
|
||||
FDSPEngine.SetTXMode(ActiveTXMode);
|
||||
FDriveLevel := CalcDriveByte; // калибровка драйва банда TX-слайса
|
||||
ApplyAntPorts; // AD936x: TX-разъём — по диапазону TX-слайса
|
||||
PushNetworkState; // TX-частота/Alex через ActiveTXFreqHz/TxBandIdx
|
||||
Changed(rfTransmitting); // UI: перерисовать TX-бейджи флагов/оверлей
|
||||
end;
|
||||
@@ -3698,7 +3703,11 @@ begin
|
||||
Exit;
|
||||
WasTransmitting := FTransmitting;
|
||||
FTransmitting := On_;
|
||||
if On_ then FDriveLevel := CalcDriveByte;
|
||||
if On_ then
|
||||
begin
|
||||
FDriveLevel := CalcDriveByte;
|
||||
ApplyAntPorts; // AD936x: страховка — верный разъём до выхода в эфир
|
||||
end;
|
||||
FDUCPendingCount := 0; // сброс TX DUC-очереди на смене TX-состояния
|
||||
// Сетевая PTT-последовательность TX-on: сначала реле (Alex bit27=1, drive) без
|
||||
// PTT, затем PTT=1 — переключаем реле раньше передачи.
|
||||
@@ -3869,6 +3878,7 @@ procedure TRadioController.SetSplit(TxOnB: Boolean);
|
||||
begin
|
||||
if FSplitTxB = TxOnB then Exit;
|
||||
FSplitTxB := TxOnB;
|
||||
ApplyAntPorts; // AD936x: TX-разъём — по диапазону нового TX-VFO
|
||||
PushNetworkState;
|
||||
Changed(rfActiveVfo);
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user