From a84de322946e5fde3c64bd2f0ae56858882e457d Mon Sep 17 00:00:00 2001 From: Vladimir Date: Wed, 15 Jul 2026 20:17:21 +0300 Subject: [PATCH] fix(pluto): enable antenna switch for stock model --- PlutoBackend.pas | 27 +++++---------------------- SettingsForm.pas | 4 ++-- 2 files changed, 7 insertions(+), 24 deletions(-) diff --git a/PlutoBackend.pas b/PlutoBackend.pas index 4e7d1fb..8e65373 100644 --- a/PlutoBackend.pas +++ b/PlutoBackend.pas @@ -201,8 +201,7 @@ const TX_FIR_CUT = 40000; // частота среза анти-имидж ФНЧ, Гц (покрывает SSB/NFM/AM/data) PLUTO_TX_OFF = -89.75; // макс. аттенюация AD9361 — TX практически выключен -// Детект второго антенного входа (тела ниже — нужны до Connect). -function BoardHasSecondRxPort(const Model: string): Boolean; forward; +// Детект доступности антенного мультиплексора (тело ниже — нужно до Connect). function DebugAttrExists(Dev: Piio_device; const Attr: string): Boolean; forward; type @@ -614,10 +613,10 @@ begin // сохранёнки/фолбэка ProbeURI ('AD936x SDR') и не содержать имени платы. PV := iio_context_get_attr_value(FCtx, 'hw_model'); if PV <> nil then FDevice.Model := string(PV); - // 1R1T-образ: RX-мультиплексор AD9361. Гейт по МОДЕЛИ — у стокового Pluto - // второй вход никуда не разведён (кремний двухканальный, а SMA один), так что - // селектор там показывать нельзя: он дал бы «мёртвую» антенну. - FRxMuxAvail := (not FRx2Avail) and BoardHasSecondRxPort(FDevice.Model) and + // 1R1T-образ: RX/TX-мультиплексор AD9361. Определяем по реально + // доступным debug-атрибутам, а не по hw_model: у обычного Pluto второй + // канал могли вывести аппаратно, не меняя строку модели. + FRxMuxAvail := (not FRx2Avail) and Assigned(iio_device_debug_attr_write) and DebugAttrExists(FPhy, 'adi,1rx-1tx-mode-use-rx-num') and DebugAttrExists(FPhy, 'adi,1rx-1tx-mode-use-tx-num') and @@ -759,22 +758,6 @@ begin for k := 0 to TX_FIR_TAPS - 1 do begin FTxDlI[k] := 0; FTxDlQ[k] := 0; end; end; -function BoardHasSecondRxPort(const Model: string): Boolean; -// Есть ли у платы физический разъём RX2. Кремний AD9361/AD9363 двухканальный на -// ЛЮБОЙ плате, включая стоковый Pluto, — но у Pluto второй канал никуда не выведен, -// поэтому переключать на него нельзя (антенны там нет). Список плат с двумя RX SMA. -const - BOARDS: array[0..4] of string = ('libresdr', 'antsdr', 'pluto+', 'plutoplus', 'e200'); -var - M: string; - i: Integer; -begin - Result := False; - M := LowerCase(StringReplace(Model, ' ', '', [rfReplaceAll])); - for i := Low(BOARDS) to High(BOARDS) do - if Pos(BOARDS[i], M) > 0 then Exit(True); -end; - function DebugAttrExists(Dev: Piio_device; const Attr: string): Boolean; var Buf: array[0..63] of AnsiChar; begin diff --git a/SettingsForm.pas b/SettingsForm.pas index 96efc89..7cfc762 100644 --- a/SettingsForm.pas +++ b/SettingsForm.pas @@ -3263,8 +3263,8 @@ end; procedure TSettingsForm.SetAntennaBackend(IsAD936x, HasAntSwitch: Boolean); // Переключает вкладку Antenna: Alex-таблица (openHPSDR) либо таблица разъёмов -// AD936x. HasAntSwitch=False (стоковый Pluto, один разъём) — Alex-таблица тоже -// не нужна: показываем пустую вкладку с поясняющим подзаголовком. +// AD936x. HasAntSwitch=False (прошивка не даёт доступа к мультиплексору) — +// Alex-таблица тоже не нужна: показываем пустую вкладку с поясняющим подзаголовком. begin FLoading := True; try