@@ -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