fix(pluto): enable antenna switch for stock model

This commit is contained in:
2026-07-15 20:17:21 +03:00
parent 26ea96fdd2
commit a84de32294
2 changed files with 7 additions and 24 deletions
+5 -22
View File
@@ -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
+2 -2
View File
@@ -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