def stream(self, seq, n_runs=REPEAT_INFINITELY, final=OutputState.ZERO()): if (self.__version_1_1_or_higher): #print("Debug information: Stream binary") #return self.__stream_binary(seq, n_runs, final) self.__stream_binary(seq, n_runs, final) else: #print("Debug information: Stream JSON") self.__stream_json(seq, n_runs, final)
def constant(self, state=OutputState.ZERO()): if isinstance(state, OutputState): state = state.getData() output = (0, state[0], state[1], state[2]) else: output = self.convert_sequence_step( (0, state[0], state[1], state[2])) self.proxy.constant(output)
def constant(self, state=OutputState.ZERO()): if isinstance(state, OutputState): state = state.getData() sequence_step = PulseMessage(ticks=0, digi=state[0], ao0=state[1], ao1=state[2]) else: if isinstance(state[0], list): sequence_step = self.convert_sequence_step( (0, state[0], state[1], state[2])) else: chans, a0, a1 = state sequence_step = PulseMessage(ticks=0, digi=chans, ao0=a0, ao1=a1) self.stub.constant(sequence_step, timeout=PulseStreamer.TIMEOUT)
def __stream_binary(self, seq, n_runs=REPEAT_INFINITELY, final=OutputState.ZERO()): HOST = self.ip_address #'192.168.0.101' #''127.0.0.1' # The server's hostname or IP address PORT = 21328 # The port used by the server MAGIC_TOKEN = 0x53504953 COMMAND = 0 if isinstance(final, OutputState): state = final.getData() final = (0, state[0], state[1], state[2]) else: final = self.convert_sequence_step( (0, final[0], final[1], final[2])) if isinstance(seq, Sequence): s_enc = self.enc_binary(seq.getData()) else: s_enc = self.enc_binary(seq) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) pulses = len(s_enc) // 4 pad = 32 - ((pulses * 9) % 32) #pad_list=pad*[0x0] CommandHeader = [ MAGIC_TOKEN, 1, COMMAND, 0x0, pulses * 9 + 32 + pad, 0 ] StreamHighLevelHeader = [ n_runs, pulses, final[2], final[3], final[1], 0x0, 0x0, 0x0, 0 ] s.sendall(struct.pack('<4I2Q', *CommandHeader)) s.sendall(struct.pack('<qQ2h4BQ', *StreamHighLevelHeader)) fmt = '<' + len(s_enc) // 4 * 'IBhh' s.sendall(struct.pack(fmt, *s_enc)) s.sendall(b'\0' * pad) data = s.recv(32) s.close() return_value = struct.unpack('<4I2Q', data) return return_value
def __stream_json(self, seq, n_runs=REPEAT_INFINITELY, final=OutputState.ZERO()): if isinstance(final, OutputState): state = final.getData() final = (0, state[0], state[1], state[2]) else: final = self.convert_sequence_step( (0, final[0], final[1], final[2])) if six.PY2: if isinstance(seq, Sequence): s = self.enc(seq.getData()) else: s = self.enc(seq) else: if isinstance(seq, Sequence): s = self.enc(seq.getData()).decode("utf-8") else: s = self.enc(seq).decode("utf-8") self.proxy.stream(s, n_runs, final)
def createOutputState(self, digi, A0=0.0, A1=0.0): output = OutputState(digi=digi, A0=A0, A1=A1) return output
def __stream_grpc(self, seq, n_runs=REPEAT_INFINITELY, final=OutputState.ZERO()): if isinstance(seq, Sequence): sequence = seq.getData() else: sequence = seq s = SequenceMessage() if type(sequence[0][1]) == list: for i in range(len(sequence)): t, chans, a0, a1 = sequence[i] if t > 0xffffffff: mod = t % 0xffffffff count = t // 0xffffffff for i in range(count): t = 0xffffffff s.pulse.extend( [self.convert_sequence_step((t, chans, a0, a1))]) else: t = mod s.pulse.extend( [self.convert_sequence_step((t, chans, a0, a1))]) else: for i in range(len(sequence)): t, chans, a0, a1 = sequence[i] if t > 0xffffffff: mod = t % 0xffffffff count = t // 0xffffffff for i in range(count): t = 0xffffffff s.pulse.extend([ PulseMessage(ticks=t, digi=chans, ao0=a0, ao1=a1) ]) else: t = mod s.pulse.extend( [PulseMessage(ticks=t, digi=chans, ao0=a0, ao1=a1)]) assert len( s.pulse ) <= 2e6, "The resulting sequence length exceeds the limit of two million sequnence steps" s.n_runs = n_runs if isinstance(final, OutputState): final = final.getData() conv_final = PulseMessage(ticks=0, digi=final[0], ao0=final[1], ao1=final[2]) else: if isinstance(final[0], list): conv_final = self.convert_sequence_step( (0, final[0], final[1], final[2])) else: chans, a0, a1 = final conv_final = PulseMessage(ticks=0, digi=chans, ao0=a0, ao1=a1) s.final.ticks = conv_final.ticks s.final.digi = conv_final.digi s.final.ao0 = conv_final.ao0 s.final.ao1 = conv_final.ao1 self.stub.stream(s, timeout=PulseStreamer.TIMEOUT)