def get_error_info32bit(self, verbose=False): """Read an error from the error register. Args: verbose (bool): If True then print the error message to stdout Returns: errorreg (int) errorvalue (int) """ dwErrorReg = pyspcm.uint32(0) lErrorValue = pyspcm.int32(0) if verbose: buffer = (ct.c_uint8 * pyspcm.ERRORTEXTLEN)() pyspcm.spcm_dwGetErrorInfo_i32(self.hCard, pyspcm.byref(dwErrorReg), pyspcm.byref(lErrorValue), buffer) bb = (bytearray(buffer)).decode().strip('\x00') print('get_error_info32bit: %d %d: %s' % (dwErrorReg.value, lErrorValue.value, bb)) else: pyspcm.spcm_dwGetErrorInfo_i32(self.hCard, pyspcm.byref(dwErrorReg), pyspcm.byref(lErrorValue), None) return (dwErrorReg.value, lErrorValue.value)
def get_error_info32bit(session): """ Read an error from the error register """ dwErrorReg = pyspcm.uint32(0) lErrorValue = pyspcm.int32(0) pyspcm.spcm_dwGetErrorInfo_i32(session, pyspcm.byref(dwErrorReg), pyspcm.byref(lErrorValue), None) return (dwErrorReg.value, lErrorValue.value)
def get_card_type(self, verbose=0): """Read card type.""" # read type, function and sn and check for D/A card lCardType = pyspcm.int32(0) pyspcm.spcm_dwGetParam_i32( self.hCard, pyspcm.SPC_PCITYP, pyspcm.byref(lCardType)) if verbose: print('card_type: %s' % szTypeToName(lCardType.value)) return (lCardType.value)
def _param32bit(self, param): """Read a 32-bit parameter from the device.""" data = pyspcm.int32(0) pyspcm.spcm_dwGetParam_i32(self.hCard, param, pyspcm.byref(data)) return (data.value)
def respond(self, cmd=None): """Respond the command requested by the user. Command can also be sent by TCP message to the client.""" if cmd == None: cmd = self.edit.text() else: pass # self.set_status('Received string = '+cmd.replace('#','').split('=')[1]) # print what occupancy string is received if 'load' in cmd and 'rload' not in cmd: self.set_status('Loading AWG data...') try: path = cmd.split('=')[1].strip('file:///') if self.rr.rearrToggle == False: self.rr.awg.load( path ) # NB load is defined differently in rearrHandler, depending if rearrToggle is true/false elif self.rr.rearrToggle == True: self.rr.rearr_load(path) if self.auto_plot: plot_playback(self.rr.awg.filedata) self.set_status('File loaded from ' + path) except Exception as e: self.set_status('Failed to load AWG data from ' + cmd.split('=')[1]) logger.error('Failed to load AWG data from ' + cmd.split('=')[1] + '\n' + str(e)) elif 'save' in cmd: try: path = cmd.split('=')[1] if self.rr.rearrToggle == False: self.rr.awg.saveData(path) elif self.rr.rearrToggle == True: self.rr.rearr_saveData(path) self.set_status('File saved to ' + path) except Exception as e: logger.error('Failed to save AWG data to ' + cmd.split('=')[1] + '\n' + str(e)) elif 'reset_server' in cmd: self.reset_tcp() if self.server.isRunning(): status = 'Server running.' else: status = 'Server stopped.' if self.client.isRunning(): status = 'Client running.' else: status = 'Client stopped.' self.set_status(status) elif 'send_trigger' in cmd: # self.server.add_message(0, 'Trigger sent to DExTer.\n'+'0'*1600) self.set_status('Triggering DExTer not yet supported.') elif 'auto_plot' in cmd: try: self.auto_plot = eval(cmd.split('=')[1]) plot_playback(self.rr.awg.filedata) except Exception as e: logger.error('Failed to evaluate command:\t%s\n' % cmd + str(e)) elif 'start_awg' in cmd: self.rr.awg.start() if spcm_dwGetParam_i32(AWG.hCard, AWG.registers[3], byref(int32(0))) == 0: self.set_status('AWG started.') else: self.set_status('AWG crashed. Use the reset_awg coommand.') print( spcm_dwGetParam_i32(AWG.hCard, AWG.registers[3], byref(int32(0)))) elif 'stop_awg' in cmd: self.rr.awg.stop() self.set_status('AWG stopped.') elif 'set_data' in cmd: # self.set_status('Received string = '+cmd.replace('#','').split('=')[1]) # print what occupancy string is received #try: t = time.time() if self.rr.rearrToggle == False: self.rr.awg.loadSeg( eval(cmd.split('=')[1]) ) # NB loadSeg defined differently in rearrHandler if rearrToggle = true/false elif self.rr.rearrToggle == True: self.rr.rearr_loadSeg(eval(cmd.split('=')[1])) self.set_status('Set data: ' + cmd.split('=')[1]) self.t_load = time.time() - t # except Exception as e: #logger.error('Failed to set AWG data: '+cmd.split('=')[1]+'\n'+str(e)) self.server.add_message(1, 'go' * 1000) elif 'set_step' in cmd: try: self.rr.awg.setStep(*eval(cmd.split('=')[1])) self.set_status('Set step: ' + cmd.split('=')[1]) except Exception as e: logger.error('Failed to set AWG step: ' + cmd.split('=')[1] + '\n' + str(e)) elif 'reset_awg' in cmd: self.renewAWG(cmd) # elif 'get_times' in cmd: logger.info("Data transfer time: %.4g s" % self.t_load) elif 'rearrange' in cmd: # recevive occupancy string from Pydex if self.rr.rearrToggle == True: try: self.rr.setRearrSeg(cmd.replace('#', '').split('=')[1]) # self.set_status('Received string = '+cmd.replace('#','').split('=')[1]) # print what occupancy string is received except Exception as e: logger.error('Failed to calculate steps: ' + cmd.replace('#', '').split('=')[1] + '\n' + str(e)) elif self.rr.rearrToggle == False: pass # If rearr mode is off, ignore rearr TCP strings from AWG elif 'rearr_on' in cmd: # try: self.renewAWG('chans=%s' % list(self.rr.awg.channel_enable)) self.rr.awg.load(self.rearr_base_path) # load basic data self.rr.activate_rearr(toggle=True) if '=' in cmd: # if equals, then load in the specified rearragement config file. self.rr.rr_config = cmd.partition('=')[2].strip('file:///') self.set_status('Calculating moves...') self.rr.calculateAllMoves() self.set_status('Moves uploaded') #self.rr.awg.start(). if spcm_dwGetParam_i32(AWG.hCard, AWG.registers[3], byref(int32(0))) == 0: self.set_status('AWG started.') else: self.set_status('AWG crashed. Use the reset_awg coommand.') print( spcm_dwGetParam_i32(AWG.hCard, AWG.registers[3], byref(int32(0)))) # except Exception as e: # logger.error('Failed to calculate all rearrangement segments: '+cmd.split('=')[1]+'\n'+str(e)) elif 'rearr_off' in cmd: self.rr.activate_rearr(toggle=False) self.set_status('Rearrangement is now off.') if self.rr.OGfile is not None: self.rr.awg.load(self.rr.OGfile) self.set_status('Loaded: ' + self.rr.OGfile) elif cmd.split( '=' )[0] == 'rload': # required in order to overwrite the original file saved in rearrHandler. try: path = cmd.split('=')[1].strip('file:///') self.rr.OGfile = None self.rr.rearr_load(path) except Exception as e: self.set_status('Failed to load AWG data from ' + cmd.split('=')[1]) logger.error('Failed to load AWG data from ' + cmd.split('=')[1] + '\n' + str(e)) else: self.set_status('Command not recognised:\t %s' % cmd) self.edit.setText('') # reset cmd edit