feat(slices): этап 3.1 — per-DDC бэкенд HPSDR (пан-DDC) + фикс Saturn в StartRunning

- TBackendCaps: MaxPans/IndependentPanFreq (HPSDR 4/True, Pluto 1/False);
  SetPanDDC/SetPanDDCFreq — виртуальные no-op в TRadioBackend
- HPSDRNetwork: ConfigureDDCs → кэш главного DDC + RebuildDDCSpecific
  (главный + активные пан-DDC, каждый со своим rate/ADC); SendFullHP пишет
  частотные слова всех активных пан-DDC; хелпер DDCBaseIndex; сброс
  пан-состояния в Connect
- RadioController: MAX_PANS=4, PAN_DDC_RATES 192/384/768; AddPanDDC/
  RemovePanDDC/SetPanDDCFreq/PanDDC* (аллокатор hw-индексов от FActiveDDC+1,
  обратный маппинг FDDCPanMap); OnDDCIQ роутит пан-DDC → PushPanIQ;
  паны гасятся в StopRunning, пул сбрасывается в StartRunning
- WDSPEngine: PushPanIQ — заглушка-дроп (аккумулятор/анализатор — этап 3.2)
- фикс: StartRunning не включал Saturn (BoardType 10) в список плат с
  DDCBase=2 — на Saturn гейт FActiveDDC ждал бы IQ с DDC0
- doc/SLICES_PLAN.md: статус 3.1 + B1 проверена на экране

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 10:52:31 +03:00
co-authored by Claude Fable 5
parent 26bfacc0a3
commit 5dfd7bbb6c
6 changed files with 321 additions and 35 deletions
+29 -2
View File
@@ -128,8 +128,10 @@ Pluto+ (AD9363 2r2t, libiio):
### 3.0 — TPanafallPanel: выделить панадаптер из MainForm
**Статус 2026-07-10: фазы A и B1 СДЕЛАНЫ (коммиты c125e59, cc9919c; фаза A
проверена пользователем на экране).** Создан `PanafallPanel.pas`:
**Статус: фазы A и B1 СДЕЛАНЫ (коммиты c125e59, cc9919c) и ПРОВЕРЕНЫ
пользователем на экране (A — 2026-07-10, B1 — 2026-07-11: создание/закрытие
флагов, видимость флага A, мышь/колесо/drag, тик S-метров — работает).**
Создан `PanafallPanel.pas`:
- Фаза A: панель владеет view (CPU/GL), контролами (спектр/линейка/сплиттер/
водопад/пан-зум/кнопки зума), полной геометрией стека (`Layout`), механикой
сплиттера и мышью пан/зум-полосы. MainForm держит алиасы (`FSpecView`,
@@ -218,6 +220,31 @@ static/глобального. (CPU-LUT палитры общий — это о
Ретюн пана N>0 = запись `FDDCFreq[ddc]` + `SendFullHP` (без реконфига DDC);
смена rate/ADC = `ConfigureDDCs` (как сейчас при смене sample rate).
**СТАТУС 3.1 (2026-07-11): РЕАЛИЗОВАНО, собирается (ewsdr qt6 + ewsdrd),
на эфире не проверено (проверяемо только с 3.2/3.3 — панов ещё никто не
создаёт).** Отличие от текста плана: per-DDC состояние (freq/rate/ADC/enable)
живёт в `THPSDRNetwork` (`FPanDDC*`, пишет `SetPanDDC`/`SetPanDDCFreq` из
`TRadioBackend`), а контроллер держит только per-pan маппинг — эквивалентно
`FDDCFreq[]` из плана, но HP-кадр собирается из одного места. Сделано:
- `TBackendCaps.MaxPans`/`IndependentPanFreq` (HPSDR 4/True, Pluto 1/False);
`SetPanDDC`/`SetPanDDCFreq` — виртуальные no-op в базе, override в HPSDR.
- `HPSDRNetwork`: `ConfigureDDCs` → кэш главного DDC + `RebuildDDCSpecific`
(главный + активные пан-DDC, каждый со своим rate/ADC); `SendFullHP` пишет
частотные слова всех активных пан-DDC (`Buf[9+ddc*4]`); хелпер
`DDCBaseIndex` (дедуп трёх списков плат); сброс пан-состояния в `Connect`.
- `RadioController`: `MAX_PANS=4`, `PAN_DDC_RATES=(192,384,768)`;
`AddPanDDC/RemovePanDDC/SetPanDDCFreq/PanDDC{Active,Freq,RateKHz}`
(аллокатор hw-индексов от `FActiveDDC+1`, обратный маппинг `FDDCPanMap`);
`OnDDCIQ` роутит: активный DDC → главный тракт, пан-DDC →
`WDSPEngine.PushPanIQ` (пока заглушка-дроп, тело — 3.2); паны гасятся в
`StopRunning`, пул сбрасывается в `StartRunning`.
- ⚠ Попутный фикс: `StartRunning` не включал Saturn (BoardType 10) в список
плат с DDCBase=2 → на Saturn гейт `FActiveDDC` ждал DDC0. Исправлено
(`[3,4,5,10]`, как в `DDCBaseIndex`).
- Частоты панов — сырые Гц железа: XVTR-трансляция на паны НЕ распространяется
(XVTR — свойство главного тракта; решить при 3.3/3.4, если понадобится).
### 3.2 — WDSPEngine: анализатор и IQ-тракт на панадаптер
Сейчас: анализаторы `RX_DISP_ID=0` / `TX_DISP_ID=1` (`WDSPEngine.pas:133`),