Skip to content

Commit dc50f3c

Browse files
committed
Add check for PrawnBlaster binary programming support (via version number)
1 parent c9b90b2 commit dc50f3c

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

labscript_devices/PrawnBlaster/blacs_workers.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,40 @@ def init(self):
7171
self.prawnblaster.write(b"setinpin %d %d\r\n" % (i, in_pin))
7272
assert self.prawnblaster.readline().decode() == "ok\r\n"
7373

74+
# Check if fast serial is available
75+
self.fast_serial = self.version_greater_than((1, 1, 0))
76+
77+
def get_version(self):
78+
self.prawnblaster.write(b"version\r\n")
79+
version_str = self.prawnblaster.readline().decode()
80+
assert version_str.startswith("version: ")
81+
version = version_str[9:].strip()
82+
83+
version_overclock_list = version.split('-')
84+
overclock = False
85+
if len(version_overclock_list) == 2:
86+
if version_overclock_list[1] == 'overclock':
87+
overclock = True
88+
89+
version_number = version_overclock_list[0].split('.')
90+
assert len(version_number) == 3
91+
92+
return (int(version_number[0]), int(version_number[1]), int(version_number[2]), overclock)
93+
94+
def version_greater_than(self, target_version):
95+
version = self.get_version()
96+
if version[0] > target_version[0]:
97+
return True
98+
if version[0] < target_version[0]:
99+
return False
100+
if version[1] > target_version[1]:
101+
return True
102+
if version[1] < target_version[1]:
103+
return False
104+
if version[2] >= target_version[2]:
105+
return True
106+
return False
107+
74108
def check_status(self):
75109
"""Checks the operational status of the PrawnBlaster.
76110
@@ -296,7 +330,7 @@ def transition_to_buffered(self, device_name, h5file, initial_values, fresh):
296330
for pseudoclock, pulse_program in enumerate(pulse_programs):
297331
total_inst = len(pulse_program)
298332
# check if it is more efficient to fully refresh
299-
if not fresh and self.smart_cache[pseudoclock] is not None:
333+
if not fresh and self.smart_cache[pseudoclock] is not None and self.fast_serial:
300334
# get more convenient handles to smart cache arrays
301335
curr_inst = self.smart_cache[pseudoclock]
302336

@@ -316,8 +350,8 @@ def transition_to_buffered(self, device_name, h5file, initial_values, fresh):
316350
if new_inst / total_inst > 0.1:
317351
fresh = True
318352

319-
if fresh or self.smart_cache[pseudoclock] is None:
320-
print('programming from scratch')
353+
if (fresh or self.smart_cache[pseudoclock] is None) and self.fast_serial:
354+
print('binary programming')
321355
self.prawnblaster.write(b"setb %d %d %d\r\n" % (pseudoclock, 0, len(pulse_program)))
322356
serial_buffer = b''
323357
for i in range(0, len(pulse_program)):

0 commit comments

Comments
 (0)