mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 19:45:09 +00:00
docs(slices): draft Stage 3 notes (HW DDC design + UI concept)
Record grounded data-path analysis, per-DDC/RX2 deltas, the soft-vs-hard WDSP channel split, preliminary decisions (4-6 hard DDCs, static first), and the UI concept (edge markers, slices rail, ADC badge). Marked as a work-in-progress draft. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -208,6 +208,61 @@ fan-out живёт в движке и не зависит от бэкенда.
|
||||
`feature/rx2-support` — это про ВТОРОЙ ADC, не про слайсы; но её каркас
|
||||
(доп. WDSP-канал + доп. аудиовыход + роутинг по индексу) частично переиспользуем.
|
||||
|
||||
### Этап 3 — рабочие заметки (черновик, обсуждение НЕ закончено)
|
||||
|
||||
Разобрали фактический data-path и набросали дизайн; вернёмся позже.
|
||||
|
||||
**Что есть сейчас (по коду):**
|
||||
- Один аппаратный DDC: `ConfigureDDCs(1, rate, ADCSource=0)` (`RadioController.pas:3314`),
|
||||
IQ на порт `1035+n` → `HandleDDCIQ(DDCIdx)` → `OnDDCIQ(DDCIndex)`. В WDSP подаётся
|
||||
**только `FActiveDDC`** (`RadioController.pas:843`), остальные DDC отбрасываются.
|
||||
- Слайсы = софт fan-out этого одного IQ: `SetSliceShift(Id, TargetHz-FCenterFreq)`
|
||||
(`RefreshSliceShifts:1063`). Гейт `SliceFitsCapture` ±47.5% rate вокруг центра
|
||||
(`:1081`); вне полосы `AddSlice` отказывает (`:1097`).
|
||||
- HP-фрейм шлёт частотное слово **только DDC0**: `Buf[9 + DDCBase*4]`
|
||||
(`SendFullHP:1567`); слова остальных DDC = нули.
|
||||
- `ConfigureDDCs` умеет N DDC (per-DDC enable), но пишет **один** rate/ADCSource на все;
|
||||
`DDCBase=2` на Orion/Angelia/Saturn (DDC0/1=PureSignal), `NumADCs=2` на 2-АЦП платах.
|
||||
|
||||
**Что нужно (дельты по точкам):**
|
||||
1. Per-DDC частота в HP: `SendFullHP` — цикл `Buf[9+ddc*4]=FreqToPhaseWord(FDDCFreq[ddc])`;
|
||||
контроллер держит `FDDCFreq[]`, обновляет при ретюне слайса.
|
||||
2. Per-DDC rate + ADCSource в `ConfigureDDCs` (принимать массив): главный DDC широкий
|
||||
(панорама), слайс-DDC узкие ~48–96 кГц (дёшево по линку). Протокол это позволяет.
|
||||
3. Аллокатор DDC: пул hw-индексов от `DDCBase+1`, захват/освобождение, кап (см. решения).
|
||||
4. **Ключевое — два типа слайс-канала в WDSPEngine:**
|
||||
- *soft* (Этап 1): вход = копия главного IQ, rate главного, NCO shift = `Target-Center`,
|
||||
общий аккумулятор.
|
||||
- *hard* (Этап 3): вход = **свой** DDC-пакет, rate его DDC, NCO shift = 0, **свой**
|
||||
аккумулятор `FSliceAccI/Q`. Нужен `PushSlicePacket(chan, ...)` + роутинг
|
||||
`OnDDCIQ(DDCIndex)→WDSP-канал привязанного слайса`.
|
||||
5. RX2 (второй ADC): `TSlice.ADCSource (0/1)` → слайс-DDC на нужный ADC. Даёт двух-антенные
|
||||
слайсы (главный RX на ANT1, слайс на ANT2). Ортогонально «внутри/вне полосы».
|
||||
|
||||
**Принятые решения (предварительно):**
|
||||
- Лимит: **до 4–6 hard-DDC слайсов**, со строгим контролем суммарного rate (бюджет Ethernet).
|
||||
- **Сначала статика**: источник (soft/hard) выбирается при добавлении/явном ретюне;
|
||||
авто-promotion/demotion (soft↔hard при смене центра/зума) — отдельным этапом позже.
|
||||
- RX2/ADCSource — не решено (нужно знать, как заведены антенны у пользователя).
|
||||
|
||||
**UI-концепция (черновик, не финал — выбор представления off-span НЕ сделан):**
|
||||
Принцип: **цвет+буква слайса = его личность во всех местах** (флаг, полоса, edge-маркер,
|
||||
чип рейла, ADC-бейдж) — переиспользуем палитру `SliceColor`, тему, `PaintFlatButton`.
|
||||
- Слайс в полосе — как сейчас (флаг сбоку + буква на полосе, packing).
|
||||
- Слайс **вне** видимой панорамы (hard) — приклеенный к краю спектра edge-маркер:
|
||||
цветная буква + стрелка (◄/►) + абсолютная частота. Клик = выбрать, двойной = перевести
|
||||
главную панораму на него. Почти бесплатно (флип/клэмп к краю уже есть).
|
||||
- **Slices-рейл** — тонкая полоса-менеджер (под панорамой или в правой панели): чип на слайс
|
||||
(цветная точка+буква · частота · режим · мини-S-метр · ADC-бейдж), сортировка по частоте,
|
||||
`[+]` = добавить с вводом частоты (для off-span, где Ctrl-клик не поможет). Единственное
|
||||
место, где off-span слайсы всегда видны/управляемы.
|
||||
- **ADC/антенна** — бейдж `A1`/`A2` в шапке флага и в чипе (только на 2-АЦП платах).
|
||||
- **soft/hard** — тонкий признак (плотная vs полая точка, или значок `⧉`); не кричать.
|
||||
- Позже «вау»: мини-панадаптер (свой спектр/водопад) на каждый hard-слайс в чипе рейла.
|
||||
|
||||
Развилка для следующего захода: как показывать off-span слайсы —
|
||||
(a) edge-маркеры + рейл [рекомендация], (b) только edge-маркеры, (c) рейл с мини-панадаптерами.
|
||||
|
||||
## Оговорки / риски
|
||||
|
||||
- CPU софтовых слайсов ~линейно от их числа: каждый WDSP-канал жуёт полный rate и
|
||||
|
||||
Reference in New Issue
Block a user