server/client

Dependencies:   mbed NetServicesMin

Files at this revision

API Documentation at this revision

Comitter:
recotana
Date:
Thu Feb 23 02:38:05 2012 +0000
Parent:
0:432b571e11a3
Commit message:
added standalone test mode

Changed in this revision

XBee.lib Show annotated file Show diff for this revision Revisions of this file
config.h Show annotated file Show diff for this revision Revisions of this file
data_models.cpp Show annotated file Show diff for this revision Revisions of this file
data_models.h Show annotated file Show diff for this revision Revisions of this file
leds.cpp Show annotated file Show diff for this revision Revisions of this file
leds.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
net_routing.cpp Show annotated file Show diff for this revision Revisions of this file
net_routing.h Show annotated file Show diff for this revision Revisions of this file
tcp_client.cpp Show annotated file Show diff for this revision Revisions of this file
tcp_client.h Show annotated file Show diff for this revision Revisions of this file
tcp_error.cpp Show annotated file Show diff for this revision Revisions of this file
tcp_server.cpp Show annotated file Show diff for this revision Revisions of this file
types.h Show annotated file Show diff for this revision Revisions of this file
util.cpp Show diff for this revision Revisions of this file
xbee_lib.cpp Show annotated file Show diff for this revision Revisions of this file
xbee_lib.h Show annotated file Show diff for this revision Revisions of this file
xbee_rec_route.cpp Show annotated file Show diff for this revision Revisions of this file
xbee_rec_route.h Show annotated file Show diff for this revision Revisions of this file
diff -r 432b571e11a3 -r 6e61ee662fd3 XBee.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/XBee.lib	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/okini3939/code/XBee/#6efb3541af61
diff -r 432b571e11a3 -r 6e61ee662fd3 config.h
--- a/config.h	Sun Feb 19 06:21:50 2012 +0000
+++ b/config.h	Thu Feb 23 02:38:05 2012 +0000
@@ -1,14 +1,41 @@
 #ifndef _CONFIG_
 #define _CONFIG_
+#include "mbed.h"
 
-#define kSserverIp 192,168,0,111
+//comentout -> nomal(do not debug printf)
+//#define DEBUG
+
+//standalone -> mbed ether echo back mode
+//#define _SERVER_TEST_MODE_
+
+#ifdef DEBUG
+#define DBGV(fmt, ...) printf(fmt, __VA_ARGS__)
+#define DBGF(X) printf(X);
+#else
+#define DBGV(...)
+#define DBGF(...)
+#endif
+
+//mbed server.client
+#define kSserverIp  192,168,0,111
 #define kSubnetMask 255,255,255,0
-#define kRouterIp 192,168,0,1
+#define kRouterIp   192,168,0,1
 #define kServerPort 12345
  
-#define kClientIp 192,168,0,2
+//iPad
+#define kClientIp   192,168,0,2
 #define kClientPort 12346
 
