nakagawa kit emurator (add CR) BaudRate 115200,p20

Dependencies:   mbed NetServicesMin

Files at this revision

API Documentation at this revision

Comitter:
recotana
Date:
Tue Apr 17 03:38:00 2012 +0000
Parent:
2:c3f3d783560d
Child:
4:9daa308155d6
Commit message:

Changed in this revision

common/data_models.cpp Show annotated file Show diff for this revision Revisions of this file
common/data_models.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
--- a/common/data_models.cpp	Thu Mar 22 15:15:10 2012 +0000
+++ b/common/data_models.cpp	Tue Apr 17 03:38:00 2012 +0000
@@ -2,6 +2,8 @@
 #include "data_models.h"
 #include "EthernetNetIf.h"
 
+extern Serial pc;
+
 
 void initPayload(Payload *_payload)
 {
@@ -13,9 +15,9 @@
     
     for(int i=0 ; i < sizeof(frame->id.personalId) ; i++) frame->id.personalId[i]=0;
     
-    frame->message.frameNumber=0x0001;
-    frame->message.device=LED_RECIEVER;
-    frame->message.command=RECIEVE;
+    frame->message.frameNumber=0xFFFF;
+    frame->message.device=SERVER;
+    frame->message.command=PING;
     
     for(int i=0 ; i < sizeof(_payload->frame.message.data) ; i++) _payload->frame.message.data[i]=0;
 }
@@ -23,21 +25,77 @@
 void payloadToNetwork(Payload *_payload)
 {
     Frame *frame=&_payload->frame;
-    _payload->size                  = htons(_payload->size);
-    frame->id.head               = htons(frame->id.head);
+    _payload->size               = htons(_payload->size);
+//    frame->id.head               = htons(frame->id.head);
     frame->message.totalSize     = htons(frame->message.totalSize);
     frame->message.frameNumber   = htons(frame->message.frameNumber);
+    frame->message.sum           = htons(frame->message.sum);
     
+    if(frame->message.command == PING) {
+    
+    if(frame->message.device == SERVER)
+    {
+    
+        PrefServer *data;
+        data =  (PrefServer*)frame->message.data;
+        data->serverPort = htons(data->serverPort);
+        data->destinationPort = htons(data->destinationPort);
+        data->xbeeAdress = htonl(data->xbeeAdress);
+
+    }
+    else if(frame->message.device == LED_SENDER)
+    {
+        PrefSender *data;
+        data =  (PrefSender*)frame->message.data;
+        data->xbeeAdress = htonl(data->xbeeAdress);
+        data->currentFrameNumber = htons(data->currentFrameNumber);
+    }
+    else if(frame->message.device == LED_RECIEVER)
+    {
+        PrefReciever *data;
+        data =  (PrefReciever*)frame->message.data;
+        data->xbeeAdress = htonl(data->xbeeAdress);
+    }
+    }
+      
 }
 void networkToPayload(Payload *_payload)
 {
     Frame *frame=&_payload->frame;
-    _payload->size                  = ntohs(_payload->size);
-    frame->id.head               = ntohs(frame->id.head);
+    _payload->size               = ntohs(_payload->size);
+//    frame->id.head               = ntohs(frame->id.head);
     frame->message.totalSize     = ntohs(frame->message.totalSize);
     frame->message.frameNumber   = ntohs(frame->message.frameNumber);
+    frame->message.sum           = ntohs(frame->message.sum); 
+    
+    if(frame->message.command == PING){
+    
+    if(frame->message.device == SERVER)
+    {      
+        PrefServer *data;
+        data =  (PrefServer*)frame->message.data;
+        data->serverPort = ntohs(data->serverPort);
+        data->destinationPort = ntohs(data->destinationPort);
+        data->xbeeAdress = ntohl(data->xbeeAdress);
+    }
+    else if(frame->message.device == LED_SENDER)
+    {
+        PrefSender *data;
+        data =  (PrefSender*)frame->message.data;
+        data->xbeeAdress = ntohl(data->xbeeAdress);
+        data->currentFrameNumber = ntohs(data->currentFrameNumber);
+    }
+    else if(frame->message.device == LED_RECIEVER)
+    {
+        PrefReciever *data;
+        data =  (PrefReciever*)frame->message.data;
+        data->xbeeAdress = ntohl(data->xbeeAdress);
+    }
+    }
 }
 
+
+
 void initTestPayloadData(Payload *_payload)
 {
    Frame *frame=&_payload->frame;
@@ -45,21 +103,21 @@
    initPayload(_payload);
    _payload->size=sizeof(Payload);
    
-   frame->id.head=0x0000;
-   uint8_t tmpid[14]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44};
+//   frame->id.head=0x0000;
+//   uint8_t tmpid[14]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44};
+   uint8_t tmpid[16]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46};
    for(int i=0;i<sizeof(tmpid);i++) frame->id.personalId[i]=tmpid[i];
    
    
    frame->message.frameNumber=1;
