mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
feat(pluto): выбор антенного разъёма RX/TX на диапазон (LibreSDR/AntSDR)
Второй разъём у AD936x-плат — это второй КАНАЛ чипа (не порт B первого), и в 1R1T-образе он выбирается мультиплексором AD9361: debug-параметры adi,1rx-1tx-mode-use-rx-num/-tx-num + биты RX1/RX2, TX1/TX2 регистров 0x3/0x2 (как switch_rfinput.sh/switch_rfoutput.sh прошивки). rf_port_select тут ни при чём — прошивка его к тому же блокирует. - IIOBindings: debug-атрибуты + прямой доступ к регистрам. - PlutoBackend: детект второго разъёма (2R2T-каналы либо мультиплексор + модель платы), SetAntPorts(RxPort,TxPort), ApplyRxMux/ApplyTxMux; Caps.HasAntSwitch. ⚠ApplyGain(Force): драйвер пропускает запись gain_control_mode, если считает режим неизменным, — а у нового канала AGC-регистры не запрограммированы (в железе крутится auto-AGC, hardwaregain отвергается EOPNOTSUPP). Форсируем перепрог через другой режим после смены разъёма и после ad9361_set_bb_rate. - RadioBackend: TBackendCaps.HasAntSwitch + virtual SetAntPorts (HPSDR — no-op, там антеннами рулит Alex). - Settings: секция ant936x (разъём RX/TX на диапазон и на слот трансвертера); hw-AGC (режим + manual gain) переехал в TBandSettings/TXvtrEntry — теперь он свой на каждом диапазоне и трансвертере. - RadioController: FAnt936x + ApplyAntPorts (RestoreBand/ActivateXvtr/ StartRunning); ApplyBandDSP восстанавливает hw-AGC диапазона. - SettingsForm: вкладка Antenna — Alex-таблица (openHPSDR) либо таблица разъёмов AD936x по диапазонам/трансвертерам. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -72,6 +72,23 @@ var
|
||||
iio_channel_attr_write_double: function(chn: Piio_channel; attr: PAnsiChar;
|
||||
val: cdouble): cint; cdecl;
|
||||
|
||||
// ---- Debug-атрибуты устройства (debugfs) ----
|
||||
// Нужны для выбора антенного разъёма у AD936x в режиме 1R1T:
|
||||
// 'adi,1rx-1tx-mode-use-rx-num'/'-tx-num' (какой физический канал кормит тракт)
|
||||
// + 'initialize' (драйвер заново прогоняет ad9361_setup из pdata).
|
||||
iio_device_debug_attr_read: function(dev: Piio_device; attr: PAnsiChar;
|
||||
dst: PAnsiChar; len: csize_t): ptrint; cdecl;
|
||||
iio_device_debug_attr_write: function(dev: Piio_device; attr: PAnsiChar;
|
||||
src: PAnsiChar): ptrint; cdecl;
|
||||
iio_device_debug_attr_write_longlong: function(dev: Piio_device; attr: PAnsiChar;
|
||||
val: clonglong): cint; cdecl;
|
||||
// Прямой доступ к регистрам (debugfs direct_reg_access) — быстрое переключение
|
||||
// антенного мультиплексора AD9361 (биты RX1/RX2 и TX1/TX2 регистров 0x3/0x2).
|
||||
iio_device_reg_read: function(dev: Piio_device; address: cuint32;
|
||||
out value: cuint32): cint; cdecl;
|
||||
iio_device_reg_write: function(dev: Piio_device; address: cuint32;
|
||||
value: cuint32): cint; cdecl;
|
||||
|
||||
// ---- Буферы (RX refill / TX push) ----
|
||||
iio_device_create_buffer: function(dev: Piio_device; samples_count: csize_t;
|
||||
cyclic: ByteBool): Piio_buffer; cdecl;
|
||||
@@ -168,6 +185,11 @@ begin
|
||||
iio_channel_attr_write := Sym('iio_channel_attr_write');
|
||||
iio_channel_attr_write_bool := Sym('iio_channel_attr_write_bool');
|
||||
iio_channel_attr_write_double := Sym('iio_channel_attr_write_double');
|
||||
iio_device_debug_attr_read := Sym('iio_device_debug_attr_read');
|
||||
iio_device_debug_attr_write := Sym('iio_device_debug_attr_write');
|
||||
iio_device_debug_attr_write_longlong := Sym('iio_device_debug_attr_write_longlong');
|
||||
iio_device_reg_read := Sym('iio_device_reg_read');
|
||||
iio_device_reg_write := Sym('iio_device_reg_write');
|
||||
iio_device_create_buffer := Sym('iio_device_create_buffer');
|
||||
iio_buffer_destroy := Sym('iio_buffer_destroy');
|
||||
iio_buffer_cancel := Sym('iio_buffer_cancel');
|
||||
|
||||
Reference in New Issue
Block a user