Исходный код core.configs.flowgraph

"""Настройки потокового графа и таблицы соответствия режимов демодуляции.

Каждое поле ``FlowgraphSettings`` доезжает до командной строки
``flowgraph_dispatcher`` как аргумент; поля со значением ``None``
не передаются.

``SCRIPTS`` и ``MODES`` — предметные данные, а не настройки: они описывают
внешний контракт с ``gr-satnogs`` и не переопределяются из окружения.
Полями модели они были по недосмотру, из-за чего ``FLOWGRAPH__MODES``
с JSON-значением молча перезаписывал таблицу целиком."""

from pydantic import BaseModel

SCRIPTS: dict[str, str] = {
    "AFSK1K2": "satnogs_afsk1200_ax25.py",
    "AMSAT_DUV": "satnogs_amsat_fox_duv_decoder.py",
    "APT": "satnogs_noaa_apt_decoder.py",
    "ARGOS_BPSK_PMT_A3": "satnogs_argos_bpsk_ldr.py",
    "BPSK": "satnogs_bpsk.py",
    "CW": "satnogs_cw_decoder.py",
    "FM": "satnogs_fm.py",
    "FSK": "satnogs_fsk.py",
    "GFSK_RKTR": "satnogs_reaktor_hello_world_fsk9600_decoder.py",
    "GFSK/BPSK": "satnogs_qubik_telem.py",
    "SSTV": "satnogs_fm.py",
    "SSTV_PD120": "satnogs_sstv_pd120_demod.py",
    "GFSK_GEOSCAN": "satnogs_geoscan_gfsk_decoder.py",
    "GMSK USP": "satnogs_usp_fsk_decoder.py"
}

# ``script_filename`` не справочный. Флоуграф по нему не выбирается —
# это делает диспетчер по ``--mode``, — но имя уходит шестым аргументом в
# ``satnogs-pre``/``satnogs-post``, а оттуда в ``scripts/find_samp_rate.py``,
# который по подстрокам в имени определяет частоту дискретизации IQ: и для
# UDP-потока в gr-satellites, и для имени IQ-дампа. Неверное имя = неверная
# частота у обоих, молча.
MODES: dict[str, dict[str, str]] = {
    "AFSK": {
        "script_filename": SCRIPTS["AFSK1K2"],
    },
    "APT": {
        "script_filename": SCRIPTS["APT"],
    },
    "BPSK": {
        "script_filename": SCRIPTS["BPSK"],
    },
    "BPSK PMT-A3": {
        "script_filename": SCRIPTS["ARGOS_BPSK_PMT_A3"],
    },
    "CW": {
        "script_filename": SCRIPTS["CW"],
    },
    "DOKA": {
        "script_filename": SCRIPTS["FSK"],
    },
    "DUV": {
        "script_filename": SCRIPTS["AMSAT_DUV"],
    },
    "FM": {
        "script_filename": SCRIPTS["FM"],
    },
    "FSK": {
        "script_filename": SCRIPTS["FSK"],
    },
    "FSK AX.100 Mode 5": {
        "script_filename": SCRIPTS["FSK"],
    },
    "FSK AX.100 Mode 6": {
        "script_filename": SCRIPTS["FSK"],
    },
    "GFSK": {
        "script_filename": SCRIPTS["FSK"],
    },
    "GFSK Rktr": {
        "script_filename": SCRIPTS["GFSK_RKTR"],
    },
    "GFSK/BPSK": {
        "script_filename": SCRIPTS["GFSK/BPSK"],
    },
    "GMSK": {
        "script_filename": SCRIPTS["FSK"],
    },
    "MSK": {
        "script_filename": SCRIPTS["FSK"],
    },
    "MSK AX.100 Mode 5": {
        "script_filename": SCRIPTS["FSK"],
    },
    "MSK AX.100 Mode 6": {
        "script_filename": SCRIPTS["FSK"],
    },
    "SSTV": {
        "script_filename": SCRIPTS["FM"],
    },
    "SSTV_PD120": {
        "script_filename": SCRIPTS["SSTV_PD120"],
    },
    "GFSK_GEOSCAN": {
        "script_filename": SCRIPTS["GFSK_GEOSCAN"],
    },
    "GMSK USP": {
        "script_filename": SCRIPTS["GMSK USP"],
    },
}


[документация] class FlowgraphSettings(BaseModel): """Параметры потокового графа. Каждое поле становится аргументом ``--kebab-case=значение``; поля со значением ``None`` в командную строку не попадают. Таблицы режимов живут рядом, в константах модуля: ``SCRIPTS`` и ``MODES``. """ RX_SAMP_RATE: str | None = None RX_BANDWIDTH: int | None = None DOPPLER_CORR_PER_SEC: int | None = None LO_OFFSET: int | None = None LO_TRANSVERTER: int | None = None PPM_ERROR: float = 0 GAIN_MODE: str = "Overall" RF_GAIN: float | None = None ANTENNA: str = "RX" DEV_ARGS: str | None = None STREAM_ARGS: str | None = None TUNE_ARGS: str | None = None OTHER_SETTINGS: str | None = None DC_REMOVAL: bool | None = None BB_FREQ: int | None = None ENABLE_IQ_DUMP: bool = False IQ_DUMP_FILENAME: str | None = None UDP_DUMP_HOST: str = "127.0.0.1" UDP_DUMP_PORT: int = 57356 FLOWGRAPH_DISPATCHER: str = "flowgraph_dispatcher" DEFAULT_MODE: str = "FM"