Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 def createOutputState(self, digi, A0=0.0, A1=0.0):
     output = OutputState(digi=digi, A0=A0, A1=A1)
     return output
Ejemplo n.º 7
0
    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)