sweep feature added
This commit is contained in:
@@ -49,6 +49,9 @@ from .constants import (
|
||||
PROFILE_SAVE_SECTION_WAVEFORM_TEXT,
|
||||
STM32_DAC_CODE_MAX,
|
||||
STM32_DAC_CODE_MIN,
|
||||
SWEEP_PAUSE_MAX_MS,
|
||||
SWEEP_STEP_PERIOD_MAX_US,
|
||||
SWEEP_STEP_PERIOD_MIN_US,
|
||||
STATUS_RESPONSE_LENGTH,
|
||||
WAIT_AFTER_SEND_SEC,
|
||||
TEC_MODULATION_AMPLITUDE_CODE_MAX,
|
||||
@@ -62,7 +65,14 @@ from .exceptions import (
|
||||
DeviceStateError,
|
||||
InvalidParameterError,
|
||||
)
|
||||
from .models import DeviceState, DeviceStatus, Measurements, ProfileSaveRequest
|
||||
from .models import (
|
||||
DeviceState,
|
||||
DeviceStatus,
|
||||
Measurements,
|
||||
ProfileSaveRequest,
|
||||
SweepSettings,
|
||||
SweepTarget,
|
||||
)
|
||||
from .protocol import Protocol
|
||||
from .transport import SerialTransport
|
||||
from .validators import ParameterValidator
|
||||
@@ -472,6 +482,23 @@ class LaserController:
|
||||
amplitude_code,
|
||||
)
|
||||
|
||||
def configure_sweep(self, settings: SweepSettings) -> None:
|
||||
"""Start (or stop, if disabled) a firmware staircase sweep of laser 2 current or the STM32 DAC."""
|
||||
if settings.enabled:
|
||||
code_max = STM32_DAC_CODE_MAX if settings.target == SweepTarget.STM32_DAC else 0xFFFF
|
||||
self._validate_int_range(settings.min_code, "min_code", 0, code_max)
|
||||
self._validate_int_range(settings.max_code, "max_code", settings.min_code, code_max)
|
||||
self._validate_int_range(settings.step_code, "step_code", 1, code_max)
|
||||
self._validate_int_range(
|
||||
settings.step_period_us,
|
||||
"step_period_us",
|
||||
SWEEP_STEP_PERIOD_MIN_US,
|
||||
SWEEP_STEP_PERIOD_MAX_US,
|
||||
)
|
||||
self._validate_int_range(settings.pause_ms, "pause_ms", 0, SWEEP_PAUSE_MAX_MS)
|
||||
self._send_and_expect_ok(Protocol.encode_sweep_control(settings))
|
||||
logger.info("Sweep configured: %s", settings)
|
||||
|
||||
def save_profile_to_sd(self, request: ProfileSaveRequest) -> None:
|
||||
"""Stream a rendered profile INI and optional waveform CSV to the device SD card."""
|
||||
if not isinstance(request, ProfileSaveRequest):
|
||||
|
||||
Reference in New Issue
Block a user