mirror of
https://github.com/smittix/intercept.git
synced 2026-07-25 17:28:11 -07:00
Stabilize sweep progress updates
This commit is contained in:
@@ -525,6 +525,11 @@ def scanner_loop_power():
|
|||||||
|
|
||||||
# Process segments in ascending frequency order to avoid backtracking in UI
|
# Process segments in ascending frequency order to avoid backtracking in UI
|
||||||
segments.sort(key=lambda s: s[0])
|
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:
|
for sweep_start, sweep_end, sweep_bin, bin_values in segments:
|
||||||
# Noise floor (median)
|
# Noise floor (median)
|
||||||
@@ -545,16 +550,19 @@ def scanner_loop_power():
|
|||||||
snr = val - noise_floor
|
snr = val - noise_floor
|
||||||
level = int(max(0, snr) * 100)
|
level = int(max(0, snr) * 100)
|
||||||
threshold = int(snr_threshold * 100)
|
threshold = int(snr_threshold * 100)
|
||||||
|
progress = min(1.0, global_index / max(1, total_bins - 1))
|
||||||
try:
|
try:
|
||||||
scanner_queue.put_nowait({
|
scanner_queue.put_nowait({
|
||||||
'type': 'scan_update',
|
'type': 'scan_update',
|
||||||
'frequency': scanner_current_freq,
|
'frequency': scanner_current_freq,
|
||||||
'level': level,
|
'level': level,
|
||||||
'threshold': threshold,
|
'threshold': threshold,
|
||||||
'detected': snr >= snr_threshold
|
'detected': snr >= snr_threshold,
|
||||||
|
'progress': progress
|
||||||
})
|
})
|
||||||
except queue.Full:
|
except queue.Full:
|
||||||
pass
|
pass
|
||||||
|
global_index += emit_stride
|
||||||
|
|
||||||
# Detect peaks (clusters above threshold)
|
# Detect peaks (clusters above threshold)
|
||||||
peaks = []
|
peaks = []
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ let scannerCycles = 0;
|
|||||||
let scannerStartFreq = 118;
|
let scannerStartFreq = 118;
|
||||||
let scannerEndFreq = 137;
|
let scannerEndFreq = 137;
|
||||||
let scannerSignalActive = false;
|
let scannerSignalActive = false;
|
||||||
let lastScanFreq = null;
|
|
||||||
|
|
||||||
// Audio state
|
// Audio state
|
||||||
let isAudioPlaying = false;
|
let isAudioPlaying = false;
|
||||||
@@ -182,7 +181,6 @@ function startScanner() {
|
|||||||
scannerEndFreq = endFreq;
|
scannerEndFreq = endFreq;
|
||||||
scannerFreqsScanned = 0;
|
scannerFreqsScanned = 0;
|
||||||
scannerCycles = 0;
|
scannerCycles = 0;
|
||||||
lastScanFreq = null;
|
|
||||||
|
|
||||||
// Update sidebar display
|
// Update sidebar display
|
||||||
updateScannerDisplay('STARTING...', 'var(--accent-orange)');
|
updateScannerDisplay('STARTING...', 'var(--accent-orange)');
|
||||||
@@ -296,7 +294,6 @@ function stopScanner() {
|
|||||||
isScannerPaused = false;
|
isScannerPaused = false;
|
||||||
scannerSignalActive = false;
|
scannerSignalActive = false;
|
||||||
currentSignalLevel = 0;
|
currentSignalLevel = 0;
|
||||||
lastScanFreq = null;
|
|
||||||
|
|
||||||
// Re-enable listen button (will be in local mode after stop)
|
// Re-enable listen button (will be in local mode after stop)
|
||||||
updateListenButtonState(false);
|
updateListenButtonState(false);
|
||||||
@@ -575,18 +572,6 @@ function handleScannerEvent(data) {
|
|||||||
function handleFrequencyUpdate(data) {
|
function handleFrequencyUpdate(data) {
|
||||||
const freqStr = data.frequency.toFixed(3);
|
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');
|
const currentFreq = document.getElementById('scannerCurrentFreq');
|
||||||
if (currentFreq) currentFreq.textContent = freqStr + ' MHz';
|
if (currentFreq) currentFreq.textContent = freqStr + ' MHz';
|
||||||
|
|
||||||
@@ -594,7 +579,9 @@ function handleFrequencyUpdate(data) {
|
|||||||
if (mainFreq) mainFreq.textContent = freqStr;
|
if (mainFreq) mainFreq.textContent = freqStr;
|
||||||
|
|
||||||
// Update progress bar
|
// 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');
|
const progressBar = document.getElementById('scannerProgressBar');
|
||||||
if (progressBar) progressBar.style.width = Math.max(0, Math.min(100, progress)) + '%';
|
if (progressBar) progressBar.style.width = Math.max(0, Math.min(100, progress)) + '%';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user