Stabilize sweep progress updates

This commit is contained in:
Smittix
2026-02-04 12:20:38 +00:00
parent 0afc47fcdd
commit dbe09411ac
2 changed files with 12 additions and 17 deletions

View File

@@ -525,6 +525,11 @@ def scanner_loop_power():
# Process segments in ascending frequency order to avoid backtracking in UI
segments.sort(key=lambda s: s[0])
total_bins = sum(len(seg[3]) for seg in segments)
if total_bins <= 0:
time.sleep(0.2)
continue
global_index = 0
for sweep_start, sweep_end, sweep_bin, bin_values in segments:
# Noise floor (median)
@@ -545,16 +550,19 @@ def scanner_loop_power():
snr = val - noise_floor
level = int(max(0, snr) * 100)
threshold = int(snr_threshold * 100)
progress = min(1.0, global_index / max(1, total_bins - 1))
try:
scanner_queue.put_nowait({
'type': 'scan_update',
'frequency': scanner_current_freq,
'level': level,
'threshold': threshold,
'detected': snr >= snr_threshold
'detected': snr >= snr_threshold,
'progress': progress
})
except queue.Full:
pass
global_index += emit_stride
# Detect peaks (clusters above threshold)
peaks = []

View File

@@ -15,7 +15,6 @@ let scannerCycles = 0;
let scannerStartFreq = 118;
let scannerEndFreq = 137;
let scannerSignalActive = false;
let lastScanFreq = null;
// Audio state
let isAudioPlaying = false;
@@ -182,7 +181,6 @@ function startScanner() {
scannerEndFreq = endFreq;
scannerFreqsScanned = 0;
scannerCycles = 0;
lastScanFreq = null;
// Update sidebar display
updateScannerDisplay('STARTING...', 'var(--accent-orange)');
@@ -296,7 +294,6 @@ function stopScanner() {
isScannerPaused = false;
scannerSignalActive = false;
currentSignalLevel = 0;
lastScanFreq = null;
// Re-enable listen button (will be in local mode after stop)
updateListenButtonState(false);
@@ -575,18 +572,6 @@ function handleScannerEvent(data) {
function handleFrequencyUpdate(data) {
const freqStr = data.frequency.toFixed(3);
// Prevent jitter from out-of-order sweep segments
if (lastScanFreq !== null) {
const range = scannerEndFreq - scannerStartFreq;
if (range > 0 && data.frequency < lastScanFreq) {
const drop = lastScanFreq - data.frequency;
if (drop < range * 0.5) {
return; // ignore backward blip within sweep
}
}
}
lastScanFreq = data.frequency;
const currentFreq = document.getElementById('scannerCurrentFreq');
if (currentFreq) currentFreq.textContent = freqStr + ' MHz';
@@ -594,7 +579,9 @@ function handleFrequencyUpdate(data) {
if (mainFreq) mainFreq.textContent = freqStr;
// Update progress bar
const progress = ((data.frequency - scannerStartFreq) / (scannerEndFreq - scannerStartFreq)) * 100;
const progress = (data.progress !== undefined)
? (data.progress * 100)
: ((data.frequency - scannerStartFreq) / (scannerEndFreq - scannerStartFreq)) * 100;
const progressBar = document.getElementById('scannerProgressBar');
if (progressBar) progressBar.style.width = Math.max(0, Math.min(100, progress)) + '%';