Исходный код 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()