+#define kXBeeNo0DL 0x4086B0D5    //mbed server.client
+#define kXBeeNo1DL 0x4086AFDE   //sender
+#define kXBeeNo2DL 0x4086AFEA   //reciever
+
+#define kLedSender    kXBeeNo1DL
+#define kLedReciever  kXBeeNo2DL
+
+
+
+
 typedef enum{
     close,
     connecting,
diff -r 432b571e11a3 -r 6e61ee662fd3 data_models.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data_models.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,64 @@
+#include "types.h"
+#include "data_models.h"
+#include "EthernetNetIf.h"
+
+
+void initPayload(Payload *_payload)
+{
+    _payload->size=sizeof(Payload);
+    for(int i=0 ; i < sizeof(_payload->id.personalId) ; i++) _payload->id.personalId[i]=0;
+    
+    _payload->message.frameNumber=0;
+    _payload->message.device=SERVER;
+    _payload->message.command=SEND;
+    
+    for(int i=0 ; i < sizeof(_payload->message.data) ; i++) _payload->message.data[i]=0;
+}
+
+void payloadToNetwork(Payload *_payload)
+{
+    
+    _payload->size                  = htons(_payload->size);
+    _payload->id.head               = htons(_payload->id.head);
+    _payload->message.totalSize     = htons(_payload->message.totalSize);
+    _payload->message.frameNumber   = htons(_payload->message.frameNumber);
+    
+}
+void networkToPayload(Payload *_payload)
+{
+    _payload->size                  = ntohs(_payload->size);
+    _payload->id.head               = ntohs(_payload->id.head);
+    _payload->message.totalSize     = ntohs(_payload->message.totalSize);
+    _payload->message.frameNumber   = ntohs(_payload->message.frameNumber);
+}
+
+void dumpPayload(Payload *_payload)
+{
+    printf("\r\n======== dump!!\r\n");
+    printf("payload\nsize:%04X\r\n ",_payload->size);
+    
+    printf("Payload id_head:%04X\r\n personal id:",_payload->id.head);  
+    for(int i=0 ; i < sizeof(_payload->id.personalId) ; i++){
+        printf("%d:%02X ",i,_payload->id.personalId[i]);
+    }
+    
+    printf("\r\n");
+    
+    printf("total size:%d , frame number:%d , divece:%0X , command:%02X\r\n"
+        ,_payload->message.totalSize
+        ,_payload->message.frameNumber
+        ,_payload->message.device
+        ,_payload->message.command);
+    
+    printf("message data:\r\n");
+    for(int i=0 ; i < sizeof(_payload->message.data) ; i++){
+         printf("%d:%02X ",i,_payload->message.data[i]);
+    }
+    
+    printf("\r\n--- RAW DATA -------\r\n");
+    for(int i=0 ; i < sizeof(Payload) ; i++){
+         printf("%d:%02X ",i,((uint8_t*)_payload)[i]);
+    }
+    printf("\r\n");
+    
+}
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 data_models.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data_models.h	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,53 @@
+#ifndef _DATA_MODELS_
+#define _DATA_MODELS_
+
+#include "types.h"
+
+typedef enum{
+    SERVER,
+    LED_SENDER,
+    LED_RECIEVER
+} Device;
+
+typedef enum{
+    SEND,
+    RECIEVE,
+    PING,
+    ACK
+} Command;
+
+//
+//for TCP/IP data structure
+//
+
+//48byte message data
+typedef struct{
+    uint16_t totalSize;   //uint16_t + uint16_t + uint8_t + uint8_t + 42byte
+    uint16_t frameNumber;
+    Device   device;
+    Command  command;
+    uint8_t  data[42];
+} Message;
+
+//16byte payload id
+typedef struct{
+    uint16_t head;          //reserve 0x0000
+    uint8_t  personalId[14]; 
+} PayloadID;
+
+//66byte payload
+typedef struct{
+    uint16_t  size;     //  2(size) + 64(payload id + message) = 66 byte   
+    PayloadID id;       // 16 byte
+    Message   message;  // 48 byte
+} Payload;
+
+
+void initPayload(Payload *_payload);
+
+void payloadToNetwork(Payload *_payload);
+void networkToPayload(Payload *_payload);
+
+void dumpPayload(Payload *_payload);
+
+#endif
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 leds.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/leds.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,43 @@
+#include "mbed.h"
+#include "leds.h"
+
+Timeout led_ether;
+Timeout led_xbee;
+Timeout led_device;
+
+DigitalOut ledXb(LED1);
+DigitalOut ledDev(LED2);
+DigitalOut ledTcpCon(LED3);
+DigitalOut ledEt(LED4);
+
+void offEther(void){
+    ledEt=0;
+}
+void offXBee(void){
+    ledXb=0;
+}
+void offDevice(void){
+    ledDev=0;
+}
+
+void ledEther(void)
+{
+    ledEt=1;
+    led_ether.attach(&offEther,kLedOnTime);
+}
+void ledXBee(void)
+{
+    ledXb=1;
+    led_xbee.attach(&offXBee,kLedOnTime);
+}
+void ledDevice(void)
+{
+    ledDev=1;
+    led_device.attach(&offDevice,kLedOnTime);
+}
+
+void ledTcpConnect(bool isConnect)
+{
+    if(isConnect)   ledTcpCon=1;
+    else            ledTcpCon=0;
+}
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 leds.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/leds.h	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,11 @@
+#ifndef _LEDS_
+#define _LEDS_
+
+#define kLedOnTime 0.2
+
+void ledEther(void);
+void ledXBee(void);
+void ledDevice(void);
+void ledTcpConnect(bool isConnect);
+
+#endif
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 main.cpp
--- a/main.cpp	Sun Feb 19 06:21:50 2012 +0000
+++ b/main.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -1,17 +1,78 @@
 #include "mbed.h"
+#include "xbee_lib.h"
 #include "EthernetNetIf.h"
 #include "config.h"
 #include "tcp_server.h"
 #include "tcp_client.h"
+#include "xbee_rec_route.h"
+
+#include "leds.h"
 
 EthernetNetIf eth ;   
 
 Ticker connectCheck;
- 
+
+#ifdef _SERVER_TEST_MODE_
+
+#include "data_models.h"
+
+DigitalIn  recSw(p20);
+Timeout chatter;
+bool isPressed;
+
+void testModeInit(void)
+{
+    recSw.mode(PullUp);
+}
+
+void testSendRecieveData()
+{
+   Payload payload;
+   initPayload(&payload);
+   payload.size=sizeof(Payload);
+   
+   payload.id.head=0x0000;
+   uint8_t tmpid[14]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44};
+   for(int i=0;i<sizeof(tmpid);i++) payload.id.personalId[i]=tmpid[i];
+   
+   
+   payload.message.frameNumber=1;
+   payload.message.device=LED_RECIEVER;
+   payload.message.command=RECIEVE;
+   
+   uint8_t tmpdata[42]={
+    1,2,3,4,5,6,7,8,9,10,
+    11,12,13,14,15,16,17,18,19,20,
+    21,22,23,24,25,26,27,28,29,30,
+    31,32,33,34,35,36,37,38,39,40,
+    41,42};
+   for(int i=0;i<sizeof(tmpdata);i++) payload.message.data[i]=tmpdata[i];
+   
+   payload.message.totalSize=
+     sizeof(payload.message.totalSize)
+    +sizeof(payload.message.frameNumber)
+    +sizeof(payload.message.device)
+    +sizeof(payload.message.command)
+    +sizeof(payload.message.data);
+
+   tcpSendPayload(&payload); 
+   
+}
+
+
+#endif
+
+
+
 int main() {
 
+    #ifdef _SERVER_TEST_MODE_
+    testModeInit();
+    #endif
+    
+    xbeeInit();
 
-    EthernetNetIf eth( //)  -- static IP address 
+    EthernetNetIf eth( //  -- static IP address
         IpAddr(kSserverIp),     // IP Address
         IpAddr(kSubnetMask),   // Subnet Mask
         IpAddr(kRouterIp),     // Default Gateway
@@ -20,20 +81,34 @@
 
     if( eth.setup() != ETH_OK )
     {
-        printf("Ether Setup Error\r\n");
+        DBGF("Ether Setup Error\r\n");
         return -1;
     }
-    printf("Setup OK\r\n");
+    DBGF("Setup OK\r\n");
 
     IpAddr ip = eth.getIp() ;
-    printf("mbed IP Address is [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3]) ;
+    DBGV("mbed IP Address is [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3]) ;
 
     serverInit();
+    clientInit();
     
-    clientInit();
     connectCheckStart( IpAddr(kClientIp),kClientPort );
+    wait(2);
+    ledEther();
+    ledXBee();
+    ledDevice();
 
     while(1) {
         Net::poll();
+        
+        #ifdef _SERVER_TEST_MODE_
+        if(!recSw){
+            testSendRecieveData();
+            wait(2);
+        }
+        #else
+        xbeeRecieveRouting();
+        #endif
+
     }
 }
diff -r 432b571e11a3 -r 6e61ee662fd3 net_routing.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/net_routing.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,38 @@
+#include "net_routing.h"
+#include "types.h"
+#include "config.h"
+#include "xbee_lib.h"
+#include "tcp_client.h"
+
+void netRouting(Payload *_payload)
+{
+    
+
+    #ifdef _SERVER_TEST_MODE_
+        tcpSendPayload(_payload);
+
+    #else
+    
+    uint32_t xbeeAdr=0;
+    
+    switch(_payload->message.device)
+    {
+        case LED_SENDER:
+        {
+            xbeeAdr = kLedSender;
+            break;
+        }
+        
+        case LED_RECIEVER:
+        {
+            xbeeAdr = kLedReciever;
+            break;
+        }
+    
+    }
+    
+
+    xbeeSend(xbeeAdr,_payload);
+    #endif
+    
+}
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 net_routing.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/net_routing.h	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,8 @@
+#ifndef _RECIEVE_ROUTING_
+#define _RECIEVE_ROUTING_
+
+#include "data_models.h"
+
+void netRouting(Payload *payload);
+
+#endif
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 tcp_client.cpp
--- a/tcp_client.cpp	Sun Feb 19 06:21:50 2012 +0000
+++ b/tcp_client.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -1,10 +1,14 @@
+#include "types.h"
 #include "mbed.h"
 #include "config.h"
 #include "tcp_error.h"
 #include "tcp_client.h"
 
+#include "leds.h"
+
 extern IpAddr inCommingIp;
 
+
 Host server;
 TCPSocket sendSock;
 ConnectStatus clientStatus;
@@ -15,62 +19,73 @@
 int clientPort;
 
 void onSendEvent (TCPSocketEvent e) {
-    printf("... client event arrival!\n");
+    DBGF("... client event arrival!\r\n");
     switch(e)
     {
-        case TCPSOCKET_CONNECTED: // Ú‘±Š®—¹
+        case TCPSOCKET_CONNECTED:
         {
-            char str[]="connect!";
-            sendSock.send(str,strlen(str) ); // ‘—M
+            ledTcpConnect(true);
+            
+            char str[]="wellcome! server connected!";
+            
+            sendSock.send(str,strlen(str) );
+            
             clientStatus=connected;
-            printf("TCPSOCKET_CONNECTED!!\n");
+            DBGF("TCPSOCKET_CONNECTED!!\r\n");
             break;
          }
 
-        case TCPSOCKET_WRITEABLE: // ‘—M‰Â”\i‘—MŠ®—¹j
+        case TCPSOCKET_WRITEABLE:
         {
-            printf("TCPSOCKET_WRITEABLE!!\n");
+            DBGF("TCPSOCKET_WRITEABLE!!\r\n");
             clientStatus=connected;
+            ledTcpConnect(true);
             break;
         }
 
-        case TCPSOCKET_READABLE: // ŽóMƒf[ƒ^‚ ‚è
-        {   printf("TCPSOCKET_READABLE!!\n");
+        case TCPSOCKET_READABLE:
+        {   DBGF("TCPSOCKET_READABLE!!\r\n");
             clientStatus=connected;
+            ledTcpConnect(true);
             break;
         }
         case TCPSOCKET_CONTIMEOUT:
         {
-            printf("TCPSOCKET_CONTIMEOUT!!\n");
+            DBGF("TCPSOCKET_CONTIMEOUT!!\r\n");
             socketClose();
+            ledTcpConnect(false);
             break;
         }
         case TCPSOCKET_CONRST:
         {
-             printf("TCPSOCKET_CONRST!!\n");
+             DBGF("TCPSOCKET_CONRST!!\r\n");
              socketClose();
+             ledTcpConnect(false);
             break;
         }
         case TCPSOCKET_CONABRT:
         {
-             printf("TCPSOCKET_CONABRT!!\n");
+             DBGF("TCPSOCKET_CONABRT!!\r\n");
              socketClose();
+             ledTcpConnect(false);
             break;
         }
         case TCPSOCKET_ERROR:
-        {   printf("TCPSOCKET_ERROR\n");
+        {   DBGF("TCPSOCKET_ERROR\r\n");
             socketClose();
+            ledTcpConnect(false);
             break;
             
         }
          case TCPSOCKET_DISCONNECTED:
         {
-            printf("TCPSOCKET_DISCONNECTED...\n");
+            DBGF("TCPSOCKET_DISCONNECTED...\r\n");
             socketClose();
+            ledTcpConnect(false);
             break;
         }
     }
-    printf("...client event out\n");
+    DBGF("...client event out\r\n");
 }
 
 void clientInit(void){
@@ -81,11 +96,11 @@
 int clientConnect(IpAddr ip , int port)
 {
     if(clientStatus == connecting){
-        printf("socket already connecting..\n");
+        DBGF("socket already connecting..\r\n");
         return 0;
     }
     else if(clientStatus == connected){
-        printf("socket already connected..\n");
+        DBGF("socket already connected..\r\n");
         return 0;
     }
 
@@ -93,7 +108,7 @@
     
     TCPSocketErr err= sendSock.connect(server);
     if (err != TCPSOCKET_OK) {
-        printf("connect Error. ");
+        DBGF("connect Error. ");
         dispTcpError(err);
         clientStatus=close;
         return -1;
@@ -103,8 +118,11 @@
 }
 
 int tcpSend(char *data,int length){
- 
-    return sendSock.send(data, length);
+
+    ledEther();
+    int ret = sendSock.send(data, length);
+
+    return ret;
     
 }
 
@@ -127,7 +145,17 @@
 {
     clientIp=ip;
     clientPort=port;
-    clientCheck.attach(&checkConnect,3);
-    
+    clientCheck.attach(&checkConnect,3);   
 }
 
+int tcpSendPayload(Payload *_payload)
+{
+    uint8_t tmp[_payload->size];
+    
+    memcpy(tmp,(uint8_t*)_payload,_payload->size);
+    
+    payloadToNetwork((Payload *)tmp);
+    
+    return tcpSend((char*)tmp,_payload->size);
+}
+
diff -r 432b571e11a3 -r 6e61ee662fd3 tcp_client.h
--- a/tcp_client.h	Sun Feb 19 06:21:50 2012 +0000
+++ b/tcp_client.h	Thu Feb 23 02:38:05 2012 +0000
@@ -3,7 +3,7 @@
 
 #include "EthernetNetIf.h"
 #include "TCPSocket.h"
-
+#include "data_models.h"
 
 
 void clientInit(void);
@@ -13,6 +13,7 @@
 void connectCheckStart(IpAddr ip , int port);
 
 int tcpSend(char *data,int length);
+int tcpSendPayload(Payload *_payload);
 
 void checkConnect(void);
 void socketClose(void);
diff -r 432b571e11a3 -r 6e61ee662fd3 tcp_error.cpp
--- a/tcp_error.cpp	Sun Feb 19 06:21:50 2012 +0000
+++ b/tcp_error.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -3,16 +3,16 @@
 #include "TCPSocket.h"
 
 char tcpErrMes[8][100]={
-    "TCPSOCKET_SETUP TCPSocket not properly configured.\n",
-    "TCPSOCKET_TIMEOUT Connection timed out.\n",
-    "TCPSOCKET_IF Interface has problems, does not exist or is not initialized.\n",
-    "TCPSOCKET_MEM Not enough mem.\n",
-    "TCPSOCKET_INUSE Interface / Port is in use.\n",
-    "TCPSOCKET_EMPTY Connections queue is empty.\n",
-    "TCPSOCKET_RST Connection was reset by remote host.\n",
-    "TCPSOCKET_OK Success.\n"
+    "TCPSOCKET_SETUP TCPSocket not properly configured.\r\n",
+    "TCPSOCKET_TIMEOUT Connection timed out.\r\n",
+    "TCPSOCKET_IF Interface has problems, does not exist or is not initialized.\r\n",
+    "TCPSOCKET_MEM Not enough mem.\r\n",
+    "TCPSOCKET_INUSE Interface / Port is in use.\r\n",
+    "TCPSOCKET_EMPTY Connections queue is empty.\r\n",
+    "TCPSOCKET_RST Connection was reset by remote host.\r\n",
+    "TCPSOCKET_OK Success.\r\n"
 };
 
 void dispTcpError(TCPSocketErr err){
-     printf("%s\n",tcpErrMes[err]) ;
+     printf("%s\r\n",tcpErrMes[err]) ;
 }
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 tcp_server.cpp
--- a/tcp_server.cpp	Sun Feb 19 06:21:50 2012 +0000
+++ b/tcp_server.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -1,29 +1,38 @@
+#include "types.h"
 #include "mbed.h"
 #include "config.h"
 #include "tcp_server.h"
 #include "tcp_client.h"
 
+#include "data_models.h"
+#include "xbee_lib.h"
+#include "net_routing.h"
+
+#include "leds.h"
+
 TCPSocket listenSock;
 TCPSocket* recieveSock;
 Host client;
 IpAddr inCommingIp;
 
+
+
 extern bool isHostConnected;
 int serverInit(void)
 {
     listenSock.setOnEvent(&onServerListnerEvent) ;
     
-    printf("Bindding...\r\n") ;
+    DBGF("Bindding...\r\n") ;
 
     if ( listenSock.bind(Host(IpAddr(), kServerPort)) != ETH_OK ){
-        printf("Bindding Error.\r\n") ;
+        DBGF("Bindding Error.\r\n") ;
         return -1 ;
     }
     
     printf("Listen...\r\n");
     
     if ( listenSock.listen() != ETH_OK ){
-        printf("Listen Error.\r\n") ;
+        DBGF("Listen Error.\r\n") ;
         return -1 ;
     }
     return 0;
@@ -32,13 +41,13 @@
 //Listner Event
 void onServerListnerEvent(TCPSocketEvent e)
 {
-    printf("server ---IN TCPSocketEvent ---\r\n");
+    DBGF("server ---IN TCPSocketEvent ---\r\n");
     
     if ( e == TCPSOCKET_ACCEPT ){
-        printf("Listening: TCP Socket Accepted\r\n");
+        DBGF("Listening: TCP Socket Accepted\r\n");
         
         if ( listenSock.accept(&client, &recieveSock) != TCPSOCKET_OK ) {
-            printf("onTcpSocketEvent Error \r\n");
+            DBGF("onTcpSocketEvent Error \r\n");
             return; 
         }
 
@@ -46,75 +55,85 @@
         
         //Get Client Side IP Address
         inCommingIp = client.getIp();
-        printf("Controler IP Address is [%d.%d.%d.%d].\r\n", inCommingIp[0], inCommingIp[1], inCommingIp[2], inCommingIp[3]);
+        DBGV("Controler IP Address is [%d.%d.%d.%d].\r\n", inCommingIp[0], inCommingIp[1], inCommingIp[2], inCommingIp[3]);
     }
 
-    printf("server --- OUT TCPSocketEvent ---\r\n\r\n") ;
+    DBGF("server --- OUT TCPSocketEvent ---\r\n\r\n") ;
  }
 
 void onServerRecievetEvent(TCPSocketEvent e)
 {
-    printf("server --- IN ConnectEvent ---\r\n");
+    DBGF("server --- IN ConnectEvent ---\r\n");
     
     
     switch(e)
     {
         case TCPSOCKET_CONNECTED:
-            printf("Connected to host.\r\n") ;
+            DBGF("Connected to host.\r\n") ;
             break;
             
         case TCPSOCKET_WRITEABLE:
-            printf("Can write data to buf.\r\n");
+            DBGF("Can write data to buf.\r\n");
             break;
             
         case TCPSOCKET_READABLE:
-            printf("Data in buf.\r\n");            
-            char buf[128] ;
-            while ( int len = recieveSock->recv(buf,sizeof(buf)) ) {
+            DBGF("Data in buf.\r\n");  
+                      
+            ledEther();
+            
+            Payload pl;
+            initPayload(&pl);
+            
+            while ( int len = recieveSock->recv((char*)&pl,256) ) {
                 
-                int err =tcpSend(buf, len);
-
-                recieveDump(buf,len);
+                //raw data dump
+               // dumpPayload(&payload); 
+                
+                networkToPayload(&pl);
+                 
+                netRouting(&pl);
+                
             }
+            ;
             break;
             
         case TCPSOCKET_CONTIMEOUT:
-            printf("Connection timed out.\r\n");
+            DBGF("Connection timed out.\r\n");
             break ;
             
         case TCPSOCKET_CONRST:
-            printf("Connection was reset by remote host.\r\n");
+            DBGF("Connection was reset by remote host.\r\n");
             break ;
             
         case TCPSOCKET_CONABRT:
-            printf("Connection was aborted.\r\n") ; 
+            DBGF("Connection was aborted.\r\n") ; 
             break ;
             
         case TCPSOCKET_ERROR:
-            printf("Unknown error.\r\n") ;
+            DBGF("Unknown error.\r\n") ;
             break ;
             
          case TCPSOCKET_DISCONNECTED:
-            printf("Tcp Socket Disconnected\r\n") ;
+            DBGF("Tcp Socket Disconnected\r\n") ;
             recieveSock->close() ;
             break;   
     }
-    printf("--- OUT ConnectEvent ---\r\n\r\n");
+    DBGF("--- OUT ConnectEvent ---\r\n\r\n");
 }
 
 void recieveDump(char *data , int length){
-     printf("size = %d\n -- -id\n",length);
+     DBGV("size = %d\n -- -id\n",length);
      
      for(int i=0;i<16;i++) printf("%d:%0x ",i,data[i]);
-     printf("\n--- data\n");
+     DBGF("\n--- data\n");
      
      int count=0;
      for(int i=0;i<(length-16);i++){
-      printf("%02d:%02x ",i,data[16+i]);
+      DBGV("%02d:%02x ",i,data[16+i]);
       if( count==15 ) {count=0; printf("\n");}
       else count++;
      }
      
-     printf("\n---frame end\n");
+     DBGF("\n---frame end\n");
 }
 
diff -r 432b571e11a3 -r 6e61ee662fd3 types.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/types.h	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,114 @@
+/*----------------------------------------------------------------------------*/
+/* File Information                                                           */
+/*----------------------------------------------------------------------------*/
+/* Name       : types.h                                                       */
+/* Type       : C Programming Language Header                                 */
+/*----------------------------------------------------------------------------*/
+/*----------------------------------------------------------------------------*/
+
+#ifndef __TYPES_H__
+#define __TYPES_H__
+
+#include "stdint.h"
+/*
+typedef char                    int8_t;
+typedef unsigned    char        uint8_t;
+typedef signed      short       int16_t;
+typedef unsigned    short       uint16_t;
+typedef signed      int         int32_t;
+typedef unsigned    int         uint32_t;
+typedef signed      long long   int64_t;
+typedef unsigned    long long   uint64_t;
+*/
+//typedef bool                bool_t;
+typedef enum{TRUE, FALSE} bool_t;
+
+//=========================================================================
+//    byte bit access
+//=========================================================================
+typedef union{                    //    BYTE/NIBBLE/BIT access
+    uint8_t byte;                //    Byte access
+    struct{                        //    Nibble access
+        uint8_t lo : 4;        //        lower(Bit0 - 3)
+        uint8_t hi : 4;        //        upper(Bit4 - 7)
+    }nibble;
+    struct{                        //    Bit access
+        uint8_t b0 : 1;        //        Bit0
+        uint8_t b1 : 1;        //        Bit1
+        uint8_t b2 : 1;        //        Bit2
+        uint8_t b3 : 1;        //        Bit3
+        uint8_t b4 : 1;        //        Bit4
+        uint8_t b5 : 1;        //        Bit5
+        uint8_t b6 : 1;        //        Bit6
+        uint8_t b7 : 1;        //        Bit7
+    }bits;
+}byte_t;
+
+//=========================================================================
+//    word bit access
+//=========================================================================
+typedef union{                    //    WORD/BYTE/NIBBLE/BIT access
+    uint16_t word;                //    Word access
+    struct{                        //    Byte access
+        uint8_t b0;            //        upper byte
+        uint8_t b1;            //        lower byte
+    }byte;
+    struct    {                    //    Nibble access
+        uint8_t n0 : 4;        //        lower byte low(Bit 0 -  3)
+        uint8_t n1 : 4;        //        lower byte up (Bit 4 -  7)
+        uint8_t n2 : 4;        //        upper byte low(Bit 8 - 11)
+        uint8_t n3 : 4;        //        upper byte up (Bit12 - 15)
+    }nibble;
+    struct{                        //    Bit acces
+        uint8_t b0 : 1;        //        Bit0
+        uint8_t b1 : 1;        //        Bit1
+        uint8_t b2 : 1;        //        Bit2
+        uint8_t b3 : 1;        //        Bit3
+        uint8_t b4 : 1;        //        Bit4
+        uint8_t b5 : 1;        //        Bit5
+        uint8_t b6 : 1;        //        Bit6
+        uint8_t b7 : 1;        //        Bit7
+        uint8_t b8 : 1;        //        Bit8
+        uint8_t b9 : 1;        //        Bit9
+        uint8_t b10: 1;        //        Bit10
+        uint8_t b11: 1;        //        Bit11
+        uint8_t b12: 1;        //        Bit12
+        uint8_t b13: 1;        //        Bit13
+        uint8_t b14: 1;        //        Bit14
+        uint8_t b15: 1;        //        Bit15
+    }bits;
+}word_t;
+
+
+//=========================================================================
+//    ascii code
+//=========================================================================
+#define Z_NUL (0x00)
+#define Z_SOH (0x01)
+#define Z_STX (0x02)
+#define Z_ETX (0x03)
+#define Z_EOT (0x04)
+#define Z_ENQ (0x05)
+#define Z_ACK (0x06)
+#define Z_BEL (0x07)
+
+#define Z_BS  (0x08)
+#define Z_HT  (0x09)
+#define Z_LF  (0x0A)
+#define Z_HM  (0x0B)
+#define Z_FF  (0x0C)
+#define Z_CR  (0x0D)
+#define Z_SO  (0x0E)
+#define Z_SI  (0x0F)
+
+#define Z_DLE (0x10)
+#define Z_DC1 (0x11)
+#define Z_DC2 (0x12)
+#define Z_DC3 (0x13)
+#define Z_DC4 (0x14)
+#define Z_NAK (0x15)
+#define Z_SYN (0x16)
+#define Z_ETB (0x17)
+
+
+#endif    /* __TYPES_H__*/
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 util.cpp
diff -r 432b571e11a3 -r 6e61ee662fd3 xbee_lib.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xbee_lib.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,45 @@
+#include "mbed.h"
+#include "types.h"
+#include "config.h"
+#include "XBee.h"
+#include "xbee_lib.h"
+
+#include "leds.h"
+
+XBee xbee(p13, p14);
+ZBRxResponse zbRx = ZBRxResponse();
+
+void xbeeInit(void)
+{
+    xbee.begin(9800);
+}
+
+void xbeeSend(uint32_t addr , Payload *_payload)
+{
+    ledXBee();
+    
+    XBeeAddress64 deviceAdr = XBeeAddress64(0x0013a200, addr);
+    
+    uint16_t length = sizeof(Payload);
+    _payload->size = length;
+    uint8_t tmp[length];
+    
+    memcpy(tmp , (uint8_t*)_payload , length);
+    
+    payloadToNetwork((Payload*)tmp);
+    ZBTxRequest zbTx = ZBTxRequest(deviceAdr , tmp , length );
+    
+    xbee.send(zbTx);
+    DBGF("+++++ xbee send!!\r\n");
+    
+ 
+}
+
+void xbeeReadPacket(void)
+{
+    xbee.readPacket();
+}
+bool isXbeeAvaiable(void)
+{
+   return xbee.getResponse().isAvailable();
+}
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 xbee_lib.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xbee_lib.h	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,13 @@
+#ifndef _XBEE_LIB_
+#define _XBEE_LIB_
+
+#include "types.h"
+#include "data_models.h"
+
+void xbeeInit(void);
+void xbeeSend( uint32_t addr , Payload *_payload );
+
+void xbeeReadPacket(void);
+bool isXbeeAvaiable(void);
+
+#endif
\ No newline at end of file
diff -r 432b571e11a3 -r 6e61ee662fd3 xbee_rec_route.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xbee_rec_route.cpp	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,96 @@
+#include "xbee_rec_route.h"
+#include "config.h"
+#include "XBee.h"
+
+#include "types.h"
+
+#include "xbee_lib.h"
+#include "tcp_client.h"
+#include "leds.h"
+
+extern XBee xbee;
+extern ZBRxResponse zbRx;
+
+
+void xbeeRecieveRouting(void)
+{
+
+     xbeeReadPacket();
+    
+   
+        if (isXbeeAvaiable()) {
+            
+            
+    
+            DBGF("xbee aviable!\r\n");
+        
+            if (xbee.getResponse().getApiId() == ZB_RX_RESPONSE) {
+                
+                ledXBee();
+                
+                xbee.getResponse().getZBRxResponse(zbRx);
+                
+                Payload payload;
+
+                uint16_t length = (unsigned char)zbRx.getData()[0];
+                length =(length<<8) + (unsigned char)zbRx.getData()[1];
+                
+                DBGV("length=%04X\r\n",length);
+                
+                memcpy(&payload, (unsigned char *)zbRx.getData(), length);
+
+                networkToPayload(&payload);
+               
+                routing(&payload);
+                /*
+                printf("xbee recieve!! size:%d\r\n",length);
+                
+                printf("---------dump end\r\n");
+                */
+                
+                
+           
+            }
+        //    printf("\r\n");
+        }
+    
+    
+}
+
+void routing(Payload *_payload)
+{
+//     dumpPayload(_payload);
+    switch(_payload->message.command)
+    {
+        case SEND:
+        {
+            _payload->message.command=ACK;
+        //    xbeeSend(0x4086B0D5,_payload);
+            DBGF("*******  send!  *******\r\n");
+        }
+        break;
+        
+         case RECIEVE:
+        {
+            DBGF("******  recieve!  *******\r\n");
+        }
+        break;
+        
+         case PING:
+        {   
+            _payload->message.command=ACK;
+       //     xbeeSend(0x4086B0D5,_payload);
+            tcpSendPayload(_payload);
+            DBGF("*******  ping!  **************\r\n");
+        }
+        break;
+        
+         case ACK:
+        {   
+            tcpSendPayload(_payload);
+            DBGF("*******  ACK!  **************\r\n");
+        }
+        break;
+    }
+
+}
diff -r 432b571e11a3 -r 6e61ee662fd3 xbee_rec_route.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xbee_rec_route.h	Thu Feb 23 02:38:05 2012 +0000
@@ -0,0 +1,8 @@
+#ifndef _XBEE_ROUTING_
+#define _XBEE_ROUTING_
+#include "data_models.h"
+
+void xbeeRecieveRouting(void); 
+void routing(Payload *_payload);
+
+#endif
\ No newline at end of file