Ejemplo n.º 1
0
    def delta_status(self):
        """
        Loop thread function that collects and updates delta's status and command's output
        """
        recv_until = -1
        unpacker = Unpacker()
        while True:
            if self.killthread:
                self.udp_sock.close()
                return
            else:
                buf = self.udp_sock.recv(4096)
                payload = unpackb(buf)
                # print(payload)
                if payload[0] == 0:
                    if payload[2] - 1 - payload[
                            3] > recv_until:  # finish_index = next_index - 1 - command_in_queue
                        for i in range(recv_until + 1,
                                       payload[2] - 1 - payload[3] + 1):
                            if self.command_output[i]:
                                ret = self.control_sock.recv(4096)
                                unpacker.feed(ret)
                                ret = unpacker.__next__()
                                self.lock.acquire()
                                self.command_output[i] = self.command_output[
                                    i](ret)
                                self.lock.release()
                            elif self.command_output[i] is False:
                                self.lock.acquire()
                                self.command_output[i] = None
                                self.lock.release()
                            else:
                                print('         --->>>no way!!',
                                      self.command_output[i],
                                      self.command_output)

                        recv_until = payload[2] - 1 - payload[3]

                    self.atomic_status((payload[2], payload[3]))
                elif payload[0] == 1:
                    # print(payload)
                    self.lock.acquire()
                    self.head_status = payload[1:]
                    self.head_error = payload[3]
                    if self.head_error > 0:
                        if self.headerror_callback:
                            self.headerror_callback(self.head_error)
                        self.send_command([CMD_CLHE])
                    self.lock.release()
                elif payload[0] == 2:
                    self.lock.acquire()
                    self.serial_status = payload[1:]
                    self.lock.release()
Ejemplo n.º 2
0
    def delta_status(self):
        """
        Loop thread function that collects and updates delta's status and command's output
        """
        recv_until = -1
        unpacker = Unpacker()
        while True:
            if self.killthread:
                self.udp_sock.close()
                return
            else:
                buf = self.udp_sock.recv(4096)
                payload = unpackb(buf)
                # print(payload)
                if payload[0] == 0:
                    if payload[2] - 1 - payload[3] > recv_until:  # finish_index = next_index - 1 - command_in_queue
                        for i in range(recv_until + 1, payload[2] - 1 - payload[3] + 1):
                            if self.command_output[i]:
                                ret = self.control_sock.recv(4096)
                                unpacker.feed(ret)
                                ret = unpacker.__next__()
                                self.lock.acquire()
                                self.command_output[i] = self.command_output[i](ret)
                                self.lock.release()
                            elif self.command_output[i] is False:
                                self.lock.acquire()
                                self.command_output[i] = None
                                self.lock.release()
                            else:
                                print('         --->>>no way!!', self.command_output[i], self.command_output)

                        recv_until = payload[2] - 1 - payload[3]

                    self.atomic_status((payload[2], payload[3]))
                elif payload[0] == 1:
                    # print(payload)
                    self.lock.acquire()
                    self.head_status = payload[1:]
                    self.head_error = payload[3]
                    if self.head_error > 0:
                        if self.headerror_callback:
                            self.headerror_callback(self.head_error)
                        self.send_command([CMD_CLHE])
                    self.lock.release()
                elif payload[0] == 2:
                    self.lock.acquire()
                    self.serial_status = payload[1:]
                    self.lock.release()