From db361a274b660379553e8032a93b28c8a0da3281 Mon Sep 17 00:00:00 2001 From: Uladzimir Karpenka Date: Tue, 9 Jun 2026 15:55:34 +0300 Subject: [PATCH] Phase 5 (D4 fix): daemon shares GUI config dir (EWSDR app name) GetAppConfigDir derives the dir from ApplicationName, which defaulted to the binary name 'ewsdrd' -> a separate empty ~/.config/ewsdrd/. With no per-device settings the daemon never configured WDSP's FFT/spectrum/waterfall display (web showed a white waterfall and no spectrum), never resolved a saved board type (Board=0), and -- critically -- found no FFTW wisdom, so WDSP recomputed it from scratch on Open (~48s vs <1s in the GUI). Set OnGetApplicationName := 'EWSDR' (matching the GUI's Application.Title) before constructing the controller, so the daemon reads the same ~/.config/EWSDR/ (settings, saved devices, wdspWisdom00). Co-Authored-By: Claude Opus 4.8 --- ewsdrd.lpr | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ewsdrd.lpr b/ewsdrd.lpr index 6d8d4d4..f5f517c 100644 --- a/ewsdrd.lpr +++ b/ewsdrd.lpr @@ -86,6 +86,15 @@ begin Flush(Output); end; +function DaemonAppName: string; +begin + // КРИТИЧНО: тот же каталог конфигурации, что у GUI (~/.config/EWSDR/). + // GetAppConfigDir берёт имя из ApplicationName, иначе бы вышло «ewsdrd» — + // отдельный пустой конфиг (нет device-настроек/FFT-параметров/FFTW-wisdom → + // белый водопад + WDSP открывается ~минуту). GUI задаёт Application.Title:=EWSDR. + Result := 'EWSDR'; +end; + {$IFDEF UNIX} procedure HandleSignal(sig: cint); cdecl; begin @@ -387,6 +396,7 @@ begin end; begin + OnGetApplicationName := @DaemonAppName; // ДО создания контроллера/настроек! Log('EWSDR daemon starting (headless).'); GHost := THeadlessHost.Create; {$IFDEF UNIX}