# Hardware layer ## 1. LibreVNA - `hardware_full/librevna_service.py`: orchestration facade. - `hardware_full/librevna_backends.py`: - `NativeLibreVnaBackend` - `MockLibreVnaBackend` - `hardware_full/librevna_driver/*`: низкоуровневый USB/protocol stack. ### Native flow 1. `LibreVnaService.open()` 2. `configure(RadarSweepModel)` 3. `acquire_s21()` 4. `close()` ### Device limits - `read_device_limits()` возвращает min/max frequency, IFBW, power и max points. - GUI применяет лимиты для clamp/labels и live B-scan frequency bounds. ## 2. Switches - `switch_service.py`: выбор mock/native драйвера по конфигурации. - `switch_drivers/*`: - `MockSwitchDriver` - `H7992Driver` - `HMC349ADriver` - `gpio_uapi.py` (Linux GPIO v2 wrapper) ### Инварианты - Позиции валидируются на уровне драйвера. - Драйверы требуют `open()` перед `switch_to()`. - Для native GPIO ошибки ОС конвертируются в Python `RuntimeError` с контекстом. ## 3. Расширение hardware слоя - Новый радар: добавить backend с тем же контрактом, подключить в service. - Новый switch: реализовать `SwitchDriverProtocol` и добавить ветку в `SwitchService._build_driver()`.