PingPong

Dependencies:   EthernetInterface_pm mbed-rtos mbed

Committer:
rebonatto
Date:
Thu Mar 27 17:42:00 2014 +0000
Revision:
1:b343d9cd769a
Parent:
0:c8f056a185d0
PingPong para Testar Jose

Who changed what in which revision?

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