# RFG STM32 ADC Receiver GUI PyQtGraph-приложение для чтения свипов из последовательного порта и отображения: - текущего свипа - водопада по свипам - FFT текущего свипа - B-scan по FFT После рефакторинга проект разделен на пакет `rfg_adc_plotter`. Старый запуск через `RFG_ADC_dataplotter.py` сохранен как совместимый wrapper. ## Структура - `RFG_ADC_dataplotter.py` — совместимый entrypoint - `rfg_adc_plotter/cli.py` — CLI-аргументы - `rfg_adc_plotter/io/` — чтение порта и парсеры протоколов - `rfg_adc_plotter/processing/` — FFT, нормировка, калибровка, поиск пиков - `rfg_adc_plotter/state/` — runtime state и кольцевые буферы - `rfg_adc_plotter/gui/pyqtgraph_backend.py` — GUI на PyQtGraph - `replay_pty.py` — воспроизведение захвата через виртуальный PTY ## Зависимости Минимально нужны: ```bash python3 -m venv .venv . .venv/bin/activate pip install numpy pyqtgraph PyQt5 ``` Если `pyserial` не установлен, приложение попробует открыть порт через raw TTY. ## Быстрый старт Запуск через старый entrypoint: ```bash .venv/bin/python RFG_ADC_dataplotter.py /dev/ttyACM0 ``` Запуск напрямую через пакет: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 ``` Показать справку: ```bash .venv/bin/python RFG_ADC_dataplotter.py --help ``` ## Примеры запуска Обычный запуск с живого порта: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --baud 115200 ``` Больше истории в водопаде и ограничение FPS: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --max-sweeps 400 --max-fps 20 ``` Фиксированный диапазон по оси Y: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --ylim -1000,1000 ``` С включенной нормировкой `simple`: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --norm-type simple ``` Режим измерения ширины главного пика FFT: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --calibrate ``` Поиск топ-3 пиков относительно rolling median reference: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --peak_search --peak_ref_window 1.5 ``` Вычитание среднего спектра по последним секундам: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --spec-mean-sec 3 ``` ## Протоколы ввода ASCII-протокол по умолчанию: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 ``` Legacy binary: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --bin ``` Logscale binary с парой `int32`: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --logscale ``` Complex binary `16-bit x2`: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_16_bit_x2 ``` Тестовый парсер для экспериментального `16-bit x2` потока: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_test ``` Комплексный ASCII-поток `step real imag`: ```bash .venv/bin/python -m rfg_adc_plotter.main /dev/ttyACM0 --parser_complex_ascii ``` ## Локальная проверка через replay_pty Если есть лог-файл захвата, его можно воспроизвести как виртуальный последовательный порт. В первом терминале: ```bash .venv/bin/python replay_pty.py my_picocom_logfile.txt --pty /tmp/ttyVIRT0 --speed 1.0 ``` Во втором терминале: ```bash .venv/bin/python -m rfg_adc_plotter.main /tmp/ttyVIRT0 ``` Максимально быстрый replay: ```bash .venv/bin/python replay_pty.py my_picocom_logfile.txt --pty /tmp/ttyVIRT0 --speed 0 ``` ## Удаленный захват по SSH В приложении SSH-источник не встроен. Для удаленной проверки нужно сначала получить поток или лог на локальную машину, а затем либо: - запускать GUI напрямую на локальном PTY - сохранять поток в файл и воспроизводить его через `replay_pty.py` Пример команды для ручной диагностики удаленного устройства: ```bash ssh 192.148.0.148 'ls -l /dev/ttyACM0' ``` Если на удаленной машине есть доступ к потоку, удобнее сохранять его в файл и уже этот файл гонять локально через `replay_pty.py`. ## Проверка и тесты Синтаксическая проверка: ```bash python3 -m compileall RFG_ADC_dataplotter.py replay_pty.py rfg_adc_plotter tests ``` Запуск тестов: ```bash .venv/bin/python -m unittest discover -s tests -v ``` ## Замечания - Поддерживается только PyQtGraph backend. - `--backend mpl` оставлен только для совместимости CLI и завершится ошибкой. - Каталоги `sample_data/` и локальные логи добавлены в `.gitignore` и не считаются частью обязательного tracked-состояния репозитория.