diff options
Diffstat (limited to 'lab_control/test/mock_jds6600_device.py')
-rw-r--r-- | lab_control/test/mock_jds6600_device.py | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/lab_control/test/mock_jds6600_device.py b/lab_control/test/mock_jds6600_device.py index 979ec69..c027573 100644 --- a/lab_control/test/mock_jds6600_device.py +++ b/lab_control/test/mock_jds6600_device.py @@ -18,6 +18,8 @@ class MockJDS6600Device(): self._portName = os.ttyname(self._slave) self._channels = [MockJDS6600Device.ChannelState() for i in [1, 2]] + + self._injectedFailureCounter = 0 self._mainThread = threading.Thread(target=self._mainLoop) self._mainThread.start() @@ -44,37 +46,48 @@ class MockJDS6600Device(): function = int(m.group("function")) args = m.group("args").split(",") - if opcode == "w": - # channel on/off - if function == 20: + # channel on/off + if function == 20: + if opcode == "w": self._channels[0].on = args[0] == "1" self._channels[1].on = args[1] == "1" + return ":ok\r\n" + elif opcode == "r": + return f":r20={int(self._channels[0].on)},{int(self._channels[1].on)}.\r\n" - # channel frequency - elif function == 23 or function == 24: + # channel frequency + elif function == 23 or function == 24: + ch = function - 23 + if opcode == "w": # Actual device takes a second argument for scaling, here we ignore it and always use 0 (Hz) - ch = function - 23 frequency = float(args[0]) / 100.0 - self._channels[ch].frequency = frequency - # channel amplitude - elif function == 25 or function == 26: + if self._injectedFailureCounter > 0: + self._channels[ch].frequency = 0.0 + self._injectedFailureCounter -= 1 + else: + self._channels[ch].frequency = frequency + return ":ok\r\n" + elif opcode == "r": + frequency = self._channels[ch].frequency + return f":r{function}={int(frequency)},0.\r\n" + + # channel amplitude + elif function == 25 or function == 26: + if opcode == "w": ch = function - 25 amplitude = float(args[0]) / 1000.0 self._channels[ch].amplitude = amplitude + return ":ok\r\n" - # channel function shape - elif function == 21 or function == 22: + # channel function shape + elif function == 21 or function == 22: + if opcode == "w": ch = function - 21 shape = int(args[0]) self._channels[ch].function = shape + return ":ok\r\n" - return ":ok\r\n" - - elif opcode == "r": - if function == 20: - return f":r20={int(self._channels[0].on)},{int(self._channels[1].on)}.\r\n" - # Unknown request format, no response return None @@ -109,3 +122,6 @@ class MockJDS6600Device(): def getFunction(self, ch: int) -> int: return self._channels[ch - 1].function + def injectFailures(self, count: int) -> None: + self._injectedFailureCounter += count + |