fix(adsb): disable bias-T on stop and warn when toggled while running (#207)

* fix(adsb): disable bias-T on stop and warn when toggled while running

The RTL-SDR bias-T hardware register persists after the device is closed,
so toggling bias-T off in the UI and stopping the SDR had no effect on the
actual hardware — verified with a multimeter in issue #205.

- Add disable_bias_t_via_rtl_biast() to rtlsdr.py (mirrors enable, uses -b 0)
- Track adsb_bias_t_active in adsb.py; call disable on stop_adsb() so the
  hardware register is cleared when ADS-B is stopped
- Show an inline warning in the UI when the bias-T checkbox is toggled while
  any SDR mode is active, since the setting only takes effect at start time

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(lint): remove unused imports in tscm sweep.py

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-04-13 13:18:50 +01:00
committed by GitHub
parent 3fedff9d08
commit b01598753d
4 changed files with 48 additions and 5 deletions
+11 -2
View File
@@ -79,6 +79,7 @@ adsb_bytes_received = 0
adsb_lines_received = 0
adsb_active_device = None # Track which device index is being used
adsb_active_sdr_type: str | None = None
adsb_bias_t_active = False # Track if bias-t was enabled at start (for cleanup on stop)
_sbs_error_logged = False # Suppress repeated connection error logs
# Track ICAOs already looked up in aircraft database (avoid repeated lookups)
@@ -859,7 +860,7 @@ def adsb_session():
@adsb_bp.route('/start', methods=['POST'])
def start_adsb():
"""Start ADS-B tracking."""
global adsb_using_service, adsb_active_device, adsb_active_sdr_type
global adsb_using_service, adsb_active_device, adsb_active_sdr_type, adsb_bias_t_active
with app_module.adsb_lock:
if adsb_using_service:
@@ -991,6 +992,7 @@ def start_adsb():
# Build ADS-B decoder command
bias_t = data.get('bias_t', False)
adsb_bias_t_active = bias_t
cmd = builder.build_adsb_command(
device=sdr_device,
gain=float(gain),
@@ -1139,7 +1141,7 @@ def start_adsb():
@adsb_bp.route('/stop', methods=['POST'])
def stop_adsb():
"""Stop ADS-B tracking."""
global adsb_using_service, adsb_active_device, adsb_active_sdr_type
global adsb_using_service, adsb_active_device, adsb_active_sdr_type, adsb_bias_t_active
data = request.get_json(silent=True) or {}
stop_source = data.get('source')
stopped_by = request.remote_addr
@@ -1162,6 +1164,13 @@ def stop_adsb():
clear_dump1090_pid()
logger.info("ADS-B process stopped")
# Turn off bias-T if it was enabled at start — the hardware register
# persists after the device is closed, so we must explicitly disable it.
if adsb_bias_t_active and (adsb_active_sdr_type or 'rtlsdr') == 'rtlsdr':
from utils.sdr.rtlsdr import disable_bias_t_via_rtl_biast
disable_bias_t_via_rtl_biast(adsb_active_device or 0)
adsb_bias_t_active = False
# Release device from registry
if adsb_active_device is not None:
app_module.release_sdr_device(adsb_active_device, adsb_active_sdr_type or 'rtlsdr')
-3
View File
@@ -19,12 +19,9 @@ from flask import Response, jsonify, request
from data.tscm_frequencies import get_all_sweep_presets, get_sweep_preset
from routes.tscm import (
_baseline_recorder,
_current_sweep_id,
_emit_event,
_start_sweep_internal,
_sweep_running,
tscm_bp,
tscm_queue,
)
from utils.database import get_tscm_sweep, update_tscm_sweep
from utils.event_pipeline import process_event