diff --git a/headers/client.h b/headers/client.h index 00fbe1fa70b564302f4c8c67d45d72f67c1e3120..0200722b9fc928f538f35999443ef47077fd8599 100644 --- a/headers/client.h +++ b/headers/client.h @@ -117,6 +117,20 @@ int client::start_transmission() { return 1; } +// Encerra a transmissao com o servidor +int client::end_transmission() { + cout << "\tEncerrando a transmissao\n";// ->log + frame *end = new frame(FIMT, 0, vector<char>(1, 0)); + frame *enviado = send_frame_socket(end); + if (!enviado) { + cout << "\tFalha ao encerrar a transmissao\n";// ->log + return 0; + } + + cout << "\tTransmissao encerrada com sucesso\n";// ->log + return 1; +} + /** * @brief Send a list of frames through the socket * @@ -148,7 +162,7 @@ int client::send_frames(vector<frame *> frames) { janela.push((iniJanela + frameCounter) % 16); cout << "\tEnviando frame\n"; - frames[iniJanela + frameCounter]->imprime(HEX); + frames[iniJanela + frameCounter]->imprime(DEC); if (socket->send_frame(frames[iniJanela + frameCounter]) == -1) { cout << "Falha ao enviar o frame\n"; diff --git a/headers/conexao.h b/headers/conexao.h index 0a1b9cc2d457ffdd1ec7a0d19dd4a89df9f02013..2b1a362b8943e8b6a85f1967c1826a51d8416ed1 100644 --- a/headers/conexao.h +++ b/headers/conexao.h @@ -106,18 +106,17 @@ frame *conexao::receive_frame() { */ int conexao::send_frame(frame *f) { - int escapes = add_escapes((char *)f, bufferSend); + add_escapes((char *)f, bufferSend); bool ack = false; int timeout = 0; - cout << "send: "; - for ( int i = 0; i < escapes; i++ ) + int byteSend = send(device, bufferSend, sizeof(frame) * 2, 0); + printf("send %d: ", byteSend); + for (int i = 0; i < byteSend; i++) { cout << hex << (int(bufferSend[i]) & 0xff) << " "; + } cout << "\n"; - - int byteSend = send(device, bufferSend, sizeof(frame) * 2, 0); - if (byteSend < 0) { cout << "Erro no sendto" << byteSend << "\n"; return -1; @@ -141,23 +140,18 @@ int conexao::add_escapes(char *f, char *out) { for (size_t i = 0; i < sizeof(frame); i++) { out[j++] = f[i]; - if (f[i] == (char)0x88 || f[i] == (char)0x81) { out[j++] = 0xFF; } + if (f[i] == 0x88 || f[i] == 0x81) out[j++] = 0xFF; } - cout << "\nescapes: "; - for ( int i = 0; i < j; i++ ) - cout << hex << (int(out[i]) & 0xff) << " "; - cout << "\n"; - return j; } int conexao::remove_escapes(char *f, char *out) { int j = 0; - for (size_t i = 0; i < sizeof(frame); i++) { + for (size_t i = 0; j < sizeof(frame); i++) { out[j++] = f[i]; - if (f[i] == (char)0x88 || f[i] == (char)0x81) i++; + if (f[i] == 0x88 || f[i] == 0x81) i++; } return j; diff --git a/match3 b/match3 deleted file mode 100755 index b8be5e93afe418689158c81b4d104ca41b7507b2..0000000000000000000000000000000000000000 Binary files a/match3 and /dev/null differ diff --git a/match3.zip b/match3.zip deleted file mode 100644 index 0b972882ed0c484e6332a2f4b4a6ea218ef5149e..0000000000000000000000000000000000000000 Binary files a/match3.zip and /dev/null differ diff --git a/selection_sort.asm b/selection_sort.asm deleted file mode 100644 index 7d192962e26f3ecca683b6ef7930b326355974d3..0000000000000000000000000000000000000000 --- a/selection_sort.asm +++ /dev/null @@ -1,212 +0,0 @@ - -# s0 = indice inicial -# s1 = indice final -# s2 = tam - -.data - vetor: .space 24 # Espaço em bits para 6 int, cada int tem 4 bits - espaco: .ascii " " # É um espaco - -.text - main: - li $s2, 6 # Tamanho do vetor - li $s0, 0 # Indice inicial do vetor - addi $s1, $s2, -1 # s1 é o indice final, s1 = tam - 1 - - move $a1, $s2 # passa o tam como paramentro - jal leVetor # le um vetor - - # Chama o selection Sort - move $a1, $s0 # ai = indice inicial - move $a2, $s1 # a2 = indice final - jal selectionSort - - move $a1, $s0 # a1 = indice - move $a2, $s2 # a2 = tamanho - jal imprimeVetor - - # Termina o programa - li $v0, 10 - syscall - - - # Função que lê um vetor, não retorna nada - leVetor: - - # Configura a pilha - addiu $sp, $sp, -12 # Aloca 12 bytes na pilha (a, b e ra) - sw $ra, 0($sp) # 1 posicao da pilha = ra - sw $s0, 4($sp) # 2 posicao da pilha = a - sw $s1, 8($sp) # 3 posicao da pilha = b - - li $t0, 0 # t0 é o índice, inicia em 0 - li $t1, 0 # t1 é o contador, t1 = 0 - move $t2, $a1 # t2 = tam - # lê s2 elementos - le_loop: - beq $t1, $t2, endLe # Se cont = tam sai do loop - - li $v0, 5 # Instrução 5 lê um int - syscall - sw $v0, vetor($t0) # vetor[0] = $v0 - - addi $t0, $t0, 4 # Atualiza o indice, 4 pq um int tem 4 bits - addi $t1, $t1, 1 # Atualiza o contador - - j le_loop # Volta para o inicio do loop - endLe: - - # Recupera os valores - lw $ra, 0($sp) # Recupera o ra - lw $s0, 4($sp) # Recupera o a - lw $s1, 8($sp) # Recupera o b - addiu $sp, $sp, 12 # Volta o sp - - jr $ra # Retorna para onde a função foi chamada - - - # Função que imprime um vetor, não retorna nada - imprimeVetor: - - # Configura a pilha - addiu $sp, $sp, -16 # Aloca 16 bytes na pilha (tam, a, b e ra) - sw $ra, 0($sp) # 1 posicao da pilha = ra - sw $s0, 4($sp) # 2 posicao da pilha = a - sw $s1, 8($sp) # 3 posicao da pilha = b - sw $s2, 12($sp) # 4 posica da pilha = tam - - li $t0, 0 # t0 é o contador, t1 = 0 - li $t1, 0 # t1 é o índice, inicia em 0 - - # imprime t0 elementos - imprime_loop: - beq $t0, $a2, endImprime # Se cont = tam sai do loop - - lw $a0, vetor($t1) # a0 = vetor[t1] - li $v0, 1 # instrução 1 imprime a0 - syscall - - la $a0, espaco # Imprime um espaço - li $v0, 4 # instrução 1 imprime a0 - syscall - - addi $t0, $t0, 1 # Atualiza o contador - addi $t1, $t1, 4 # Atualiza o indice, 4 pq um int tem 4 bits - - j imprime_loop # Volta para o inicio do loop - endImprime: - - # Recupera os valores - lw $ra, 0($sp) # Recupera o ra - lw $s0, 4($sp) # Recupera o a - lw $s1, 8($sp) # Recupera o b - lw $s2, 12($sp) # Recupera o tam - addiu $sp, $sp, 16 # Volta o sp - - jr $ra # Retorna para onde a função foi chamada - - - # Ordena em ordem crescente - selectionSort: - - # Configura a pilha - addiu $sp, $sp, -16 # Aloca 12 bytes na pilha (a, b e ra) - sw $ra, 0($sp) # 1 posicao da pilha = ra - sw $s0, 4($sp) # 2 posicao da pilha = a - sw $s1, 8($sp) # 3 posicao da pilha = b - sw $s2, 12($sp) # 4 posica da pilha = tam - - move $t0, $a1 # Libera os registradores de parametro - move $t1, $a2 - bge $t0, $t1, fimSelection # se a >= b sai da recursão - - jal minimo # Acha o menor valor - # Faz a troca - move $a1, $v0 # a3 = min (v0) - move $a2, $t0 # a2 = a - jal troca - # chama a recursão para o prox elem - addi $t0, $t0, 1 # a++ - jal selectionSort - - fimSelection: - - # Recupera os valores - lw $ra, 0($sp) # Recupera o ra - lw $s0, 4($sp) # Recupera o a - lw $s1, 8($sp) # Recupera o b - lw $s2, 12($sp) # Recupera o tam - addiu $sp, $sp, 16 # Volta o sp - - jr $ra # Retorna para onde a função foi chamada - - - minimo: # Acha o minimo do vetor - # Configura a pilha - addiu $sp, $sp, -16 # Aloca 16 bytes na pilha (tam, a, b e ra) - sw $ra, 0($sp) # 1 posicao da pilha = ra - sw $s0, 4($sp) # 2 posicao da pilha = a - sw $s1, 8($sp) # 3 posicao da pilha = b - sw $s2, 12($sp) # 4 posicao da pilha = tam - - move $t0, $a1 # t0 é o índice - sll $t0, $t0, 2 # t0 = t0*4 - lw $t1, vetor($t0) # t1 = vetor[t0*4] - li $t2, 0 # t2 é o contador, t2 = 0 - - min_loop: # Acha o menor valor - - beq $t2, $a2, fimMin # Se cont == b sai do loop - - addi $t0, $t0, 4 # Atualiza o indice, um int tem 4 bits - addi $t2, $t2, 1 # Atualiza o contador, contador++ - - lw $t3, vetor($t0) # t3 = vetor[t0], comeca no 2º elem do vetor - li $t4, 0 # indice do menor valor, comeca em 0 - bgt $t3, $t1, fimMin_if # se t3 > t1 sai do if - move $t1, $t3 # se t3 < t1 t0 = t3 (achou o min) - move $t4, $t0 - fimMin_if: - - j min_loop # repete para o prox elem - - fimMin: - - # Recupera os valores - lw $ra, 0($sp) # Recupera o ra - lw $s0, 4($sp) # Recupera o a - lw $s1, 8($sp) # Recupera o b - lw $s2, 12($sp) # Recupera o tam - addiu $sp, $sp, 16 # Volta o sp - - move $v0, $t4 # retorna o indice do menor valor (t0), v0 = t0 - jr $ra # Retorna para onde a função foi chamada - - # Troca dois elementos - troca: - # Configura a pilha - addiu $sp, $sp, -16 # Aloca 16 bytes na pilha (tam, a, b e ra) - sw $ra, 0($sp) # 1 posicao da pilha = ra - sw $s0, 4($sp) # 2 posicao da pilha = a - sw $s1, 8($sp) # 3 posicao da pilha = b - sw $s2, 12($sp) # 4 posicao da pilha = tam - - # Guarda os valores - lw $t0, vetor($a1) # t0 = vetor[a1] - lw $t1, vetor($a2) # t1 = vetor[a2] - - # Troca os valores - sw $t1, vetor($a1) # vetor[a3] = t1 - sw $t0, vetor($t2) # vetor[a1] = t0 - - # Recupera os valores - lw $ra, 0($sp) # Recupera o ra - lw $s0, 4($sp) # Recupera o a - lw $s1, 8($sp) # Recupera o b - lw $s2, 12($sp) # Recupera o tam - addiu $sp, $sp, 16 # Volta o sp - - jr $ra # Retorna para onde a função foi chamada - -# fazer para mais de 6 elementos -# ler com espaço ao inves de enter