36 lines
1.4 KiB
Markdown
36 lines
1.4 KiB
Markdown
# 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()`.
|