Files
radar_system/python_app/hardware_full/librevna_service.py
T
2026-10-05 16:46:28 +03:00

47 lines
1.5 KiB
Python

"""Native single-device LibreVNA service used by acquisition and device-limit queries."""
from __future__ import annotations
from dataclasses import dataclass, field
from python_app.hardware_full.librevna_backends import NativeLibreVnaBackend
from python_app.hardware_full.librevna_driver.models import SweepResult
from python_app.models.run_config_model import RadarSweepModel
@dataclass(slots=True)
class LibreVnaService:
"""Provide the native single-device API; factories select mock acquisition."""
serial: str | None = None
strict_protocol_version: int = 14
backend_mode: str = "auto"
_backend: NativeLibreVnaBackend = field(init=False, repr=False)
def __post_init__(self) -> None:
if self.backend_mode.strip().lower() not in {"auto", "native"}:
raise ValueError(f"Unsupported native LibreVNA backend mode: {self.backend_mode}")
self._backend = NativeLibreVnaBackend(self.serial, self.strict_protocol_version)
def open(self) -> None:
self._backend.open()
def close(self) -> None:
self._backend.close()
def configure(self, sweep: RadarSweepModel) -> None:
self._backend.configure(sweep)
def read_device_limits(self) -> dict[str, float | int]:
opened_here = not self._backend.is_open
try:
if opened_here:
self.open()
return self._backend.read_device_limits()
finally:
if opened_here:
self.close()
def acquire(self) -> SweepResult:
return self._backend.acquire()