import re class MockSDS1000XEDevice: def __init__(self): # Mock internal values self._channels = [{"AMPL" : None, "VDIV" : None} for i in range(0, 4)] def _handleRequest(self, request: str) -> str: m = re.search(r"C(?P\d):(?P\w+)\??\s(?P.+)", request.strip()) if not m: return None channelIndex = int(m.group("channel")) - 1 opcode = m.group("opcode") if opcode == "PAVA": arg = m.group("arg") value = self._channels[channelIndex].get(arg) unit = "Hz" if arg == "FREQ" else "V" if value is None: return None else: response = f"C{m.group('channel')}:PAVA {arg},{value:.6E}{unit}" return response elif opcode == "VDIV": arg = float(m.group("arg").rstrip("V")) self._channels[channelIndex]["VDIV"] = arg return None return None def setAmplitude(self, channel: int, value: float) -> None: self._channels[channel - 1]["AMPL"] = value def setPeakToPeak(self, channel: int, value: float) -> None: self._channels[channel - 1]["PKPK"] = value def setRMS(self, channel: int, value: float) -> None: self._channels[channel - 1]["RMS"] = value def setFrequency(self, channel: int, value: float) -> None: self._channels[channel - 1]["FREQ"] = value def getVoltsPerDivision(self, channel: int) -> float: return self._channels[channel - 1]["VDIV"]