diff --git a/RadioController.pas b/RadioController.pas index edd61f6..d38b01e 100644 --- a/RadioController.pas +++ b/RadioController.pas @@ -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;