class enlace(object):
    """ This class implements methods to the interface between Enlace and Application
    """
    def __init__(self, name):
        """ Initializes the enlace class
        """
        self.fisica = fisica(name)
        self.rx = RX(self.fisica)
        self.tx = TX(self.fisica)
        self.connected = False

    def enable(self):
        """ Enable reception and transmission
        """
        self.fisica.open()
        self.rx.threadStart()
        self.tx.threadStart()

    def disable(self):
        """ Disable reception and transmission
        """
        self.rx.threadKill()
        self.tx.threadKill()
        time.sleep(1)
        self.fisica.close()

    ################################
    # Application  interface       #
    ################################
    def sendData(self, data):
        """ Send data over the enlace interface
        """

        pacote, lenPayload = self.tx.cria_package(data)
        self.tx.sendBuffer(pacote)
        return lenPayload

    def getData(self):
        """ Get n data over the enlace interface
        Return the byte array and the size of the buffer
        """
        print('entrou na leitura e tentara ler ')
        data, size = self.rx.getNData()
        payload = self.rx.desfaz_package(data)

        return (payload, len(payload))
class enlace(object):
    """ This class implements methods to the interface between Enlace and Application
    """
    def __init__(self, name):
        """ Initializes the enlace class
        """
        self.fisica = fisica(name)
        self.rx = RX(self.fisica)
        self.tx = TX(self.fisica)
        self.connected = False

    def enable(self):
        """ Enable reception and transmission
        """
        self.fisica.open()
        self.rx.threadStart()
        self.tx.threadStart()

    def disable(self):
        """ Disable reception and transmission
        """
        self.rx.threadKill()
        self.tx.threadKill()
        time.sleep(1)
        self.fisica.close()

    ################################
    # Application  interface       #
    ################################

    def sendData(self, data):
        """ Send data over the enlace interface
        """
        self.client_sync()
        self.client_transmission(data)
        self.client_encerramento()

    def getData(self):
        """ Get n data over the enlace interface
        Return the byte array and the size of the buffer
        """
        print('entrou na leitura e tentara ler ')
        self.server_sync()
        payload = self.server_transmission()
        self.server_encerramento()

        return (payload, len(payload))

    def client_sync(self):
        sync1 = False
        sync2 = False
        payload = (0).to_bytes(1, byteorder="big")
        sync_package = self.tx.cria_package(payload, 1, 0, 0, 0)
        sync_package3 = self.tx.cria_package(payload, 3, 0, 0, 0)
        print(sync_package)
        self.tx.sendBuffer(sync_package)
        timer = time.time()
        while not sync1:
            data, size = self.rx.getNData()
            payload, tipo, ok, n_pacote, total_pacotes, pacote_esperado = self.rx.desfaz_package(
                data)
            if tipo == 2 and ok:
                sync1 = True
                print("recebeu tipo 2")
                break

            run_time = time.time() - timer
            if run_time > 5:
                print("Error: not receive type 2 ---------> Reenviando tipo 1")
                self.tx.sendBuffer(sync_package)
                timer = time.time()

        self.tx.sendBuffer(sync_package3)
        timer = time.time()
        while not sync2:
            data, size = self.rx.getNData()
            payload, tipo, ok, n_pacote, total_pacotes, pacote_esperado = self.rx.desfaz_package(
                data)
            if tipo == 40 and ok:
                sync2 = True
                print("recebeu tipo 40")
                break
            run_time = time.time() - timer
            if run_time > 5.0:
                print("mandou tipo 3")
                self.tx.sendBuffer(sync_package3)
                timer = time.time()

    def server_sync(self):
        sync1 = False
        sync2 = False
        payload_nulo = (0).to_bytes(1, byteorder="big")
        sync_package2 = self.tx.cria_package(payload_nulo, 2, 0, 0, 0)
        sync_package40 = self.tx.cria_package(payload_nulo, 40, 0, 0, 0)

        while not sync1:
            data, size = self.rx.getNData()
            payload, tipo, ok, n_pacote, total_pacotes, pacote_esperado = self.rx.desfaz_package(
                data)
            if tipo == 1 and ok:
                sync1 = True
                print("recebeu tipo 1")
                break

        self.tx.sendBuffer(sync_package2)
        print("Enviou tipo 2")
        timer = time.time()
        while not sync2:
            data, size = self.rx.getNData()
            payload, tipo, ok, n_pacote, total_pacotes, pacote_esperado = self.rx.desfaz_package(
                data)
            if tipo == 3 and ok:
                sync2 = True
                print("recebeu tipo 3")
                break

            run_time = time.time() - timer
            if run_time > 5.0:
                print("Erro: Type 3 not received --------> Reenviando tipo 2")
                self.tx.sendBuffer(sync_package2)
                timer = time.time()
        self.tx.sendBuffer(sync_package40)

    def client_transmission(self, payload):
        payloadnulo = (0).to_bytes(1, byteorder="big")
        timer = time.time()
        lista_pacotes, total_pacotes = self.separa_pacotes(payload)

        for i in range(len(lista_pacotes)):
            sync_package4 = self.tx.cria_package(lista_pacotes[i], 4, i + 1,
                                                 len(lista_pacotes), 0)
            self.tx.sendBuffer(sync_package4)
            print("Mandou o pacote {0}/{1}".format(i + 1, len(lista_pacotes)))
            while True:
                data, size = self.rx.getNData()
                payload, tipo, ok, n_pacote, n_total, pacote_esperado = self.rx.desfaz_package(
                    data)
                if tipo == 5 and ok:
                    sync1 = True
                    print("recebeu tipo 5")
                    break
                elif tipo == 6 and ok:
                    self.tx.sendBuffer(sync_package4)
                    print("recebeu tipo 6")
                    timer = time.time

                elif tipo == 8 and ok:
                    sync_package8 = self.tx.cria_package(
                        lista_pacotes[pacote_esperado], 4, pacote_esperado,
                        n_total, 0)
                    self.tx.sendBuffer(sync_package8)

                run_time = time.time() - timer
                if run_time > 4:
                    print(
                        "Tipo 5 ou 6 NAO recebido ------> Reenviando tipo 4 | {0} / {1}  Tamanho:{2} bytes"
                        .format(i + 1, total_pacotes, len(lista_pacotes[i])))
                    self.tx.sendBuffer(sync_package4)
                    timer = time.time()

    def server_transmission(self):
        payloadnulo = (0).to_bytes(1, byteorder="big")
        sync_package5 = self.tx.cria_package(payloadnulo, 5, 0, 0, 0)
        sync_package6 = self.tx.cria_package(payloadnulo, 6, 0, 0, 0)
        lista_fragmentada = []
        pacote_davez = 1
        while True:
            data, size = self.rx.getNData()
            payload, tipo, ok, n_pacote, total_pacotes, pacote_esperado = self.rx.desfaz_package(
                data)

            #if n_pacote != pacote_davez:
            #   print("ERRO: Deveria ter recebido {0} e recebeu {1}".format(pacote_davez, n_pacote))
            #  while True:
            ##     sync_package8 = self.tx.cria_package(payloadnulo, 8, 0, 0, pacote_davez)
            #   self.tx.sendBuffer(sync_package8)

            if tipo == 4 and ok:
                if n_pacote != pacote_davez:
                    print(
                        "ERRO: Deveria ter recebido {0} e recebeu {1}".format(
                            pacote_davez, n_pacote))
                    sync_package8 = self.tx.cria_package(
                        payloadnulo, 8, 0, 0, pacote_davez)
                    self.tx.sendBuffer(sync_package8)
                    timer = time.time()
                    while True:
                        payload, tipo, ok, n_pacote, total_pacotes, pacote_esperado = self.rx.desfaz_package(
                            data)
                        if tipo == 4 and ok:
                            break
                        run_time = time.time() - timer
                        if run_time > 5:
                            self.tx.sendBuffer(sync_package8)

                pacote_davez += 1
                lista_fragmentada.append(payload)
                self.tx.sendBuffer(sync_package5)
                sync1 = True
                print("recebeu tipo 4 | {0}/{1} CORRETO, ENVIA 5".format(
                    n_pacote, total_pacotes))
                if n_pacote == total_pacotes:
                    break

            elif tipo == 4 and not ok:
                self.tx.sendBuffer(sync_package6)
                print("Recebeu tipo 4 INCORRETO, Envia 6")

        compilado = bytes.fromhex("FF")
        for fragment in lista_fragmentada:
            compilado += fragment

        compilado = compilado[1:]

        return compilado

    def client_encerramento(self):
        time.sleep(4)
        payloadnulo = (0).to_bytes(1, byteorder="big")
        sync_package7 = self.tx.cria_package(payloadnulo, 7, 0, 0, 0)
        print("enviou tipo 7")
        self.tx.sendBuffer(sync_package7)

    def server_encerramento(self):
        encerra = False
        package_arbitrario = bytes.fromhex("F5 A3 AA C3 C3 B5 B4")
        timer = time.time()
        while not encerra:
            data, size = self.rx.getNData()
            payload, tipo, ok, n_pacote, total_pacotes, pacote_esperado = self.rx.desfaz_package(
                data)
            if tipo == 7:
                print("recebeu tipo 7, conexao encerrada")
                break
            run_time = time.time() - timer
            if run_time > 10:
                break

    def separa_pacotes(self, data):
        lista_pacotes = []
        while len(data) > 128:
            pacote = data[0:128]
            data = data[128:]
            lista_pacotes.append(pacote)

        if len(data) > 0:
            pacote = data
            lista_pacotes.append(pacote)
        return lista_pacotes, len(lista_pacotes)
