feat: BladeRF and HydraSDR RFOne support (closes #121, closes #203)

- BladeRF 2.0 micro / x40 / x115 detected via SoapyBladeRF (47 MHz–6 GHz,
  TX capable, gain 0–66 dB)
- HydraSDR RFOne detected via SoapyHydraSDR (24 MHz–1800 MHz, RX only,
  linear gain 0–21)
- Both follow the established SoapySDR command-builder pattern and support
  FM demod, ADS-B, ISM, AIS, and I/Q capture
- Bump version to 2.31.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
James Smith
2026-07-07 12:08:03 +01:00
parent dfab714104
commit 1faa390ea7
8 changed files with 342 additions and 6 deletions
+6 -2
View File
@@ -49,7 +49,9 @@ def _get_capabilities_for_type(sdr_type: SDRType) -> SDRCapabilities:
"""Get default capabilities for an SDR type."""
# Import here to avoid circular imports
from .airspy import AirspyCommandBuilder
from .bladerf import BladeRFCommandBuilder
from .hackrf import HackRFCommandBuilder
from .hydrasdr import HydraSDRCommandBuilder
from .limesdr import LimeSDRCommandBuilder
from .rtlsdr import RTLSDRCommandBuilder
from .sdrplay import SDRPlayCommandBuilder
@@ -62,6 +64,8 @@ def _get_capabilities_for_type(sdr_type: SDRType) -> SDRCapabilities:
SDRType.AIRSPY: AirspyCommandBuilder,
SDRType.SDRPLAY: SDRPlayCommandBuilder,
SDRType.USRP: USRPCommandBuilder,
SDRType.BLADE_RF: BladeRFCommandBuilder,
SDRType.HYDRA_SDR: HydraSDRCommandBuilder,
}
builder_class = builders.get(sdr_type)
@@ -93,8 +97,8 @@ def _driver_to_sdr_type(driver: str) -> SDRType | None:
"airspyhf": SDRType.AIRSPY, # Airspy HF+ uses same builder
"sdrplay": SDRType.SDRPLAY,
"uhd": SDRType.USRP,
# Future support
# 'bladerf': SDRType.BLADE_RF,
"bladerf": SDRType.BLADE_RF,
"hydrasdr": SDRType.HYDRA_SDR,
}
return mapping.get(driver.lower())