![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Versão do protegemed que calcula o tempo em ms da fuga, calcula o numero de onverflow (valores muito baixo) e underflow (valores muito altos). Além disso, calcula um valor médio a partir dos valores capturados e não apenas pela fft.
Dependencies: EthernetInterface mbed-rtos mbed
Diff: Codes/CommTCP.cpp
- Revision:
- 0:c64e1194230b
diff -r 000000000000 -r c64e1194230b Codes/CommTCP.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Codes/CommTCP.cpp Wed Jul 09 21:16:23 2014 +0000 @@ -0,0 +1,111 @@ +/* + * CommTCP.cpp + * + * Created on: 07/07/2013 + * Author: Rebonatto + */ +#include "CommTCP.h" +#include "EventDetector.h" + +void CommTCP::CommTCP_Thread(void const *arg) +{ + char buffer[5]; + int ret,i, r; + int cont = 0; + TCPSocketServer ServerSocket; + + ServerSocket.bind(Settings::get_PortTCP()); + ServerSocket.listen(); + printf("TCP Thread starting...\r\n"); +// printf("ServerSocket %s:%d\n", get_address(), get_port()); + + while(1){ + TCPSocketConnection sock; + for(i=0; i < Settings::get_MaxTries(); i++){ + printf("Aguarda Conexao\n"); + r = ServerSocket.accept(sock); + if (r == 0) //Accept Ok + break; + else{ + printf("Error in Acceppt\n"); + wait_ms(Settings::get_DelayTry()); + } + } + //sock.set_blocking(true, 1500); + + //printf("Conected %d at %s\n", r, sock.get_address()); + for(i=0; i < Settings::get_MaxTries(); i++){ + r = sock.receive(buffer, sizeof(buffer)); + if (r != -1) // Receive Ok + break; + else{ + printf("Erro na recepcao do Socket TCP\n"); + wait_ms(Settings::get_DelayTry()); + } + buffer[ret] = '\0'; + } + if (cont % 60 == 0) + printf("Recebida conexao %d msg TCP: %d chars: *%s*\n", cont++, ret, buffer); + + //printf("Received %d chars:\n*%s*\n", ret, buffer); + sock.close(); + SendAcom(0,0); + + } +} + +void CommTCP::RequestAcom(){ + // Metodo para solicitar os acompanhamentos + char msg[] = "3;-1"; + TCPSocketConnection s[NEIGHBORS]; + int escritos, i; + //TCPSocketConnection s[NEIGHBORS]; + + /* + Formato das mensagens de requisicao + Tipo ; Tomada + Tipos: 1 Solicitacao de fase + 2 Solicitacao de diferencial + 3 Acompanhamento (manda fase e diferencial) + Tomada: Numero da tomada + -1 (zero) quando de todas as tomadas + */ + /*Timer t; + //t.start(); + + for(i=0;i<Settings::get_NumNeighbors();i++){ + s[i].connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); + } + //t.stop(); + //printf("The time taken in connection was %d useconds\n", t.read_us()); + */ + for(i=0; i< Settings::get_NumNeighbors(); i++){ + //talvez verificar se o socket est conectado. Se no estiver, destruir objeto e conectar + TCPSocketConnection sock; + sock.connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); + //escritos = Settings::get_Socket(i).send_all(msg, sizeof(msg)-1); + //printf("Socket %d\n",s[i].is_connected()); + //Timer t1; + //t1.start(); + escritos = sock.send_all(msg, strlen(msg)); + wait_ms(100); + if(escritos != strlen(msg)){ + printf("Erro ao enviar mensagem para vizinho\n"); + break; + } + //t1.stop(); + //printf("The time taken in send was %d useconds\n", t1.read_us()); + + sock.close(); + + } +} + +void CommTCP::SendAcom(int tipo,int tomada){ + // Aqui chama a funço para enviar um acompanhamento + for(int i=0;i<Settings::get_MaxChannels();i++) + { + EventDetector::get_Detector(i).ExternalTrigger(); + } +} +