mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
feat(slices): независимый rate панадаптеров (селектор в шапке)
- Создание пана: rate наследуется от главного с клампом ≤768к (вне сетки → 384к); за сменой rate главного паны не следуют - Клик по «NNN kHz» в шапке пана N → меню полной сетки железа (PanRateAllowed = Caps.RatePresets ∩ кратные 48 кГц; захардкоженный PAN_DDC_RATES удалён) - WDSPEngine.SetPanRate: под FSliceLock пересбор аккумулятора/анализатора пана + переоткрытие слайс-каналов на новом rate (state сохраняется) - RadioController.SetPanDDCRate: движок → реконфиг DDC (SetPanDDC) → кламп слайсов к новой полосе; FPanADC[] хранится (база под 3.4) - Шапка: rate отдельным лейблом (у панов N кликабелен, акцент/рука) Смоук-тест без железа ALL PASS (тон: спектр+аудио слайса живы через 384→192→768). Проверено юзером на экране. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+28
-4
@@ -413,10 +413,34 @@ ChangeSampleRate).
|
||||
не `crDefault`. ⚠Урок на 3.5 (pop-out) и вообще: любой динамически
|
||||
создаваемый нативный GL-виджет должен получать явный курсор при создании.
|
||||
|
||||
Статус: собирается (GUI+демон), НА ЭКРАНЕ НЕ ПРОВЕРЕНО (юзер проверяет).
|
||||
Открыто из фидбека: юзер видел курсор-«палец» на водопаде пана N — в коде
|
||||
панов N `crHandPoint` нигде не ставится (подозрение: артефакт сломанной
|
||||
раскладки, перекрытие чужим контролом); перепроверить после фиксов.
|
||||
Статус: все фиксы подтверждены юзером на экране, закоммичено 95b4f74
|
||||
(+ dae0c19 банд-столл отдельно).
|
||||
|
||||
**RATE ПАНОВ (реализовано 2026-07-11, после коммита 3.3):**
|
||||
|
||||
Решение (обсуждено с юзером): (1) при создании пан наследует rate главного
|
||||
с клампом ≤768к (48/96/192к как есть; вне сетки → 384к); (2) rate пана
|
||||
независим и меняется кликом по «NNN kHz» в шапке пана → меню полной сетки
|
||||
железа; (3) за сменой rate главного НЕ следует (издержки Ethernet/CPU, churn).
|
||||
|
||||
- `WDSPEngine.SetPanRate(PanId, RateHz)`: под FSliceLock — DestroyPanAnalyzer →
|
||||
пересбор аккумулятора (BufSize/AccI/AccQ) → CreatePanAnalyzer → переоткрытие
|
||||
слайс-каналов пана (Close+OpenSliceChannel, state слайсов сохраняется).
|
||||
- `RadioController`: PAN_DDC_RATES (192/384/768) УДАЛЁН — валидация
|
||||
`PanRateAllowed` = Caps.RatePresets ∩ кратные 48 кГц (полная сетка HPSDR
|
||||
48-1536к). `SetPanDDCRate`: движок → FPanRateKHz → `SetPanDDC` (реконфиг
|
||||
DDC тем же RebuildDDCSpecific+SendFullHP) → кламп слайсов к новой полосе.
|
||||
`FPanADC[]` — ADC пана теперь хранится (нужен реконфигу; база под 3.4).
|
||||
- UI: rate в шапке — отдельный TLabel (`SetHeaderRate`, у панов N кликабелен,
|
||||
акцентный цвет, crHandPoint), `OnPanRateClick` → TPopupMenu из RatePresets
|
||||
(текущий отмечен) → `PanRateMenuItemClick` → SetPanDDCRate + SyncPanViews +
|
||||
PushAllSliceFlagStates + LayoutFlags. Пан 0 показывает rate некликабельно
|
||||
(его rate — существующий SampleRateOverlay).
|
||||
- ★СМОУК-ТЕСТ БЕЗ ЖЕЛЕЗА ALL PASS (scratchpad panratetest.pas, паттерн 3.2):
|
||||
синтетический тон +10.8кГц → пан 384к: пик спектра на месте, слайс 800Гц
|
||||
RMS 0.33 → SetPanRate 192к → пик/аудио живы → 768к → живы → RemovePan чисто.
|
||||
НА ЭКРАНЕ НЕ ПРОВЕРЕНО, НЕ закоммичено. Смена rate пана на эфире = короткий
|
||||
разрыв IQ этого пана (реконфиг DDC) — ожидаемо.
|
||||
|
||||
### 3.4 — ADC-селектор панадаптера (+ антенны Alex, уточнено 2026-07-11)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user