added generator mode

This commit is contained in:
Ayzen
2026-04-01 13:00:01 +03:00
parent 43d1c226a1
commit 4abc95c372
16 changed files with 936 additions and 0 deletions
@@ -15,6 +15,7 @@ from ..models import (
DeviceInfo,
DeviceLimits,
DeviceStatus,
GeneratorSettings,
Packet,
VNADatapointPacket,
VNASweepSettings,
@@ -26,6 +27,7 @@ logger = logging.getLogger(__name__)
_DEVICE_INFO_STRUCT = struct.Struct("<HBBBBcQQIIHhhIIBQBH")
_SWEEP_SETTINGS_STRUCT = struct.Struct("<QQHIhBHhH")
_GENERATOR_SETTINGS_STRUCT = struct.Struct("<QhBB")
_DEVICE_CONFIG_V1_STRUCT = struct.Struct("<IBHB")
_DEVICE_CONFIG_VFF_STRUCT = struct.Struct("<IIIBH")
_DEVICE_CONFIG_VFE_STRUCT = struct.Struct("<H")
@@ -275,6 +277,16 @@ def encode_sweep_settings_payload(settings: VNASweepSettings) -> bytes:
)
def encode_generator_settings_payload(settings: GeneratorSettings) -> bytes:
"""Encode ``GeneratorSettings`` payload."""
return _GENERATOR_SETTINGS_STRUCT.pack(
int(round(settings.frequency_hz)),
int(round(settings.power_dbm * 100.0)),
int(settings.active_port),
int(bool(settings.apply_amplitude_correction)),
)
def parse_device_config(payload: bytes, family: HardwareFamily) -> DeviceConfigVariant:
"""Decode family-specific `DeviceConfiguration` payload."""
if len(payload) != 15:
@@ -378,6 +390,8 @@ def encode_packet_payload(packet_type: PacketType, payload: object) -> bytes:
if packet_type == PacketType.SWEEP_SETTINGS and isinstance(payload, VNASweepSettings):
return encode_sweep_settings_payload(payload)
if packet_type == PacketType.GENERATOR and isinstance(payload, GeneratorSettings):
return encode_generator_settings_payload(payload)
if packet_type == PacketType.DEVICE_CONFIGURATION and isinstance(payload, DeviceConfigVariant):
return encode_device_config_payload(payload)
@@ -396,6 +410,7 @@ NO_PAYLOAD_PACKET_TYPES = {
PacketType.REQUEST_DEVICE_CONFIGURATION,
PacketType.REQUEST_DEVICE_STATUS,
PacketType.INITIATE_SWEEP,
PacketType.SET_IDLE,
PacketType.RESET_DEVICE_CONFIGURATION,
}