summaryrefslogtreecommitdiffstats
path: root/lab_control/test/mock_jds6600_device.py
diff options
context:
space:
mode:
Diffstat (limited to 'lab_control/test/mock_jds6600_device.py')
-rw-r--r--lab_control/test/mock_jds6600_device.py50
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
+