Исходный код soniks_client.rx_device
"""Выбор приёмника SDR по частоте прохода.
``OBSERVATION__SOAPY_RX_DEVICE`` может содержать либо одну строку драйвера,
либо несколько записей вида ``<МГц>-<МГц>:<драйвер>``, разделённых пробелами.
Во втором случае устройство выбирается по частоте прохода.
"""
from core.configs import logger
from core.exceptions import NoCompatibleRxDeviceError
[документация]
def select_rx_device_by_frequency(rx_device: str, frequency: int) -> str:
"""Выбрать драйвер приёмника, покрывающего частоту прохода.
Raises:
NoCompatibleRxDeviceError: Запись не разобралась либо ни один
диапазон не покрывает частоту. Наблюдение не начинается.
"""
devices = rx_device.split()
if len(devices) == 1:
return devices[0]
frequency_mhz = frequency / 10**6
for device_range in devices:
try:
frequency_range, device = device_range.split(":")
except ValueError as e:
logger.error(
"Неверный формат записи устройства: "
"ожидается <min. freq.>-<max. freq.>:<driver spec>, "
"получено %r",
device_range,
)
raise NoCompatibleRxDeviceError() from e
try:
frequency_min_mhz, frequency_max_mhz = map(
float, frequency_range.split("-")
)
except ValueError as e:
logger.error(
"Неверный формат диапазона частот: "
"ожидается <min. freq.>-<max. freq.>, "
"получено %r",
frequency_range,
)
raise NoCompatibleRxDeviceError() from e
if frequency_min_mhz <= frequency_mhz <= frequency_max_mhz:
return device
logger.error(
"Не найдено устройство для частоты: %.2f МГц, "
"проверьте значение SOAPY_RX_DEVICE в настройках",
frequency_mhz,
)
raise NoCompatibleRxDeviceError()