mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
fix(beacon): трасса лупы не рисовалась до первого клика по маяку
Перерисовку спектра лупы гейтил не тот сигнал: возврат GetBeaconZoomSpectrum («в кэше лежит непрочитанный кадр») игнорировался — функция звалась как процедура, — а FZoomDirty ставился только по смене границ окна и по сдвигу маркеров. Пока никто не панорамирует, границы не меняются, а до клика все три маркерные частоты нулевые и неподвижные: кадр собирался один раз и застывал. Клик задаёт наведение декодера, дальше BeaconDecodeFreqHz непрерывно едет за несущей в ServiceBeaconLock — сравнение с FLastDecHz начинает срабатывать каждый тик, и спектр «оживает». Водопад работал с самого начала: он всегда шёл по своему честному флагу свежести, хотя слой тот же самый и анализатор один. Теперь свежесть кадра — основной триггер (трасса идёт 15/с, как и даёт анализатор); проверки окна и маркеров оставлены как дополнительные, они дают отклик на зум/пан не дожидаясь следующего кадра. Сборка ewsdr (--ws=qt6) — ОК. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+5
-1
@@ -541,7 +541,11 @@ begin
|
||||
// картинку ТОЛЬКО на свежем кадре либо когда переехали маркеры/окно.
|
||||
// «Несвежий» кадр всё равно забираем: он нужен как последний нарисованный,
|
||||
// пока анализатор наполняет FFT-окно после переарма.
|
||||
FCtl.GetBeaconZoomSpectrum(FPix, Cnt, Lo, Hi);
|
||||
// Возврат GetBeaconZoomSpectrum = «в кэше был НЕпрочитанный кадр»; это и есть
|
||||
// главный триггер перерисовки трассы. Границы окна тут не помощник: пока
|
||||
// никто не панорамирует, они не меняются, а пиксели — каждый кадр.
|
||||
if FCtl.GetBeaconZoomSpectrum(FPix, Cnt, Lo, Hi) then
|
||||
FZoomDirty := True;
|
||||
if Cnt > 0 then
|
||||
begin
|
||||
if (Cnt <> FPixCount) or (Abs(Lo - FViewLo) > 0.01)
|
||||
|
||||
Reference in New Issue
Block a user