-   frame->message.device=LED_SENDER;
+   frame->message.device=SERVER;
    frame->message.command=SEND_SINGLE;
    
-   uint8_t tmpdata[42]={
+   uint8_t tmpdata[40]={
     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};
+    31,32,33,34,35,36,37,38,39,40};
    for(int i=0;i<sizeof(tmpdata);i++) frame->message.data[i]=tmpdata[i];
    
    frame->message.totalSize=
@@ -68,39 +126,86 @@
     +sizeof(frame->message.device)
     +sizeof(frame->message.command)
     +sizeof(frame->message.data);
+    
+    uint16_t sum = culcSum(_payload);
+    
+    frame->message.sum = sum;
 
 }
 
+uint16_t culcSum(Payload *_payload){
+
+    uint16_t tmpSum = _payload->ftype;
+    uint8_t *data = (uint8_t *)&_payload->frame;
+    
+    for(uint8_t i=0 ; i<sizeof(Frame)-2 ; i++){
+        tmpSum += data[i];
+    }
+    return tmpSum;
+}
 
 void dumpPayload(Payload *_payload)
 {
     Frame *frame=&_payload->frame;
-    printf("\r\n======== dump!!\r\n");
-    printf("payload\nsize:%04X\r\n ",_payload->size);
-    printf("Type:%0X\r\n ",_payload->ftype);
+    pc.printf("\r\n======== dump!!\r\n");
+    pc.printf("payload\nsize:%04X\r\n ",_payload->size);
+    pc.printf("Type:%0X\r\n ",_payload->ftype);
     
-    printf("Payload id_head:%04X\r\n personal id:",_payload->frame.id.head);  
+//    pc.printf("Payload id_head:%04X\r\n personal id:",_payload->frame.id.head);
+    pc.printf("personal id:");  
     for(int i=0 ; i < sizeof(frame->id.personalId) ; i++){
-        printf("%d:%02X ",i,frame->id.personalId[i]);
+        pc.printf("%02X:%c ",frame->id.personalId[i],frame->id.personalId[i]);
     }
     
-    printf("\r\n");
+    pc.printf("\r\n");
     
-    printf("total size:%d , frame number:%d , divece:%0X , command:%02X\r\n"
+    pc.printf("total size:%d , frame number:%d , divece:%0X , command:%02X , sum:%04X\r\n"
         ,frame->message.totalSize
         ,frame->message.frameNumber
         ,frame->message.device
-        ,frame->message.command);
+        ,frame->message.command
+        ,frame->message.sum);
     
-    printf("message data:\r\n");
+    pc.printf("message data:\r\n");
     for(int i=0 ; i < sizeof(frame->message.data) ; i++){
-         printf("%d:%02X ",i,_payload->frame.message.data[i]);
+         pc.printf("%d:%02X ",i,_payload->frame.message.data[i]);
     }
     
-    printf("\r\n--- RAW DATA -------\r\n");
+    pc.printf("\r\n--- RAW DATA -------\r\n");
     for(int i=0 ; i < sizeof(Payload) ; i++){
-         printf("%d:%02X ",i,((uint8_t*)_payload)[i]);
+         pc.printf("%d:%02X ",i,((uint8_t*)_payload)[i]);
     }
-    printf("\r\n");
+    pc.printf("\r\n");
     
+}
+
+void dumpPrefSender(PrefSender *prf)
+{
+    pc.printf("current frame number:%d\n",prf->currentFrameNumber);
+    pc.printf("gainData gain:%d\n",prf->gainData.gain);
+    pc.printf("gainData middleLevel:%d\n",prf->gainData.middleLevel);
+    pc.printf("lightsw:%d\n",prf->lightsw);
+    pc.printf("continueusMode:%d\n",prf->continueusMode);
+    pc.printf("isSend:%d\n",prf->isSend);
+    pc.printf("xbeeAdress:%X\n",prf->xbeeAdress);
+
+}
+void dumpPrefReciever(PrefReciever *prf)
+{
+
+    pc.printf("xbeeAdress:%X\n",prf->xbeeAdress);
+
+}
+void dumpPrefServer(PrefServer *prf)
+{
+    pc.printf("xbeeAdress:%X\n",prf->xbeeAdress);
+    pc.printf("server ip:%d.%d.%d.%d\n",prf->serverAddress[0],prf->serverAddress[1],prf->serverAddress[2],prf->serverAddress[3]);
+    pc.printf("subnet ip:%d.%d.%d.%d\n",prf->subnetMask[0],prf->subnetMask[1],prf->subnetMask[2],prf->subnetMask[3]);
+    pc.printf("router ip:%d.%d.%d.%d\n",prf->routerAddress[0],prf->routerAddress[1],prf->routerAddress[2],prf->routerAddress[3]);
+
+    pc.printf("Server Port:%d\n",prf->serverPort);
+    
+    pc.printf("Destination ip:%d.%d.%d.%d\n",prf->destinationAddress[0],prf->destinationAddress[1],prf->destinationAddress[2],prf->destinationAddress[3]);
+    pc.printf("Destination Port:%d\n",prf->destinationPort);
+
 }
