UDPversion

Dependencies:   XBee mbed NetServicesMin

Committer:
recotana
Date:
Sat Apr 14 03:53:45 2012 +0000
Revision:
0:84a3b029656e
Child:
1:3a46d2725374
UDPversion

Who changed what in which revision?

UserRevisionLine numberNew contents of line
recotana 0:84a3b029656e 1 #include "types.h"
recotana 0:84a3b029656e 2 #include "mbed.h"
recotana 0:84a3b029656e 3 #include "config.h"
recotana 0:84a3b029656e 4 #include "tcp_server.h"
recotana 0:84a3b029656e 5 #include "tcp_client.h"
recotana 0:84a3b029656e 6
recotana 0:84a3b029656e 7 #include "data_models.h"
recotana 0:84a3b029656e 8 #include "xbee_lib.h"
recotana 0:84a3b029656e 9 #include "net_routing.h"
recotana 0:84a3b029656e 10
recotana 0:84a3b029656e 11 #include "leds.h"
recotana 0:84a3b029656e 12
recotana 0:84a3b029656e 13 extern Serial pc;
recotana 0:84a3b029656e 14
recotana 0:84a3b029656e 15 Host client;
recotana 0:84a3b029656e 16 IpAddr inCommingIp;
recotana 0:84a3b029656e 17
recotana 0:84a3b029656e 18
recotana 0:84a3b029656e 19 extern PrefServer pref;
recotana 0:84a3b029656e 20
recotana 0:84a3b029656e 21 extern bool isHostConnected;
recotana 0:84a3b029656e 22
recotana 0:84a3b029656e 23
recotana 0:84a3b029656e 24 UDPSocket sock;
recotana 0:84a3b029656e 25
recotana 0:84a3b029656e 26 bool healthiPad;
recotana 0:84a3b029656e 27
recotana 0:84a3b029656e 28 int serverInit(void)
recotana 0:84a3b029656e 29 {
recotana 0:84a3b029656e 30
recotana 0:84a3b029656e 31 sock.setOnEvent(&onUDPSocketEvent);
recotana 0:84a3b029656e 32
recotana 0:84a3b029656e 33 Host x(IpAddr(kSserverIp),kServerPort);
recotana 0:84a3b029656e 34
recotana 0:84a3b029656e 35 pc.printf("seting bind\n");
recotana 0:84a3b029656e 36 UDPSocketErr udpErr = sock.bind( x );
recotana 0:84a3b029656e 37
recotana 0:84a3b029656e 38 if ( udpErr != UDPSOCKET_OK ){
recotana 0:84a3b029656e 39 pc.printf("error %d\n", udpErr);
recotana 0:84a3b029656e 40 return -1;
recotana 0:84a3b029656e 41 }
recotana 0:84a3b029656e 42 pc.printf("server setting OK\n");
recotana 0:84a3b029656e 43
recotana 0:84a3b029656e 44
recotana 0:84a3b029656e 45 return 0;
recotana 0:84a3b029656e 46 }
recotana 0:84a3b029656e 47
recotana 0:84a3b029656e 48
recotana 0:84a3b029656e 49 void onUDPSocketEvent(UDPSocketEvent e) {
recotana 0:84a3b029656e 50 static uint16_t checkMbedSendCount=0;
recotana 0:84a3b029656e 51 static uint16_t checkiPadRecCount=0;
recotana 0:84a3b029656e 52 char buff[256];
recotana 0:84a3b029656e 53
recotana 0:84a3b029656e 54
recotana 0:84a3b029656e 55 if (e == UDPSOCKET_READABLE)
recotana 0:84a3b029656e 56 {
recotana 0:84a3b029656e 57 ledTcpRx();
recotana 0:84a3b029656e 58
recotana 0:84a3b029656e 59 Host client;
recotana 0:84a3b029656e 60
recotana 0:84a3b029656e 61 int size = sock.recvfrom(buff, sizeof(buff), &client);
recotana 0:84a3b029656e 62
recotana 0:84a3b029656e 63 DBGV("recieve from %d.%d.%d.%d\r\n", (unsigned char)client.getIp()[0], (unsigned char)client.getIp()[1], (unsigned char)client.getIp()[2], (unsigned char)client.getIp()[3]);
recotana 0:84a3b029656e 64
recotana 0:84a3b029656e 65
recotana 0:84a3b029656e 66 char d;
recotana 0:84a3b029656e 67 if( size == 1)
recotana 0:84a3b029656e 68 {
recotana 0:84a3b029656e 69 switch(buff[0])
recotana 0:84a3b029656e 70 {
recotana 0:84a3b029656e 71 case kHealthCheckiPad:
recotana 0:84a3b029656e 72 {
recotana 0:84a3b029656e 73 d=kHealthCheckiPad;
recotana 0:84a3b029656e 74 udpSend(&d, 1);
recotana 0:84a3b029656e 75 DBGV("return send mbed checker to iPad %d\n",checkiPadRecCount++);
recotana 0:84a3b029656e 76 }
recotana 0:84a3b029656e 77 break;
recotana 0:84a3b029656e 78
recotana 0:84a3b029656e 79 case kHealthCheckmbed:
recotana 0:84a3b029656e 80 {
recotana 0:84a3b029656e 81 healthiPad=false;
recotana 0:84a3b029656e 82 DBGV("recieve mbed checker %d\n",checkMbedSendCount++);
recotana 0:84a3b029656e 83 }
recotana 0:84a3b029656e 84 break;
recotana 0:84a3b029656e 85 }
recotana 0:84a3b029656e 86
recotana 0:84a3b029656e 87 return;
recotana 0:84a3b029656e 88 }
recotana 0:84a3b029656e 89
recotana 0:84a3b029656e 90
recotana 0:84a3b029656e 91 Payload pl;
recotana 0:84a3b029656e 92 memcpy( &pl , buff , sizeof(Payload) );
recotana 0:84a3b029656e 93
recotana 0:84a3b029656e 94 // initPayload(&pl);
recotana 0:84a3b029656e 95
recotana 0:84a3b029656e 96 // dumpPayload(&pl);
recotana 0:84a3b029656e 97
recotana 0:84a3b029656e 98 networkToPayload(&pl);
recotana 0:84a3b029656e 99
recotana 0:84a3b029656e 100 netRouting(&pl);
recotana 0:84a3b029656e 101 }
recotana 0:84a3b029656e 102 }
recotana 0:84a3b029656e 103
recotana 0:84a3b029656e 104
recotana 0:84a3b029656e 105 void recieveDump(char *data , int length){
recotana 0:84a3b029656e 106 pc.printf("size = %d\n -- -id\n",length);
recotana 0:84a3b029656e 107
recotana 0:84a3b029656e 108 for(int i=0;i<16;i++) pc.printf("%d:%0x ",i,data[i]);
recotana 0:84a3b029656e 109 pc.printf("\n--- data\n");
recotana 0:84a3b029656e 110
recotana 0:84a3b029656e 111 int count=0;
recotana 0:84a3b029656e 112 for(int i=0;i<(length-16);i++){
recotana 0:84a3b029656e 113 pc.printf("%02d:%02x ",i,data[16+i]);
recotana 0:84a3b029656e 114 if( count==15 ) {count=0; pc.printf("\n");}
recotana 0:84a3b029656e 115 else count++;
recotana 0:84a3b029656e 116 }
recotana 0:84a3b029656e 117
recotana 0:84a3b029656e 118 pc.printf("\n---frame end\n");
recotana 0:84a3b029656e 119 }
recotana 0:84a3b029656e 120