From e040c1b24ea77cacc4af33bf1e34e0aee6a93f27 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Mon, 13 Jul 2026 21:39:58 +0300 Subject: [PATCH] =?UTF-8?q?fix(pluto):=20TX-=D1=80=D0=B0=D0=B7=D1=8A=D1=91?= =?UTF-8?q?=D0=BC=20=E2=80=94=20=D0=BF=D0=BE=20=D0=B4=D0=B8=D0=B0=D0=BF?= =?UTF-8?q?=D0=B0=D0=B7=D0=BE=D0=BD=D1=83=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B8,=20=D0=B0=20=D0=BD=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D1=91=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ApplyAntPorts брал оба разъёма по центру приёма, поэтому при мультислайс-TX (или split на другой диапазон) передача могла уйти в разъём RX-диапазона. Теперь RX-разъём — по FCenterFreq, TX — по ActiveTXFreqHz (TX-слайс/TX-VFO); TX вне VU-плана падает обратно на диапазон приёма. Пересчёт добавлен в SetTxSlice, SetSplit и в SetMOX(True) как страховка перед выходом в эфир. Co-Authored-By: Claude Opus 4.8 --- RadioController.pas | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) 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;