\ No newline at end of file
--- a/common/data_models.h	Thu Mar 22 15:15:10 2012 +0000
+++ b/common/data_models.h	Tue Apr 17 03:38:00 2012 +0000
@@ -23,26 +23,27 @@
     SEND_SINGLE,
     SEND_CONTINUEOUS,
     SEND_CONT_STOP,
-    SET_TX_GAIN
+    SET_TX_GAIN,
+    SET_LIGHT_CONTROL
 } Command;
-
 //
 //for TCP/IP data structure
 //
 
 //message data  48byte(size fix) 
 typedef struct{
-    uint16_t totalSize;   //2(total size) + 2(frame number) + 1(device) + 1(command) + 42(data:max 42) <--- max 48
+    uint16_t totalSize;   //2(total size) + 2(frame number) + 1(device) + 1(command) + 40(data:max 40) <--- max 46
     uint16_t frameNumber;
     Device   device;
     Command  command;
-    uint8_t  data[42]; //0 fill,size fix
+    uint8_t  data[40]; //0 fill,size fix
+    uint16_t sum;
 } Message;
 
 //payload id  16byte 
 typedef struct{
-    uint16_t head;              //reserve 0x0000
-    uint8_t  personalId[14]; 
+//    uint16_t head;              //reserve 0x0000
+    uint8_t  personalId[16]; 
 } ID;
 
 typedef struct{
@@ -59,13 +60,57 @@
 } Payload;
 
 
+
+
+/* ---------------------------------------------------
+    message data structure
+---------------------------------------------------*/
+
+/*  light&#65533;@illuminate level  */
+typedef struct{
+    uint8_t gain;           //1~10
+    uint8_t middleLevel;    //1~10
+} TxGainData;
+
+typedef struct{
+    uint16_t currentFrameNumber;
+    TxGainData gainData;
+    uint8_t lightsw;        //0:light off 1:light on
+    uint8_t continueusMode; //0:single 1:continueus
+    uint8_t isSend;
+    uint8_t dummy;
+    uint32_t xbeeAdress;   
+} PrefSender;
+
+typedef struct{
+    uint32_t xbeeAdress;
+} PrefReciever;
+
+typedef struct{
+    uint32_t xbeeAdress;
+    
+    uint8_t serverAddress[4];
+    uint8_t subnetMask[4];
+    uint8_t routerAddress[4];
+    uint16_t serverPort;
+    
+    uint8_t destinationAddress[4];
+    uint16_t destinationPort;   
+} PrefServer;
+
+
+
 void initPayload(Payload *_payload);
 
 void payloadToNetwork(Payload *_payload);
 void networkToPayload(Payload *_payload);
 
 void initTestPayloadData(Payload *_payload);
+uint16_t culcSum(Payload *_payload);
 
 void dumpPayload(Payload *_payload);
+void dumpPrefSender(PrefSender *prf);
+void dumpPrefReciever(PrefReciever *prf);
+void dumpPrefServer(PrefServer *prf);
 
 #endif
\ No newline at end of file
--- a/main.cpp	Thu Mar 22 15:15:10 2012 +0000
+++ b/main.cpp	Tue Apr 17 03:38:00 2012 +0000
@@ -2,13 +2,13 @@
 #include "data_models.h"
 
 
-Serial serial(USBTX, USBRX);
+Serial pc(USBTX, USBRX);
 DigitalIn din(p20);
 
 void serialInit(void){
 
-    serial.baud(115200);
-    serial.format(8, Serial::None, 1);
+    pc.baud(115200);
+    pc.format(8, Serial::None, 1);
      
 }
 
@@ -16,10 +16,10 @@
 
     uint8_t *d=(uint8_t *)&data->ftype;
     
-    for(uint8_t i=0 ; i<65 ; i++){
+    for(uint8_t i=0 ; i<67 ; i++){
     
-       if(d[i]==0x0A)   serial.putc(0x0D); //add CR LF
-        serial.putc(d[i]);
+       if(d[i]==0x0A)   pc.putc(0x0D); //add CR LF
+        pc.putc(d[i]);
         
     }
 }
@@ -36,9 +36,9 @@
     payloadToNetwork(&payload);
     
     while(1) {
-        if(!din){
+ //       if(!din){
             sendPayload(&payload);
             wait(0.2);
-         } 
+//         } 
     }
 }