mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
feat: web RF-AGC + QO-100 RX MUTE controls (Pluto)
Прокинул в web-интерфейс управление, которого там не хватало (раньше только отображение): - RF-AGC (Pluto hw-gain): дропдаун режима FAST/SLOW/HYB/MAN + слайдер GAIN 0–73 дБ (активен только в MAN, драг переводит в manual). Виден по BackendCaps.HasHWGain (= Pluto подключён). Команды set_rx_gain_mode / set_rx_gain → SetRxGainMode / SetRxGain. - RX MUTE (QO-100 self-monitor): toggle-кнопка рядом с BCN, видна по InQO100, подсветка по состоянию. Команда set_rx_mute → SetRxMuteOnTx. Гейтинг зеркалит десктоп. Работает в GUI-web-сервере и headless-демоне. Проверено на железе пользователем. WebServer: команды + state-поля (rf_agc_visible/rx_gain_mode/rx_gain_db, rx_mute_visible/rx_mute_on) + SetRxGainStatus/SetRxMuteStatus. WebAdapter: колбэки OnRxGain*/OnRxMute (Invoke на поток контроллера) + публикация в PushState. MainForm + ewsdrd.lpr: привязка колбэков. WebPageHtml: виджеты, JS-обработчики, updRfAgc/updRxMute, PEND_MAP. Также актуализирован doc/PLUTO_INTEGRATION_PLAN.md: TX-тракт и режим QO-100 помечены проверенными на железе; раскрыт TODO «XO ppm-калибровка» (ручной TxLOOffset как текущий обходной путь, xo_correction/GPSDO как постоянное решение). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -260,8 +260,12 @@ end;
|
||||
|
||||
- ✅ RX gain: блок `RF AGC` (десктоп) — кнопки FAST/SLOW/HYB/MAN (4 режима AD9361,
|
||||
подтверждены на железе `gain_control_mode_available`) + слайдер manual 0–73 дБ при
|
||||
`Caps.HasHWGain`; персист per-device. WDSP AGC поверх. TODO: проброс RF-AGC в web
|
||||
(сейчас в web только отображение, без управления).
|
||||
`Caps.HasHWGain`; персист per-device. WDSP AGC поверх.
|
||||
- ✅ **RF-AGC в web** (управление): дропдаун режима RFagc-F/S/H/M + слайдер GAIN
|
||||
0–73 дБ (активен только в MAN), виден при `BackendCaps.HasHWGain` (Pluto подключён).
|
||||
Команды `set_rx_gain_mode`/`set_rx_gain` → `SetRxGainMode`/`SetRxGain`; state-поля
|
||||
`rf_agc_visible`/`rx_gain_mode`/`rx_gain_db`. GUI-web-сервер + headless-демон. Собрано,
|
||||
live-проверка на железе за пользователем.
|
||||
- Телеметрия: S-meter (WDSP) — для обоих. fwd/SWR/supply/PLL/overload — скрыть при
|
||||
`not Caps.HasPA`. ✅ RSSI/температура Pluto: `ReadTelemetry` (backend) →
|
||||
`ServicePlutoTelemetry` (контроллер, опрос ~2 Гц с фильтром выбросов) → поле 3
|
||||
@@ -309,7 +313,12 @@ end;
|
||||
- ✅ RX gain / hw-AGC, транспорт (USB/IP), persist per-device по synthetic-MAC.
|
||||
- ✅ Имя платы (Pluto/LibreSDR + serial) и телеметрия в статус-бар: RSSI + **две
|
||||
температуры** (трансивер AD9361 + Zynq SoC `xadc`, формат `Temp 37/53C`).
|
||||
- TODO: XO ppm-калибровка, buffer/timeout-контролы.
|
||||
- TODO: **XO ppm-калибровка** — корень частотной ошибки опорника Pluto. Сейчас
|
||||
обходится вручную через `TxLOOffset` QO-100-слота (подстройка под фактический
|
||||
uplink, см. Фаза 5). Правильный фикс — `xo_correction` AD9361 (правит RX **и** TX
|
||||
в ppm на всех частотах разом) или внешний 40 МГц GPSDO-реф (золотой стандарт для
|
||||
QO-100). На 2.4 ГГц 1 ppm ≈ 2.4 кГц, поэтому TX без GPSDO плывёт с прогревом.
|
||||
- TODO: buffer/timeout-контролы.
|
||||
|
||||
**Фаза 4 — TX-тракт Pluto** ✅
|
||||
- ✅ `SendDUCIQ` 24→16 + апсемпл 192k→device-rate + пейсинг (FIFO + push-поток, §4.6).
|
||||
@@ -319,9 +328,10 @@ end;
|
||||
- ✅ Управление мощностью через TX-аттенюацию (ADI-модель), маппинг **power-linear**
|
||||
+ полная цифра WDSP (§4.8). Без PA → нет drive-байта/SWR/Alex/keyer.
|
||||
- ✅ **TX LO powerdown по PTT** (§4.8) — нет утечки несущей TX в RX-спектре в простое.
|
||||
- TODO: проверка на железе на rate ≥1536k (ориентация SSB по Q-инверсии, уровни);
|
||||
опц. headroom −6 дБ для FM (full-scale const-envelope → нелинейность ЦАП); опц.
|
||||
зануление IQ на приёме. Опц. поддержка F5OEO-прошивки (PTT внешнего PA через
|
||||
- ✅ **Проверено на железе** (передача QO-100 через спутник, downlink виден в
|
||||
full-duplex self-monitor; SSB-ориентация и уровни в норме).
|
||||
- TODO: опц. headroom −6 дБ для FM (full-scale const-envelope → нелинейность ЦАП);
|
||||
опц. зануление IQ на приёме. Опц. поддержка F5OEO-прошивки (PTT внешнего PA через
|
||||
`hardwaregain=−40`) — отложено, нужно только под конкретное железо.
|
||||
|
||||
**Фаза 5 — Режим QO-100** ✅
|
||||
@@ -342,7 +352,9 @@ end;
|
||||
глушится на TX, как раньше); OFF → RX-аудио идёт на колонки и во время TX (свой
|
||||
downlink через транспондер, ~250 мс). Реализация: гейт `WDSPEngine` (`not FTXActive
|
||||
or (FKeepRXDuringTX and FMonitorRXDuringTX)`) + флаг `FRxMuteOnTx` в контроллере,
|
||||
персист в глобале (`rx_mute_on_tx`). Web — не сделано (пока вне области).
|
||||
персист в глобале (`rx_mute_on_tx`). ✅ **В web**: toggle-кнопка `RX MUTE` рядом с
|
||||
BCN, видна по `InQO100`, подсветка по `rx_mute_on`; команда `set_rx_mute` →
|
||||
`SetRxMuteOnTx`. GUI-web-сервер + headless-демон.
|
||||
- ✅ **Bandplan-оверлей NB-транспондера** (`BandPlanOverlay.pas`): полоска внизу
|
||||
спектра (над ruler) с сегментами CW ONLY / NB DIGI / DIGI / SSB / MIXED MODES +
|
||||
маяки CW/PSK/EXP. Модель `VfoOverlay` (кэш-битмап + const-alpha), CPU и GL, виден
|
||||
@@ -351,7 +363,10 @@ end;
|
||||
* **Индикатор «не громче маяка»** — сравнение уровня своего downlink с маяком
|
||||
(этикет QO-100); амплитуда маяка уже известна декодеру.
|
||||
* RIT/XIT-клариффайер — опц., на геостационаре нужен редко.
|
||||
- TODO: проверка на железе.
|
||||
- ✅ **Проверено на железе** (QSO через QO-100: TX uplink 2400 + RX downlink 739.5 МГц,
|
||||
full-duplex self-monitor). Нюанс калибровки: `TxLOOffset` пришлось подстроить руками
|
||||
под фактический uplink — это ошибка опорника Pluto (TCXO), а не геометрия (геом.
|
||||
offset точно 8089.5 МГц). Постоянное решение — XO ppm / GPSDO, см. Фаза 3 TODO.
|
||||
- ОТВЕРГНУТО: TX-маркер на RX-спектре в DUP — в обычной работе RX=TX (один VFO),
|
||||
маркер ложится на RX-курсор, информации не даёт; полезен только в split (редко).
|
||||
|
||||
@@ -359,8 +374,8 @@ end;
|
||||
- ✅ Web/CAT-фронтенды (команды уже агностичны) + гейтинг полей; демон `ewsdrd.lpr`
|
||||
(discovery/connect Pluto headless, beacon-lock @10 Гц); кросс-платформенная сборка
|
||||
с/без libiio.
|
||||
- TODO: проброс в web того, чего там ещё нет — RF-AGC (gain/режимы) и QO-100
|
||||
`RX MUTE` (self-monitor). Доки актуализируются по ходу.
|
||||
- ✅ Проброс в web RF-AGC (gain/режимы) и QO-100 `RX MUTE` (self-monitor) — см.
|
||||
§4.7 / Фаза 5. Доки актуализируются по ходу.
|
||||
|
||||
**Сопутствующие исправления (найдены при тесте Pluto VHF/UHF FM, но баги общие):**
|
||||
- ✅ Восстановление per-band FM-настроек на старте (`Settings.LoadDevice`): bulk-
|
||||
|
||||
Reference in New Issue
Block a user