Ejemplo n.º 3
0
class enlace(object):
    """ This class implements methods to the interface between Enlace and Application
    """
    def __init__(self, name):
        """ Initializes the enlace class
        """
        self.fisica = fisica(name)
        self.rx = RX(self.fisica)
        self.tx = TX(self.fisica)
        self.connected = False

    def enable(self):
        """ Enable reception and transmission
        """
        self.fisica.open()
        self.rx.threadStart()
        self.tx.threadStart()

    def disable(self):
        """ Disable reception and transmission
        """
        self.rx.threadKill()
        self.tx.threadKill()
        time.sleep(1)
        self.fisica.close()

    ################################
    # Application  interface       #
    ################################

    def sendData(self, data):
        """ Send data over the enlace interface
        """
        self.client_sync()
        self.client_transmission(data)
        self.client_encerramento()

    def getData(self):
        """ Get n data over the enlace interface
        Return the byte array and the size of the buffer
        """
        print('entrou na leitura e tentara ler ')
        self.server_sync()
        payload = self.server_transmission()
        self.server_encerramento()

        return (payload, len(payload))

    def client_sync(self):
        sync1 = False
        sync2 = False
        payload = (0).to_bytes(1, byteorder="big")
        sync_package = self.tx.cria_package(payload, 1)
        sync_package3 = self.tx.cria_package(payload, 3)
        print(sync_package)
        self.tx.sendBuffer(sync_package)
        timer = time.time()
        while not sync1:
            data, size = self.rx.getNData()
            payload, tipo, ok = self.rx.desfaz_package(data)
            if tipo == 2 and ok:
                sync1 = True
                print("recebeu tipo 2")
                break

            run_time = time.time() - timer
            if run_time > 5:
                print("Error: not receive type 2 ")
                self.tx.sendBuffer(sync_package)
                print("Enviando tipo 1")
                timer = time.time()

        self.tx.sendBuffer(sync_package3)
        timer = time.time()
        while not sync2:
            data, size = self.rx.getNData()
            payload, tipo, ok = self.rx.desfaz_package(data)
            if tipo == 40 and ok:
                sync2 = True
                print("recebeu tipo 40")
                break
            run_time = time.time() - timer
            if run_time > 5.0:
                print("mandou tipo 3")
                self.tx.sendBuffer(sync_package3)
                timer = time.time()

    def server_sync(self):
        sync1 = False
        sync2 = False
        payload_nulo = (0).to_bytes(1, byteorder="big")
        sync_package2 = self.tx.cria_package(payload_nulo, 2)
        sync_package40 = self.tx.cria_package(payload_nulo, 40)

        while not sync1:
            data, size = self.rx.getNData()
            payload, tipo, ok, = self.rx.desfaz_package(data)
            if tipo == 1 and ok:
                sync1 = True
                print("recebeu tipo 1")
                break

        self.tx.sendBuffer(sync_package2)
        timer = time.time()
        while not sync2:
            data, size = self.rx.getNData()
            payload, tipo, ok = self.rx.desfaz_package(data)
            if tipo == 3 and ok:
                sync2 = True
                print("recebeu tipo 3")
                break

            run_time = time.time() - timer
            if run_time > 5.0:
                print("Erro: Type 3 note received")
                self.tx.sendBuffer(sync_package2)
                print("mandou tipo 2")
                timer = time.time()
        self.tx.sendBuffer(sync_package40)

    def client_transmission(self, payload):
        payloadnulo = (0).to_bytes(1, byteorder="big")
        sync_package4 = self.tx.cria_package(payload, 4)
        self.tx.sendBuffer(sync_package4)
        sync1 = False
        timer = time.time()
        while not sync1:
            data, size = self.rx.getNData()
            payload, tipo, ok = self.rx.desfaz_package(data)
            if tipo == 5 and ok:
                sync1 = True
                print("recebeu tipo 5")
                break
            elif tipo == 6 and ok:
                self.tx.sendBuffer(sync_package4)
                print("recebeu tipo 6")
                timer = time.time

            run_time = time.time() - timer
            if run_time > 5.0:
                print("Erro: type 5 or 6 not received")
                print("mandou tipo 4")
                self.tx.sendBuffer(sync_package4)
                timer = time.time()

    def server_transmission(self):
        payloadnulo = (0).to_bytes(1, byteorder="big")
        sync_package5 = self.tx.cria_package(payloadnulo, 5)
        sync_package6 = self.tx.cria_package(payloadnulo, 6)
        sync1 = False
        while not sync1:
            data, size = self.rx.getNData()
            payload, tipo, ok = self.rx.desfaz_package(data)
            if tipo == 4 and ok:
                self.tx.sendBuffer(sync_package5)
                sync1 = True
                print("recebeu tipo 4 CORRETO, ENVIA 5")
                break
            elif tipo == 4 and not ok:
                self.tx.sendBuffer(sync_package6)
                print("Recebeu tipo 4 INCORRETO, Envia 6")

        return payload

    def client_encerramento(self):
        time.sleep(4)
        payloadnulo = (0).to_bytes(1, byteorder="big")
        sync_package7 = self.tx.cria_package(payloadnulo, 7)
        print("enviou tipo 7")
        self.tx.sendBuffer(sync_package7)

    def server_encerramento(self):
        encerra = False
        while not encerra:
            data, size = self.rx.getNData()
            payload, tipo, ok = self.rx.desfaz_package(data)
            if tipo == 7:
                print("recebeu tipo 7, conexao encerrada")
                break
