UDPversion

Dependencies:   XBee mbed NetServicesMin

Committer:
recotana
Date:
Sun Apr 15 10:49:08 2012 +0000
Revision:
1:3a46d2725374
Parent:
0:84a3b029656e

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
recotana 0:84a3b029656e 1 #include "types.h"
recotana 0:84a3b029656e 2 #include "data_models.h"
recotana 0:84a3b029656e 3 #include "EthernetNetIf.h"
recotana 0:84a3b029656e 4
recotana 0:84a3b029656e 5 extern Serial pc;
recotana 1:3a46d2725374 6
recotana 1:3a46d2725374 7
recotana 0:84a3b029656e 8 void initPayload(Payload *_payload)
recotana 0:84a3b029656e 9 {
recotana 0:84a3b029656e 10 _payload->size=sizeof(Payload);
recotana 0:84a3b029656e 11 _payload->dummy = 0;
recotana 0:84a3b029656e 12 _payload->ftype = Ftype_Type_B;
recotana 0:84a3b029656e 13
recotana 0:84a3b029656e 14 Frame *frame=&_payload->frame;
recotana 0:84a3b029656e 15
recotana 0:84a3b029656e 16 for(int i=0 ; i < sizeof(frame->id.personalId) ; i++) frame->id.personalId[i]=0;
recotana 0:84a3b029656e 17
recotana 0:84a3b029656e 18 frame->message.frameNumber=0xFFFF;
recotana 0:84a3b029656e 19 frame->message.device=SERVER;
recotana 0:84a3b029656e 20 frame->message.command=PING;
recotana 0:84a3b029656e 21
recotana 0:84a3b029656e 22 for(int i=0 ; i < sizeof(_payload->frame.message.data) ; i++) _payload->frame.message.data[i]=0;
recotana 0:84a3b029656e 23 }
recotana 0:84a3b029656e 24
recotana 0:84a3b029656e 25 void payloadToNetwork(Payload *_payload)
recotana 0:84a3b029656e 26 {
recotana 0:84a3b029656e 27 Frame *frame=&_payload->frame;
recotana 0:84a3b029656e 28 _payload->size = htons(_payload->size);
recotana 0:84a3b029656e 29 // frame->id.head = htons(frame->id.head);
recotana 0:84a3b029656e 30 frame->message.totalSize = htons(frame->message.totalSize);
recotana 0:84a3b029656e 31 frame->message.frameNumber = htons(frame->message.frameNumber);
recotana 0:84a3b029656e 32 frame->message.sum = htons(frame->message.sum);
recotana 0:84a3b029656e 33
recotana 0:84a3b029656e 34 if(frame->message.command == PING) {
recotana 0:84a3b029656e 35
recotana 0:84a3b029656e 36 if(frame->message.device == SERVER)
recotana 0:84a3b029656e 37 {
recotana 0:84a3b029656e 38
recotana 0:84a3b029656e 39 PrefServer *data;
recotana 0:84a3b029656e 40 data = (PrefServer*)frame->message.data;
recotana 0:84a3b029656e 41 data->serverPort = htons(data->serverPort);
recotana 0:84a3b029656e 42 data->destinationPort = htons(data->destinationPort);
recotana 0:84a3b029656e 43 data->xbeeAdress = htonl(data->xbeeAdress);
recotana 0:84a3b029656e 44
recotana 0:84a3b029656e 45 }
recotana 0:84a3b029656e 46 else if(frame->message.device == LED_SENDER)
recotana 0:84a3b029656e 47 {
recotana 0:84a3b029656e 48 PrefSender *data;
recotana 0:84a3b029656e 49 data = (PrefSender*)frame->message.data;
recotana 0:84a3b029656e 50 data->xbeeAdress = htonl(data->xbeeAdress);
recotana 0:84a3b029656e 51 data->currentFrameNumber = htons(data->currentFrameNumber);
recotana 0:84a3b029656e 52 }
recotana 0:84a3b029656e 53 else if(frame->message.device == LED_RECIEVER)
recotana 0:84a3b029656e 54 {
recotana 0:84a3b029656e 55 PrefReciever *data;
recotana 0:84a3b029656e 56 data = (PrefReciever*)frame->message.data;
recotana 0:84a3b029656e 57 data->xbeeAdress = htonl(data->xbeeAdress);
recotana 0:84a3b029656e 58 }
recotana 0:84a3b029656e 59 }
recotana 0:84a3b029656e 60
recotana 0:84a3b029656e 61 }
recotana 0:84a3b029656e 62 void networkToPayload(Payload *_payload)
recotana 0:84a3b029656e 63 {
recotana 0:84a3b029656e 64 Frame *frame=&_payload->frame;
recotana 0:84a3b029656e 65 _payload->size = ntohs(_payload->size);
recotana 0:84a3b029656e 66 // frame->id.head = ntohs(frame->id.head);
recotana 0:84a3b029656e 67 frame->message.totalSize = ntohs(frame->message.totalSize);
recotana 0:84a3b029656e 68 frame->message.frameNumber = ntohs(frame->message.frameNumber);
recotana 0:84a3b029656e 69 frame->message.sum = ntohs(frame->message.sum);
recotana 0:84a3b029656e 70
recotana 0:84a3b029656e 71 if(frame->message.command == PING){
recotana 0:84a3b029656e 72
recotana 0:84a3b029656e 73 if(frame->message.device == SERVER)
recotana 0:84a3b029656e 74 {
recotana 0:84a3b029656e 75 PrefServer *data;
recotana 0:84a3b029656e 76 data = (PrefServer*)frame->message.data;
recotana 0:84a3b029656e 77 data->serverPort = ntohs(data->serverPort);
recotana 0:84a3b029656e 78 data->destinationPort = ntohs(data->destinationPort);
recotana 0:84a3b029656e 79 data->xbeeAdress = ntohl(data->xbeeAdress);
recotana 0:84a3b029656e 80 }
recotana 0:84a3b029656e 81 else if(frame->message.device == LED_SENDER)
recotana 0:84a3b029656e 82 {
recotana 0:84a3b029656e 83 PrefSender *data;
recotana 0:84a3b029656e 84 data = (PrefSender*)frame->message.data;
recotana 0:84a3b029656e 85 data->xbeeAdress = ntohl(data->xbeeAdress);
recotana 0:84a3b029656e 86 data->currentFrameNumber = ntohs(data->currentFrameNumber);
recotana 0:84a3b029656e 87 }
recotana 0:84a3b029656e 88 else if(frame->message.device == LED_RECIEVER)
recotana 0:84a3b029656e 89 {
recotana 0:84a3b029656e 90 PrefReciever *data;
recotana 0:84a3b029656e 91 data = (PrefReciever*)frame->message.data;
recotana 0:84a3b029656e 92 data->xbeeAdress = ntohl(data->xbeeAdress);
recotana 0:84a3b029656e 93 }
recotana 0:84a3b029656e 94 }
recotana 0:84a3b029656e 95 }
recotana 0:84a3b029656e 96
recotana 0:84a3b029656e 97
recotana 0:84a3b029656e 98
recotana 0:84a3b029656e 99 void initTestPayloadData(Payload *_payload)
recotana 0:84a3b029656e 100 {
recotana 0:84a3b029656e 101 Frame *frame=&_payload->frame;
recotana 0:84a3b029656e 102
recotana 0:84a3b029656e 103 initPayload(_payload);
recotana 0:84a3b029656e 104 _payload->size=sizeof(Payload);
recotana 0:84a3b029656e 105
recotana 0:84a3b029656e 106 // frame->id.head=0x0000;
recotana 0:84a3b029656e 107 // uint8_t tmpid[14]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44};
recotana 0:84a3b029656e 108 uint8_t tmpid[16]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46};
recotana 0:84a3b029656e 109 for(int i=0;i<sizeof(tmpid);i++) frame->id.personalId[i]=tmpid[i];
recotana 0:84a3b029656e 110
recotana 0:84a3b029656e 111
recotana 0:84a3b029656e 112 frame->message.frameNumber=1;
recotana 0:84a3b029656e 113 frame->message.device=LED_RECIEVER;
recotana 0:84a3b029656e 114 frame->message.command=RECIEVE;
recotana 0:84a3b029656e 115
recotana 0:84a3b029656e 116 uint8_t tmpdata[40]={
recotana 0:84a3b029656e 117 1,2,3,4,5,6,7,8,9,10,
recotana 0:84a3b029656e 118 11,12,13,14,15,16,17,18,19,20,
recotana 0:84a3b029656e 119 21,22,23,24,25,26,27,28,29,30,
recotana 0:84a3b029656e 120 31,32,33,34,35,36,37,38,39,40};
recotana 0:84a3b029656e 121 for(int i=0;i<sizeof(tmpdata);i++) frame->message.data[i]=tmpdata[i];
recotana 0:84a3b029656e 122
recotana 0:84a3b029656e 123 frame->message.totalSize=
recotana 0:84a3b029656e 124 sizeof(frame->message.totalSize)
recotana 0:84a3b029656e 125 +sizeof(frame->message.frameNumber)
recotana 0:84a3b029656e 126 +sizeof(frame->message.device)
recotana 0:84a3b029656e 127 +sizeof(frame->message.command)
recotana 0:84a3b029656e 128 +sizeof(frame->message.data);
recotana 0:84a3b029656e 129
recotana 0:84a3b029656e 130 uint16_t sum = culcSum(_payload);
recotana 0:84a3b029656e 131
recotana 0:84a3b029656e 132 frame->message.sum = sum;
recotana 0:84a3b029656e 133
recotana 0:84a3b029656e 134 }
recotana 0:84a3b029656e 135
recotana 0:84a3b029656e 136 uint16_t culcSum(Payload *_payload){
recotana 0:84a3b029656e 137
recotana 0:84a3b029656e 138 uint16_t tmpSum = _payload->ftype;
recotana 0:84a3b029656e 139 uint8_t *data = (uint8_t *)&_payload->frame;
recotana 0:84a3b029656e 140
recotana 0:84a3b029656e 141 for(uint8_t i=0 ; i<sizeof(Frame)-2 ; i++){
recotana 0:84a3b029656e 142 tmpSum += data[i];
recotana 0:84a3b029656e 143 }
recotana 0:84a3b029656e 144 return tmpSum;
recotana 0:84a3b029656e 145 }
recotana 0:84a3b029656e 146
recotana 0:84a3b029656e 147 void dumpPayload(Payload *_payload)
recotana 0:84a3b029656e 148 {
recotana 0:84a3b029656e 149 Frame *frame=&_payload->frame;
recotana 0:84a3b029656e 150 pc.printf("\r\n======== dump!!\r\n");
recotana 0:84a3b029656e 151 pc.printf("payload\nsize:%04X\r\n ",_payload->size);
recotana 0:84a3b029656e 152 pc.printf("Type:%0X\r\n ",_payload->ftype);
recotana 0:84a3b029656e 153
recotana 0:84a3b029656e 154 // pc.printf("Payload id_head:%04X\r\n personal id:",_payload->frame.id.head);
recotana 0:84a3b029656e 155 pc.printf("personal id:");
recotana 0:84a3b029656e 156 for(int i=0 ; i < sizeof(frame->id.personalId) ; i++){
recotana 0:84a3b029656e 157 pc.printf("%02X:%c ",frame->id.personalId[i],frame->id.personalId[i]);
recotana 0:84a3b029656e 158 }
recotana 0:84a3b029656e 159
recotana 0:84a3b029656e 160 pc.printf("\r\n");
recotana 0:84a3b029656e 161
recotana 0:84a3b029656e 162 pc.printf("total size:%d , frame number:%d , divece:%0X , command:%02X , sum:%04X\r\n"
recotana 0:84a3b029656e 163 ,frame->message.totalSize
recotana 0:84a3b029656e 164 ,frame->message.frameNumber
recotana 0:84a3b029656e 165 ,frame->message.device
recotana 0:84a3b029656e 166 ,frame->message.command
recotana 0:84a3b029656e 167 ,frame->message.sum);
recotana 0:84a3b029656e 168
recotana 0:84a3b029656e 169 pc.printf("message data:\r\n");
recotana 0:84a3b029656e 170 for(int i=0 ; i < sizeof(frame->message.data) ; i++){
recotana 0:84a3b029656e 171 pc.printf("%d:%02X ",i,_payload->frame.message.data[i]);
recotana 0:84a3b029656e 172 }
recotana 0:84a3b029656e 173
recotana 0:84a3b029656e 174 pc.printf("\r\n--- RAW DATA -------\r\n");
recotana 0:84a3b029656e 175 for(int i=0 ; i < sizeof(Payload) ; i++){
recotana 0:84a3b029656e 176 pc.printf("%d:%02X ",i,((uint8_t*)_payload)[i]);
recotana 0:84a3b029656e 177 }
recotana 0:84a3b029656e 178 pc.printf("\r\n");
recotana 0:84a3b029656e 179
recotana 1:3a46d2725374 180 }
recotana 1:3a46d2725374 181
recotana 1:3a46d2725374 182 void dumpPrefSender(PrefSender *prf)
recotana 1:3a46d2725374 183 {
recotana 1:3a46d2725374 184 pc.printf("current frame number:%d\n",prf->currentFrameNumber);
recotana 1:3a46d2725374 185 pc.printf("gainData gain:%d\n",prf->gainData.gain);
recotana 1:3a46d2725374 186 pc.printf("gainData middleLevel:%d\n",prf->gainData.middleLevel);
recotana 1:3a46d2725374 187 pc.printf("lightsw:%d\n",prf->lightsw);
recotana 1:3a46d2725374 188 pc.printf("continueusMode:%d\n",prf->continueusMode);
recotana 1:3a46d2725374 189 pc.printf("isSend:%d\n",prf->isSend);
recotana 1:3a46d2725374 190 pc.printf("xbeeAdress:%X\n",prf->xbeeAdress);
recotana 1:3a46d2725374 191
recotana 1:3a46d2725374 192 }
recotana 1:3a46d2725374 193 void dumpPrefReciever(PrefReciever *prf)
recotana 1:3a46d2725374 194 {
recotana 1:3a46d2725374 195
recotana 1:3a46d2725374 196 pc.printf("xbeeAdress:%X\n",prf->xbeeAdress);
recotana 1:3a46d2725374 197
recotana 1:3a46d2725374 198 }
recotana 1:3a46d2725374 199 void dumpPrefServer(PrefServer *prf)
recotana 1:3a46d2725374 200 {
recotana 1:3a46d2725374 201 pc.printf("xbeeAdress:%X\n",prf->xbeeAdress);
recotana 1:3a46d2725374 202 pc.printf("server ip:%d.%d.%d.%d\n",prf->serverAddress[0],prf->serverAddress[1],prf->serverAddress[2],prf->serverAddress[3]);
recotana 1:3a46d2725374 203 pc.printf("subnet ip:%d.%d.%d.%d\n",prf->subnetMask[0],prf->subnetMask[1],prf->subnetMask[2],prf->subnetMask[3]);
recotana 1:3a46d2725374 204 pc.printf("router ip:%d.%d.%d.%d\n",prf->routerAddress[0],prf->routerAddress[1],prf->routerAddress[2],prf->routerAddress[3]);
recotana 1:3a46d2725374 205
recotana 1:3a46d2725374 206 pc.printf("Server Port:%d\n",prf->serverPort);
recotana 1:3a46d2725374 207
recotana 1:3a46d2725374 208 pc.printf("Destination ip:%d.%d.%d.%d\n",prf->destinationAddress[0],prf->destinationAddress[1],prf->destinationAddress[2],prf->destinationAddress[3]);
recotana 1:3a46d2725374 209 pc.printf("Destination Port:%d\n",prf->destinationPort);
recotana 1:3a46d2725374 210
recotana 0:84a3b029656e 211 }