mirror of
https://github.com/smittix/intercept.git
synced 2026-07-10 02:28:12 -07:00
style: apply ruff-format to entire codebase
First-time run of ruff-format via pre-commit hook normalises quote style, trailing commas, and whitespace across 188 Python files. No logic changes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ from utils.logging import get_logger
|
||||
from utils.process import register_process, safe_terminate, unregister_process
|
||||
from utils.waterfall_fft import cu8_to_complex
|
||||
|
||||
logger = get_logger('intercept.ground_station.fm_demod')
|
||||
logger = get_logger("intercept.ground_station.fm_demod")
|
||||
|
||||
AUDIO_RATE = 48_000 # Hz — standard rate for direwolf / multimon-ng
|
||||
|
||||
@@ -33,7 +33,7 @@ class FMDemodConsumer:
|
||||
self,
|
||||
decoder_cmd: list[str],
|
||||
*,
|
||||
modulation: str = 'fm',
|
||||
modulation: str = "fm",
|
||||
on_decoded: Callable[[str], None] | None = None,
|
||||
):
|
||||
"""
|
||||
@@ -104,10 +104,9 @@ class FMDemodConsumer:
|
||||
|
||||
def _start_proc(self) -> None:
|
||||
import shutil
|
||||
|
||||
if not shutil.which(self._decoder_cmd[0]):
|
||||
logger.warning(
|
||||
f"FMDemodConsumer: decoder '{self._decoder_cmd[0]}' not found — disabled"
|
||||
)
|
||||
logger.warning(f"FMDemodConsumer: decoder '{self._decoder_cmd[0]}' not found — disabled")
|
||||
return
|
||||
try:
|
||||
self._proc = subprocess.Popen(
|
||||
@@ -117,9 +116,7 @@ class FMDemodConsumer:
|
||||
stderr=subprocess.DEVNULL,
|
||||
)
|
||||
register_process(self._proc)
|
||||
self._stdout_thread = threading.Thread(
|
||||
target=self._read_stdout, daemon=True, name='fm-demod-stdout'
|
||||
)
|
||||
self._stdout_thread = threading.Thread(target=self._read_stdout, daemon=True, name="fm-demod-stdout")
|
||||
self._stdout_thread.start()
|
||||
except Exception as e:
|
||||
logger.error(f"FMDemodConsumer: failed to start decoder: {e}")
|
||||
@@ -130,7 +127,7 @@ class FMDemodConsumer:
|
||||
assert self._proc.stdout is not None
|
||||
try:
|
||||
for line in self._proc.stdout:
|
||||
decoded = line.decode('utf-8', errors='replace').rstrip()
|
||||
decoded = line.decode("utf-8", errors="replace").rstrip()
|
||||
if decoded and self._on_decoded:
|
||||
try:
|
||||
self._on_decoded(decoded)
|
||||
@@ -186,14 +183,14 @@ def _demodulate(
|
||||
if shifted.size < 16:
|
||||
return None, next_phase
|
||||
|
||||
if mod == 'fm':
|
||||
if mod == "fm":
|
||||
audio = np.angle(shifted[1:] * np.conj(shifted[:-1])).astype(np.float32)
|
||||
elif mod == 'am':
|
||||
elif mod == "am":
|
||||
envelope = np.abs(shifted).astype(np.float32)
|
||||
audio = envelope - float(np.mean(envelope))
|
||||
elif mod == 'usb':
|
||||
elif mod == "usb":
|
||||
audio = np.real(shifted).astype(np.float32)
|
||||
elif mod == 'lsb':
|
||||
elif mod == "lsb":
|
||||
audio = -np.real(shifted).astype(np.float32)
|
||||
else:
|
||||
audio = np.real(shifted).astype(np.float32)
|
||||
|
||||
@@ -23,9 +23,9 @@ import numpy as np
|
||||
from utils.logging import get_logger
|
||||
from utils.process import register_process, safe_terminate, unregister_process
|
||||
|
||||
logger = get_logger('intercept.ground_station.gr_satellites')
|
||||
logger = get_logger("intercept.ground_station.gr_satellites")
|
||||
|
||||
GR_SATELLITES_BIN = 'gr_satellites'
|
||||
GR_SATELLITES_BIN = "gr_satellites"
|
||||
|
||||
|
||||
class GrSatConsumer:
|
||||
@@ -106,10 +106,11 @@ class GrSatConsumer:
|
||||
cmd = [
|
||||
GR_SATELLITES_BIN,
|
||||
self._satellite_name,
|
||||
'--samplerate', str(sample_rate),
|
||||
'--iq',
|
||||
'--json',
|
||||
'-',
|
||||
"--samplerate",
|
||||
str(sample_rate),
|
||||
"--iq",
|
||||
"--json",
|
||||
"-",
|
||||
]
|
||||
try:
|
||||
self._proc = subprocess.Popen(
|
||||
@@ -124,7 +125,7 @@ class GrSatConsumer:
|
||||
target=self._read_stdout,
|
||||
args=(_json,),
|
||||
daemon=True,
|
||||
name='gr-sat-stdout',
|
||||
name="gr-sat-stdout",
|
||||
)
|
||||
self._stdout_thread.start()
|
||||
logger.info(f"GrSatConsumer started for '{self._satellite_name}'")
|
||||
@@ -138,14 +139,14 @@ class GrSatConsumer:
|
||||
assert self._proc.stdout is not None
|
||||
try:
|
||||
for line in self._proc.stdout:
|
||||
text = line.decode('utf-8', errors='replace').rstrip()
|
||||
text = line.decode("utf-8", errors="replace").rstrip()
|
||||
if not text:
|
||||
continue
|
||||
if self._on_decoded:
|
||||
try:
|
||||
data = _json.loads(text)
|
||||
except _json.JSONDecodeError:
|
||||
data = {'raw': text}
|
||||
data = {"raw": text}
|
||||
try:
|
||||
self._on_decoded(data)
|
||||
except Exception as e:
|
||||
|
||||
@@ -5,7 +5,7 @@ from __future__ import annotations
|
||||
from utils.logging import get_logger
|
||||
from utils.sigmf import SigMFMetadata, SigMFWriter
|
||||
|
||||
logger = get_logger('intercept.ground_station.sigmf_consumer')
|
||||
logger = get_logger("intercept.ground_station.sigmf_consumer")
|
||||
|
||||
|
||||
class SigMFConsumer:
|
||||
|
||||
@@ -20,7 +20,7 @@ from utils.waterfall_fft import (
|
||||
quantize_to_uint8,
|
||||
)
|
||||
|
||||
logger = get_logger('intercept.ground_station.waterfall_consumer')
|
||||
logger = get_logger("intercept.ground_station.waterfall_consumer")
|
||||
|
||||
FFT_SIZE = 1024
|
||||
AVG_COUNT = 4
|
||||
@@ -52,7 +52,7 @@ class WaterfallConsumer:
|
||||
self._start_freq = 0.0
|
||||
self._end_freq = 0.0
|
||||
self._sample_rate = 0
|
||||
self._buffer = b''
|
||||
self._buffer = b""
|
||||
self._required_bytes = 0
|
||||
self._frame_interval = 1.0 / max(1, fps)
|
||||
self._last_frame_time = 0.0
|
||||
@@ -80,7 +80,7 @@ class WaterfallConsumer:
|
||||
)
|
||||
self._required_bytes = required_samples * 2 # 1 byte I + 1 byte Q
|
||||
self._frame_interval = 1.0 / max(1, self._fps)
|
||||
self._buffer = b''
|
||||
self._buffer = b""
|
||||
self._last_frame_time = 0.0
|
||||
|
||||
def on_chunk(self, raw: bytes) -> None:
|
||||
@@ -91,15 +91,13 @@ class WaterfallConsumer:
|
||||
if len(self._buffer) < self._required_bytes:
|
||||
return
|
||||
|
||||
chunk = self._buffer[-self._required_bytes:]
|
||||
self._buffer = b''
|
||||
chunk = self._buffer[-self._required_bytes :]
|
||||
self._buffer = b""
|
||||
self._last_frame_time = now
|
||||
|
||||
try:
|
||||
samples = cu8_to_complex(chunk)
|
||||
power_db = compute_power_spectrum(
|
||||
samples, fft_size=self._fft_size, avg_count=self._avg_count
|
||||
)
|
||||
power_db = compute_power_spectrum(samples, fft_size=self._fft_size, avg_count=self._avg_count)
|
||||
quantized = quantize_to_uint8(power_db, db_min=self._db_min, db_max=self._db_max)
|
||||
frame = build_binary_frame(self._start_freq, self._end_freq, quantized)
|
||||
except Exception as e:
|
||||
@@ -118,4 +116,4 @@ class WaterfallConsumer:
|
||||
pass
|
||||
|
||||
def on_stop(self) -> None:
|
||||
self._buffer = b''
|
||||
self._buffer = b""
|
||||
|
||||
Reference in New Issue
Block a user