Esempio n. 1
0
    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)
Esempio n. 3
0
 def get_card_memory(self, verbose=0):
     data = pyspcm.int64(0)
     pyspcm.spcm_dwGetParam_i64(
         self.hCard, pyspcm.SPC_PCIMEMSIZE, pyspcm.byref(data))
     if verbose:
         print('card_memory: %s' % (data.value))
     return (data.value)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 def _param64bit(self, param):
     """Read a 64-bit parameter from the device."""
     data = pyspcm.int64(0)
     pyspcm.spcm_dwGetParam_i64(self.hCard, param, pyspcm.byref(data))
     return (data.value)
Esempio n. 7
0
    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