Stop rtl_power when starting listen

This commit is contained in:
Smittix
2026-02-04 12:04:50 +00:00
parent d601929130
commit c63cfa5e35
+30 -3
View File
@@ -50,6 +50,7 @@ scanner_paused = False
scanner_current_freq = 0.0 scanner_current_freq = 0.0
scanner_active_device: Optional[int] = None scanner_active_device: Optional[int] = None
listening_active_device: Optional[int] = None listening_active_device: Optional[int] = None
scanner_power_process: Optional[subprocess.Popen] = None
scanner_config = { scanner_config = {
'start_freq': 88.0, 'start_freq': 88.0,
'end_freq': 108.0, 'end_freq': 108.0,
@@ -381,7 +382,7 @@ def scanner_loop():
def scanner_loop_power(): def scanner_loop_power():
"""Power sweep scanner using rtl_power to detect peaks.""" """Power sweep scanner using rtl_power to detect peaks."""
global scanner_running, scanner_paused, scanner_current_freq global scanner_running, scanner_paused, scanner_current_freq, scanner_power_process
logger.info("Power sweep scanner thread started") logger.info("Power sweep scanner thread started")
add_activity_log('scanner_start', scanner_config['start_freq'], add_activity_log('scanner_start', scanner_config['start_freq'],
@@ -426,10 +427,16 @@ def scanner_loop_power():
try: try:
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL) proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
scanner_power_process = proc
stdout, _ = proc.communicate(timeout=15) stdout, _ = proc.communicate(timeout=15)
except subprocess.TimeoutExpired: except subprocess.TimeoutExpired:
proc.kill() proc.kill()
stdout = b'' stdout = b''
finally:
scanner_power_process = None
if not scanner_running:
break
if not stdout: if not stdout:
time.sleep(0.2) time.sleep(0.2)
@@ -900,10 +907,20 @@ def start_scanner() -> Response:
@listening_post_bp.route('/scanner/stop', methods=['POST']) @listening_post_bp.route('/scanner/stop', methods=['POST'])
def stop_scanner() -> Response: def stop_scanner() -> Response:
"""Stop the frequency scanner.""" """Stop the frequency scanner."""
global scanner_running, scanner_active_device global scanner_running, scanner_active_device, scanner_power_process
scanner_running = False scanner_running = False
_stop_audio_stream() _stop_audio_stream()
if scanner_power_process and scanner_power_process.poll() is None:
try:
scanner_power_process.terminate()
scanner_power_process.wait(timeout=1)
except Exception:
try:
scanner_power_process.kill()
except Exception:
pass
scanner_power_process = None
if scanner_active_device is not None: if scanner_active_device is not None:
app_module.release_sdr_device(scanner_active_device) app_module.release_sdr_device(scanner_active_device)
scanner_active_device = None scanner_active_device = None
@@ -1067,7 +1084,7 @@ def get_presets() -> Response:
@listening_post_bp.route('/audio/start', methods=['POST']) @listening_post_bp.route('/audio/start', methods=['POST'])
def start_audio() -> Response: def start_audio() -> Response:
"""Start audio at specific frequency (manual mode).""" """Start audio at specific frequency (manual mode)."""
global scanner_running, scanner_active_device, listening_active_device global scanner_running, scanner_active_device, listening_active_device, scanner_power_process
# Stop scanner if running # Stop scanner if running
if scanner_running: if scanner_running:
@@ -1075,6 +1092,16 @@ def start_audio() -> Response:
if scanner_active_device is not None: if scanner_active_device is not None:
app_module.release_sdr_device(scanner_active_device) app_module.release_sdr_device(scanner_active_device)
scanner_active_device = None scanner_active_device = None
if scanner_power_process and scanner_power_process.poll() is None:
try:
scanner_power_process.terminate()
scanner_power_process.wait(timeout=1)
except Exception:
try:
scanner_power_process.kill()
except Exception:
pass
scanner_power_process = None
time.sleep(0.5) time.sleep(0.5)
data = request.json or {} data = request.json or {}