Source code for gatenet.radio.base
"""
RadioInterface: Abstract base for SDR/LoRa/ESP/Weather RF integration.
Examples:
>>> radio = RadioInterface()
>>> radio.scan_frequencies(433_000_000, 434_000_000, 10)
>>> radio.on_signal(lambda info: print(info))
See: https://github.com/clxrityy/gatenet
"""
from typing import Callable, Any
[docs]
class RadioInterface:
"""Base class for RF radio integration (SDR, LoRa, ESP, Weather).
Args:
device_path (str): Path to SDR/LoRa/ESP device.
sample_rate (int): Sample rate in Hz.
Example:
>>> radio = RadioInterface()
>>> radio.scan_frequencies(433_000_000, 434_000_000, 10)
>>> radio.on_signal(lambda info: print(info))
"""
def __init__(self, device_path: str = "/dev/rtl_sdr", sample_rate: int = 2_000_000) -> None:
self.device_path = device_path
self.sample_rate = sample_rate
self._signal_handler: Callable[[Any], None] = lambda info: None
[docs]
def scan_frequencies(self, start_freq: int, end_freq: int, step_khz: int) -> None:
"""Sweep a frequency range and detect power peaks or anomalies.
Args:
start_freq (int): Start frequency in Hz.
end_freq (int): End frequency in Hz.
step_khz (int): Step size in kHz.
"""
pass
[docs]
def decode_adsb(self) -> None:
"""Decode ADS-B aircraft messages from 1090 MHz."""
pass
[docs]
def decode_weather(self) -> None:
"""Decode weather station signals (e.g. 433 MHz devices)."""
pass
[docs]
def on_signal(self, handler: Callable[[Any], None]) -> None:
"""Register callback for signal detection.
Args:
handler (Callable): Function to call with signal info.
"""
self._signal_handler = handler