mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
feat: unify sample-rate presets across desktop + web UIs
Sample-rate (span) presets were duplicated in three places and none was authoritative: HPSDR set hardcoded in the desktop overlay (SPAN_RATES), Pluto set in backend caps, and a separate hardcoded list in the web JS. The web showed HPSDR rates even on Pluto, and the web adapter silently dropped any rate outside a hardcoded HPSDR whitelist (so Pluto-only rates like 960k/2304k never switched). Single source of truth = backend caps -> controller: - HPSDRNetwork.Caps now fills RatePresets [48k..1536k] (was nil). - RadioBackend: named type TBackendRateArray. - TRadioController.SampleRatePresets returns BackendCaps.RatePresets. Both UIs derive from it: - Desktop: ApplyBackendCapsToUI always feeds the overlay from SampleRatePresets (overlay no longer owns the HPSDR list). - Web: WebServer.SetRatePresets + rate_presets in state JSON; hosts (daemon OnState/startup, GUI ApplyBackendCapsToUI/startup) push SampleRatePresets; JS builds span buttons dynamically from it. - WebAdapter.SyncSpan validates against SampleRatePresets instead of a hardcoded whitelist, so any backend rate is accepted. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -544,6 +544,9 @@ type
|
||||
procedure EnsureBackend(Kind: TBackendKind);
|
||||
// Возможности текущего бэкенда (для гейтинга UI / пресетов sample rate).
|
||||
function BackendCaps: TBackendCaps;
|
||||
// Единый источник пресетов sample-rate для UI (desktop overlay + web).
|
||||
// Берётся из caps текущего бэкенда (HPSDR 48k..1536k / Pluto 576k..5760k).
|
||||
function SampleRatePresets: TBackendRateArray;
|
||||
// True если активный бэкенд — Pluto (VHF/UHF band-план вместо HF).
|
||||
function IsPluto: Boolean;
|
||||
// Человекочитаемое имя подключённой платы для статус-строки (UI/Web).
|
||||
@@ -3154,6 +3157,11 @@ begin
|
||||
else FillChar(Result, SizeOf(Result), 0);
|
||||
end;
|
||||
|
||||
function TRadioController.SampleRatePresets: TBackendRateArray;
|
||||
begin
|
||||
Result := BackendCaps.RatePresets;
|
||||
end;
|
||||
|
||||
function TRadioController.IsPluto: Boolean;
|
||||
begin
|
||||
Result := (FNetwork <> nil) and (FNetwork.Caps.Kind = bkPluto);
|
||||
|
||||
Reference in New Issue
Block a user