Versão sem FFT e aquisição por DMA. 256 amostras.
Dependencies: EthernetInterface NTPClient mbed-rtos mbed
Codes/CommTCP.cpp@0:e57bc370d339, 2016-01-05 (annotated)
- Committer:
- rebonatto
- Date:
- Tue Jan 05 11:45:44 2016 +0000
- Revision:
- 0:e57bc370d339
Vers?o est?vel sem calculo de FFT. Aquisi??o por DMA. Usa 256 amostras.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:e57bc370d339 | 1 | /* |
rebonatto | 0:e57bc370d339 | 2 | * CommTCP.cpp |
rebonatto | 0:e57bc370d339 | 3 | * |
rebonatto | 0:e57bc370d339 | 4 | * Created on: 07/07/2013 |
rebonatto | 0:e57bc370d339 | 5 | * Author: Rebonatto |
rebonatto | 0:e57bc370d339 | 6 | */ |
rebonatto | 0:e57bc370d339 | 7 | #include "CommTCP.h" |
rebonatto | 0:e57bc370d339 | 8 | #include "EventDetector.h" |
rebonatto | 0:e57bc370d339 | 9 | |
rebonatto | 0:e57bc370d339 | 10 | #define PORTTCP 7890U |
rebonatto | 0:e57bc370d339 | 11 | #define NEIGHBORS 2U |
rebonatto | 0:e57bc370d339 | 12 | |
rebonatto | 0:e57bc370d339 | 13 | void CommTCP::CommTCP_Thread(void const *arg) |
rebonatto | 0:e57bc370d339 | 14 | { |
rebonatto | 0:e57bc370d339 | 15 | char buffer[5]; |
rebonatto | 0:e57bc370d339 | 16 | int ret=0,i, r; |
rebonatto | 0:e57bc370d339 | 17 | int cont = 0; |
rebonatto | 0:e57bc370d339 | 18 | TCPSocketServer ServerSocket; |
rebonatto | 0:e57bc370d339 | 19 | |
rebonatto | 0:e57bc370d339 | 20 | ServerSocket.bind(PORTTCP); |
rebonatto | 0:e57bc370d339 | 21 | ServerSocket.listen(); |
rebonatto | 0:e57bc370d339 | 22 | printf("TCP Thread starting...\r\n"); |
rebonatto | 0:e57bc370d339 | 23 | // printf("ServerSocket %s:%d\n", get_address(), get_port()); |
rebonatto | 0:e57bc370d339 | 24 | |
rebonatto | 0:e57bc370d339 | 25 | while(1){ |
rebonatto | 0:e57bc370d339 | 26 | TCPSocketConnection sock; |
rebonatto | 0:e57bc370d339 | 27 | for(i=0; i < MAXTRIES; i++){ |
rebonatto | 0:e57bc370d339 | 28 | printf("Aguarda Conexao\n"); |
rebonatto | 0:e57bc370d339 | 29 | r = ServerSocket.accept(sock); |
rebonatto | 0:e57bc370d339 | 30 | if (r == 0) //Accept Ok |
rebonatto | 0:e57bc370d339 | 31 | break; |
rebonatto | 0:e57bc370d339 | 32 | else{ |
rebonatto | 0:e57bc370d339 | 33 | printf("Error in Acceppt\n"); |
rebonatto | 0:e57bc370d339 | 34 | wait_ms(Settings::get_DelayTry()); |
rebonatto | 0:e57bc370d339 | 35 | } |
rebonatto | 0:e57bc370d339 | 36 | } |
rebonatto | 0:e57bc370d339 | 37 | //sock.set_blocking(true, 1500); |
rebonatto | 0:e57bc370d339 | 38 | |
rebonatto | 0:e57bc370d339 | 39 | //printf("Conected %d at %s\n", r, sock.get_address()); |
rebonatto | 0:e57bc370d339 | 40 | for(i=0; i < MAXTRIES; i++){ |
rebonatto | 0:e57bc370d339 | 41 | r = sock.receive(buffer, sizeof(buffer)); |
rebonatto | 0:e57bc370d339 | 42 | if (r != -1) // Receive Ok |
rebonatto | 0:e57bc370d339 | 43 | break; |
rebonatto | 0:e57bc370d339 | 44 | else{ |
rebonatto | 0:e57bc370d339 | 45 | printf("Erro na recepcao do Socket TCP\n"); |
rebonatto | 0:e57bc370d339 | 46 | wait_ms(Settings::get_DelayTry()); |
rebonatto | 0:e57bc370d339 | 47 | } |
rebonatto | 0:e57bc370d339 | 48 | buffer[ret] = '\0'; |
rebonatto | 0:e57bc370d339 | 49 | } |
rebonatto | 0:e57bc370d339 | 50 | if (cont % 60 == 0) |
rebonatto | 0:e57bc370d339 | 51 | printf("Recebida conexao %d msg TCP: %d chars: *%s*\n", cont++, ret, buffer); |
rebonatto | 0:e57bc370d339 | 52 | |
rebonatto | 0:e57bc370d339 | 53 | //printf("Received %d chars:\n*%s*\n", ret, buffer); |
rebonatto | 0:e57bc370d339 | 54 | sock.close(); |
rebonatto | 0:e57bc370d339 | 55 | SendAcom(0,0); |
rebonatto | 0:e57bc370d339 | 56 | |
rebonatto | 0:e57bc370d339 | 57 | } |
rebonatto | 0:e57bc370d339 | 58 | } |
rebonatto | 0:e57bc370d339 | 59 | |
rebonatto | 0:e57bc370d339 | 60 | void CommTCP::RequestAcom(){ |
rebonatto | 0:e57bc370d339 | 61 | // Metodo para solicitar os acompanhamentos |
rebonatto | 0:e57bc370d339 | 62 | //char msg[] = "3;-1"; |
rebonatto | 0:e57bc370d339 | 63 | TCPSocketConnection s[NEIGHBORS]; |
rebonatto | 0:e57bc370d339 | 64 | //int escritos, i; |
rebonatto | 0:e57bc370d339 | 65 | //TCPSocketConnection s[NEIGHBORS]; |
rebonatto | 0:e57bc370d339 | 66 | |
rebonatto | 0:e57bc370d339 | 67 | /* |
rebonatto | 0:e57bc370d339 | 68 | Formato das mensagens de requisicao |
rebonatto | 0:e57bc370d339 | 69 | Tipo ; Tomada |
rebonatto | 0:e57bc370d339 | 70 | Tipos: 1 Solicitacao de fase |
rebonatto | 0:e57bc370d339 | 71 | 2 Solicitacao de diferencial |
rebonatto | 0:e57bc370d339 | 72 | 3 Acompanhamento (manda fase e diferencial) |
rebonatto | 0:e57bc370d339 | 73 | Tomada: Numero da tomada |
rebonatto | 0:e57bc370d339 | 74 | -1 (zero) quando de todas as tomadas |
rebonatto | 0:e57bc370d339 | 75 | */ |
rebonatto | 0:e57bc370d339 | 76 | /*Timer t; |
rebonatto | 0:e57bc370d339 | 77 | //t.start(); |
rebonatto | 0:e57bc370d339 | 78 | |
rebonatto | 0:e57bc370d339 | 79 | for(i=0;i<Settings::get_NumNeighbors();i++){ |
rebonatto | 0:e57bc370d339 | 80 | s[i].connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); |
rebonatto | 0:e57bc370d339 | 81 | } |
rebonatto | 0:e57bc370d339 | 82 | //t.stop(); |
rebonatto | 0:e57bc370d339 | 83 | //printf("The time taken in connection was %d useconds\n", t.read_us()); |
rebonatto | 0:e57bc370d339 | 84 | */ |
rebonatto | 0:e57bc370d339 | 85 | /* desabilitado pela falta do vetor de vizinhos |
rebonatto | 0:e57bc370d339 | 86 | for(i=0; i< NEIGHBORS; i++){ |
rebonatto | 0:e57bc370d339 | 87 | //talvez verificar se o socket est conectado. Se no estiver, destruir objeto e conectar |
rebonatto | 0:e57bc370d339 | 88 | TCPSocketConnection sock; |
rebonatto | 0:e57bc370d339 | 89 | sock.connect(Settings::get_Neighbor(i), Settings::get_PortTCP()); |
rebonatto | 0:e57bc370d339 | 90 | //escritos = Settings::get_Socket(i).send_all(msg, sizeof(msg)-1); |
rebonatto | 0:e57bc370d339 | 91 | //printf("Socket %d\n",s[i].is_connected()); |
rebonatto | 0:e57bc370d339 | 92 | //Timer t1; |
rebonatto | 0:e57bc370d339 | 93 | //t1.start(); |
rebonatto | 0:e57bc370d339 | 94 | escritos = sock.send_all(msg, strlen(msg)); |
rebonatto | 0:e57bc370d339 | 95 | wait_ms(100); |
rebonatto | 0:e57bc370d339 | 96 | if(escritos != strlen(msg)){ |
rebonatto | 0:e57bc370d339 | 97 | printf("Erro ao enviar mensagem para vizinho\n"); |
rebonatto | 0:e57bc370d339 | 98 | break; |
rebonatto | 0:e57bc370d339 | 99 | } |
rebonatto | 0:e57bc370d339 | 100 | //t1.stop(); |
rebonatto | 0:e57bc370d339 | 101 | //printf("The time taken in send was %d useconds\n", t1.read_us()); |
rebonatto | 0:e57bc370d339 | 102 | |
rebonatto | 0:e57bc370d339 | 103 | sock.close(); |
rebonatto | 0:e57bc370d339 | 104 | |
rebonatto | 0:e57bc370d339 | 105 | } |
rebonatto | 0:e57bc370d339 | 106 | */ |
rebonatto | 0:e57bc370d339 | 107 | } |
rebonatto | 0:e57bc370d339 | 108 | |
rebonatto | 0:e57bc370d339 | 109 | void CommTCP::SendAcom(int tipo,int tomada){ |
rebonatto | 0:e57bc370d339 | 110 | // Aqui chama a funço para enviar um acompanhamento |
rebonatto | 0:e57bc370d339 | 111 | for(int i=0;i<NUMBER_OF_CHANNELS;i++) |
rebonatto | 0:e57bc370d339 | 112 | { |
rebonatto | 0:e57bc370d339 | 113 | EventDetector::get_Detector(i).ExternalTrigger(); |
rebonatto | 0:e57bc370d339 | 114 | } |
rebonatto | 0:e57bc370d339 | 115 | } |
rebonatto | 0:e57bc370d339 | 116 |