Versão atual 13-12-2013.

Dependencies:   EthernetInterface mbed-rtos mbed

Committer:
rebonatto
Date:
Fri Dec 13 11:45:06 2013 +0000
Revision:
1:238ac24e46dd
Parent:
0:65c41a68b49a
Atual 13-12-2013.

Who changed what in which revision?

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