# RadioPhotonic PCB PC Software PyQt6-приложение для управления лазерной платой по UART. Вся рабочая логика сосредоточена в пакете `laser_control`; старый FreeSimpleGUI и legacy-модули удалены. ## Структура ```text . ├── _device_main.py ├── run ├── run_device_main.bat ├── requirements.txt ├── laser_control/ │ ├── __init__.py │ ├── constants.py │ ├── controller.py │ ├── conversions.py │ ├── exceptions.py │ ├── models.py │ ├── protocol.py │ ├── transport.py │ ├── validators.py │ ├── example_usage.py │ └── gui/ │ ├── main.py │ ├── theme.py │ ├── window.py │ ├── sections.py │ └── worker.py ``` ## Что поддерживается - ручной режим: `T1/T2/I1/I2` - live telemetry: `T1/T2`, внешние термисторы, фотодиоды, `3V3/5V1/5V2/7V0` - AD9102: saw/SRAM режимы и загрузка custom waveform - AD9833, DS1809 и STM32 DAC через отдельные firmware-команды - сохранение профиля на SD-карту устройства - сброс платы командой `DEFAULT_ENABLE` Не поддерживается и удалено из PC-кода: - legacy-команды `0x3333` и `0x5555` - старый flow про `saved data` и `remove file` - task/sweep-режим как публичный сценарий ## Установка ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Запуск GUI ```bash source .venv/bin/activate ./run ``` или ```bash python3 -m laser_control.gui.main ``` Автоподключение использует первый доступный USB UART-порт. При подключении приложение только читает текущее состояние и телеметрию, без автоприменения ручных параметров. Совместимый launcher `_device_main.py` сохранён, но он только проксирует запуск в новый PyQt entrypoint. ## Публичный API ```python from laser_control import ( LaserController, Measurements, DeviceStatus, DeviceState, ValidationError, CommunicationError, ) ``` ## Пример встраивания ```python from laser_control import LaserController with LaserController(port="/dev/ttyUSB0") as controller: controller.set_manual_mode( temp1=25.0, temp2=30.0, current1=40.0, current2=35.0, ) print(controller.get_measurements()) ```