Ejemplo n.º 4
0
class enlace(object):
    """ This class implements methods to the interface between Enlace and Application
	"""
    def __init__(self, name):
        """ Initializes the enlace class
		"""
        self.fisica = fisica(name)
        self.rx = RX(self.fisica)
        self.tx = TX(self.fisica)
        self.connected = False

    def enable(self):
        """ Enable reception and transmission
		"""
        self.fisica.open()
        self.rx.threadStart()
        self.tx.threadStart()

    def disable(self):
        """ Disable reception and transmission
		"""
        self.rx.threadKill()
        self.tx.threadKill()
        time.sleep(1)
        self.fisica.close()

    ################################
    # Application  interface       #
    ################################

    def comunicacao(self, data, user):
        data_null = (0).to_bytes(4, byteorder="big")
        while True:

            if user == "client":

                print("Enviada mensagem do tipo 1")
                self.sendData(data_null, 0, 0, 0, 1, 0)

                start_time1 = time.time()

                size = self.waitLoop(2, 1)

                if size != 0:
                    print('...')
                    rxBuffer = self.getData(size)
                    tipo_msg = self.getType(rxBuffer)

                    if tipo_msg == 2:
                        print("Mensagem tipo 2 recebida")
                        print('----------------------')
                        time.sleep(2.5)
                        print("Enviada mensagem do tipo 3")
                        self.sendData(data_null, 0, 0, 0, 3, 0)
                        time.sleep(1)

                        self.sendPackages(data)
                        print("Transmissao Concluida")
                        print("Enviando Mensagem de tipo 7 (encerramento)")
                        time.sleep(5)
                        self.sendData(data_null, 0, 0, 0, 7, 0)
                        break
                    elif tipo_msg == 7:
                        print("Mensagem de encerramento recebida - encerrando")
                        break
                    else:
                        print('--------------------')
                        print("Erro de mensagem recebida1")
                        print('--------------------')

                else:
                    print('--------------------')
                    print("Mensagem tipo 2 não recebida")
                    print('--------------------')

            if user == "server":
                while True:

                    size = self.waitLoop(2, 0)

                    rxBuffer = self.getData(size)
                    tipo_msg = self.getType(rxBuffer)
                    print('tipo', tipo_msg)

                    if tipo_msg == 1:
                        print('--------------------')
                        print("Mensagem de tipo 1 recebida")

                        while True:
                            print("Enviada mensagem do tipo 2")
                            self.sendData(data_null, 0, 0, 0, 2, 0)
                            self.rx.clearBuffer()

                            size = self.waitLoop(3, 1)
                            #rxBuffer = self.getData(size)

                            if size == 0:
                                print('--------------------')
                                print("Mensagem de tipo 3 não recebida")
                                print('--------------------')
                            else:
                                rxBuffer = self.getData(size)
                                tipo_msg = self.getType(rxBuffer)

                                if tipo_msg == 3:
                                    print('--------------------')
                                    print(
                                        "Recebida mensagem de tipo 3, esperando pacote de informações"
                                    )
                                    print('--------------------')
                                    while True:
                                        time.sleep(0.3)
                                        size = self.waitLoop(4, 0)

                                        rxBuffer = self.getData(size)
                                        tipo_msg = self.getType(rxBuffer)

                                        if tipo_msg == 7:  #mensagem do tipo 7 (dados)
                                            print(
                                                "Mensagem de encerramento recebida - encerrando"
                                            )
                                            return data_null

                                        elif tipo_msg == 4:  #mensagem do tipo 4 (dados)

                                            full_data = self.receivePackages()
                                            print('Em Espera')
                                            size = self.waitLoop(9, 0)

                                            rxBuffer = self.getData(size)
                                            tipo_msg = self.getType(rxBuffer)

                                            if tipo_msg == 7:  #mensagem do tipo 7 (dados)
                                                print('--------------------')
                                                print(
                                                    "Mensagem de tipo 7 recebida"
                                                )
                                                print('--------------------')
                                                print("Conexao encerrando")
                                                return full_data
                                        else:
                                            print('--------------------')
                                            print("Erro de Mensagem recebida4")
                                            print('--------------------')
                                elif tipo_msg == 7:
                                    print(
                                        "Mensagem de encerramento recebida - encerrando"
                                    )
                                    return data_null

                                else:
                                    print('--------------------')
                                    print("Erro de Mensagem recebida2")
                                    print('--------------------')
                    elif tipo_msg == 7:
                        print("Mensagem de encerramento recebida - encerrando")
                        return data_null
                    else:
                        print("Erro de mensagem recebida3")

    def sendData(self, data, numero_pacote, pacotes_totais, erro_pacote,
                 tipo_msg, crc):
        """ Send data over the enlace interface
		(self, payload, package_number, total_packages, package_error, message_type)
		"""
        pacote, lenPayload = self.tx.criaPackage(data, numero_pacote,
                                                 pacotes_totais, erro_pacote,
                                                 tipo_msg, crc)
        self.tx.sendBuffer(pacote)
        return lenPayload

    def sendPackages(self, data):
        print("...Inicio da transmissao dos pacotes de dados...")
        total_packages = int((len(data) / 128) + 1)
        lista_packages = []
        i = 0
        idx = 0
        info = data

        while len(info) > 128:
            pay = info[:128]
            info = info[128:]
            lista_packages.append(pay)
        lista_packages.append(info)

        #while i<(len(data)-128):
        #	lista_packages.append(data[i:i+127])
        #	i+=128
        #lista_packages.append(data[i:])
        print('Pacotes totais:', total_packages)
        print("{0} pacotes a serem enviados".format(len(lista_packages)))

        while idx < len(lista_packages):
            time.sleep(1)
            val = lista_packages[idx]
            while True:
                print("------------------------------")
                print("Pacote {0} enviado".format(idx))
                print("Tamanho:", len(val))
                print(self.crc16(val))
                self.sendData(val, idx, total_packages, 0, 4,
                              self.crc16(val) + 1)
                size = self.waitLoop(5, 1)
                if size != 0:
                    break
                else:
                    print("Resposta nao recebida")
            rxBuffer = self.getData(size)
            tipo_msg = self.getType(rxBuffer)

            if tipo_msg == 5:
                print("Mensagem tipo 5 recebida")
                idx += 1
            elif tipo_msg == 6:
                print("Mensagem tipo 6 recebida")
            elif tipo_msg == 8:
                print("Mensagem tipo 8 recebida")
                if self.getExpectedPackage(rxBuffer) == -1:
                    print("Erro de Mensagem")
                else:
                    idx = self.getExpectedPackage(rxBuffer)
            elif tipo_msg == 7:
                print("Mensagem de encerramento recebida - encerrando tudo")
                return
            else:
                print("Erro de Mensagem")
        print("Transmissao dos pacotes concluida")
        return

    def receivePackages(self):
        print("...Inicio da recepcao dos pacotes de dados...")
        pacote_esperado = 0
        lista_packages = bytes(0)
        data_null = (0).to_bytes(4, byteorder="big")

        while True:
            size = self.waitLoop(9, 0)
            rxBuffer = self.getData(size)
            if rxBuffer == 51:
                print("Erro de mensagem")
                self.sendData(data_null, 0, 0, 0, 6, 0)
            else:

                pacotes_totais = rxBuffer[1]
                tipo_msg = self.getType(rxBuffer)

                if tipo_msg == 4:

                    if self.getPackageNumber(rxBuffer) == pacote_esperado:
                        if self.crcIsCorrect(rxBuffer):
                            print('_____________________')
                            print("Pacote recebido: {0}".format(
                                self.getPackageNumber(rxBuffer)))
                            print(
                                "Pacote esperado: {0}".format(pacote_esperado))
                            print("Correto! - Mensagem de tipo 5 enviada")
                            self.sendData(data_null, 0, 0, 0, 5, 0)
                            package = self.getPackage(rxBuffer)
                            print(self.crc16(package))
                            lista_packages += package
                            pacote_esperado += 1
                            print('Pacotes a serem recebidos:',
                                  (pacotes_totais - pacote_esperado))
                            if pacotes_totais - pacote_esperado == 0:
                                print("Todos os {0} pacotes recebidos".format(
                                    pacote_esperado))
                                full_data = lista_packages
                                print(
                                    "Os dados recebidos tem {0} bytes".format(
                                        len(full_data)))
                                break
                        else:
                            print("Pacote corrompido - CRC incorreto")
                            time.sleep(1)
                            print("Enviada mensagem de tipo 6")
                            self.sendData(data_null, 0, 0, 0, 6, 0)

                    else:
                        print('_____________________')
                        print("Pacote recebido: {0}".format(
                            self.getPackageNumber(rxBuffer)))
                        print("Pacote esperado: {0}".format(pacote_esperado))
                        print("Incorreto! - Mensagem de tipo 8 enviada")
                        time.sleep(1)
                        self.sendData(data_null, 0, 0, pacote_esperado, 8, 0)

                elif tipo_msg == 7:
                    print(
                        'Mensagem de tipo 7 recebida - comunicacao encerrando')
                    break
        print('Transmissao dos pacotes encerrada')
        return full_data

    def getData(self, size):
        """ Get n data over the enlace interface
		Return the byte array and the size of the buffer
		"""
        buffer_data = self.rx.getNData(size)
        data = self.rx.desfaz_package(buffer_data)

        return (data)

    def getType(self, data):
        #null, tipo_msg = self.rx.desfaz_package(package)
        if data == 51:
            return data
        tipo_msg = data[9]
        return tipo_msg

    def getPackage(self, data):
        if data == 51:
            return data
        package = data[10:]
        return package

    def getPackageNumber(self, data):
        if data == -1:
            return data
        package_number = data[0]
        return package_number

    def getExpectedPackage(self, data):
        if data == -1:
            return data
        expected_type = data[2]
        return expected_type

    def crcIsCorrect(self, data):
        expected_crc = int.from_bytes(data[6:9], byteorder="big")
        true_crc = self.crc16(self.getPackage(data))
        if expected_crc == true_crc:
            return True
        else:
            return False

    def waitLoop(self, type, timed):
        size = 10
        start_time1 = time.time()
        if timed == 1:
            while (self.rx.getBufferLen() == 0 or self.rx.getBufferLen() > size
                   ) and (time.time() - start_time1) < 5:
                if (type == 9):
                    print('.')
                else:
                    print("Esperando tipo {0}".format(type))
                time.sleep(0.5)
                size = self.rx.getBufferLen()
        if timed == 0:
            while self.rx.getBufferLen() == 0 or self.rx.getBufferLen() > size:
                print("Recebendo")
                time.sleep(0.3)
                size = self.rx.getBufferLen()
        return size

    def crc16(self, data: bytes):

        return crc16.crc16xmodem(data)