Websocket example

Dependencies:   WebSocketClient

Fork of Websocket_Ethernet_HelloWorld by mbed_example

Committer:
Dontydonty
Date:
Sun Dec 03 18:19:22 2017 +0000
Revision:
8:1b4bf6e5e029
Web sock et

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dontydonty 8:1b4bf6e5e029 1 #include "ATcommand.h"
Dontydonty 8:1b4bf6e5e029 2 int timeout = 5000;
Dontydonty 8:1b4bf6e5e029 3 char off[9] = {0x7E,0x00,0x05,0x09,0x01,0x44,0x30,0x04,0x7D};
Dontydonty 8:1b4bf6e5e029 4 char on[9] = {0x7E,0x00,0x05,0x09,0x01,0x44,0x30,0x05,0x7C};
Dontydonty 8:1b4bf6e5e029 5
Dontydonty 8:1b4bf6e5e029 6 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 7 //------------- Application ------------------
Dontydonty 8:1b4bf6e5e029 8 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 9 void print(Serial *pc, char buff[]);
Dontydonty 8:1b4bf6e5e029 10 void toggleError(Serial *xbee, Serial *pc, int delay, char * msg){
Dontydonty 8:1b4bf6e5e029 11 pc->printf("\n\r !!!!!!!!!!! %s !!!!!!!!!!!",msg);
Dontydonty 8:1b4bf6e5e029 12 flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 13 send(xbee,pc, on, 9); flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 14 ATWR(xbee, pc); flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 15 apply(xbee, pc); flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 16
Dontydonty 8:1b4bf6e5e029 17 wait_ms(delay);
Dontydonty 8:1b4bf6e5e029 18
Dontydonty 8:1b4bf6e5e029 19 send(xbee,pc, off, 9); flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 20 ATWR(xbee, pc); flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 21 apply(xbee, pc); flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 22 }
Dontydonty 8:1b4bf6e5e029 23
Dontydonty 8:1b4bf6e5e029 24 void waitForConnection(Serial *xbee, Serial *pc, char * macAddr){
Dontydonty 8:1b4bf6e5e029 25 while(ND(xbee, pc, macAddr)==-1){}
Dontydonty 8:1b4bf6e5e029 26 pc->printf("MAC FOUND");
Dontydonty 8:1b4bf6e5e029 27 flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 28 }
Dontydonty 8:1b4bf6e5e029 29
Dontydonty 8:1b4bf6e5e029 30 void sendAccData(Serial *xbee, Serial *pc, char * macAddr ,char D[4]){
Dontydonty 8:1b4bf6e5e029 31 pc->printf("\n\rTransmit Data Request");
Dontydonty 8:1b4bf6e5e029 32 sendTR(xbee, pc, macAddr, D, 4);
Dontydonty 8:1b4bf6e5e029 33 }
Dontydonty 8:1b4bf6e5e029 34
Dontydonty 8:1b4bf6e5e029 35 int decodePacket(Serial *xbee, Serial *pc, char *packet, int len){
Dontydonty 8:1b4bf6e5e029 36 int ret = 0;
Dontydonty 8:1b4bf6e5e029 37 switch(packet[0]){
Dontydonty 8:1b4bf6e5e029 38 case 0x92: char * params= NULL;
Dontydonty 8:1b4bf6e5e029 39 params = readParam(xbee, pc);
Dontydonty 8:1b4bf6e5e029 40 free(params);
Dontydonty 8:1b4bf6e5e029 41 ret = -1;
Dontydonty 8:1b4bf6e5e029 42 break;
Dontydonty 8:1b4bf6e5e029 43 case 0x8B: bool status = (packet[6]== 0x00);
Dontydonty 8:1b4bf6e5e029 44 if(status){
Dontydonty 8:1b4bf6e5e029 45 pc->printf("\n\rData send succes");
Dontydonty 8:1b4bf6e5e029 46 ret= 0;
Dontydonty 8:1b4bf6e5e029 47 }else{
Dontydonty 8:1b4bf6e5e029 48 pc->printf("\n\rData send failed. Status: 0x%X",packet[6]);
Dontydonty 8:1b4bf6e5e029 49 ret= -1;
Dontydonty 8:1b4bf6e5e029 50 }
Dontydonty 8:1b4bf6e5e029 51
Dontydonty 8:1b4bf6e5e029 52 break;
Dontydonty 8:1b4bf6e5e029 53 default: pc->printf("\n\rTO DO: decoder for frame type 0x%x",packet[0]); break;
Dontydonty 8:1b4bf6e5e029 54 }
Dontydonty 8:1b4bf6e5e029 55 return ret;
Dontydonty 8:1b4bf6e5e029 56 }
Dontydonty 8:1b4bf6e5e029 57
Dontydonty 8:1b4bf6e5e029 58 int receiveAcknowledge(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 59 char *packet = NULL;
Dontydonty 8:1b4bf6e5e029 60 int ret = 0;
Dontydonty 8:1b4bf6e5e029 61 if(0 == isStartDelimiter(xbee, pc)){
Dontydonty 8:1b4bf6e5e029 62 int l = getLenght(xbee, pc);
Dontydonty 8:1b4bf6e5e029 63 packet = readFrame(xbee, pc);
Dontydonty 8:1b4bf6e5e029 64 ret = decodePacket(xbee, pc, packet,l );
Dontydonty 8:1b4bf6e5e029 65 }else{
Dontydonty 8:1b4bf6e5e029 66 toggleError(xbee, pc, 200, "Error in FrameID");
Dontydonty 8:1b4bf6e5e029 67 ret = -1;
Dontydonty 8:1b4bf6e5e029 68 }
Dontydonty 8:1b4bf6e5e029 69 free(packet);
Dontydonty 8:1b4bf6e5e029 70 return ret;
Dontydonty 8:1b4bf6e5e029 71 }
Dontydonty 8:1b4bf6e5e029 72
Dontydonty 8:1b4bf6e5e029 73 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 74 //----------------- Network ------------------
Dontydonty 8:1b4bf6e5e029 75 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 76 char getStatusResponse(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 77 char *buf;
Dontydonty 8:1b4bf6e5e029 78 char status;
Dontydonty 8:1b4bf6e5e029 79 buf = read(xbee, pc,2, "AT Command");
Dontydonty 8:1b4bf6e5e029 80 free(buf);
Dontydonty 8:1b4bf6e5e029 81
Dontydonty 8:1b4bf6e5e029 82 char *frame = NULL;
Dontydonty 8:1b4bf6e5e029 83 frame = readFrame(xbee, pc);
Dontydonty 8:1b4bf6e5e029 84 status = frame[5];
Dontydonty 8:1b4bf6e5e029 85 free(frame);
Dontydonty 8:1b4bf6e5e029 86 return status;
Dontydonty 8:1b4bf6e5e029 87 }
Dontydonty 8:1b4bf6e5e029 88
Dontydonty 8:1b4bf6e5e029 89 int ND(Serial *xbee, Serial *pc, char * macAddr){
Dontydonty 8:1b4bf6e5e029 90 char AT_ND[2] = {0x4E,0x44};
Dontydonty 8:1b4bf6e5e029 91 sendAT(xbee, pc, AT_ND, NULL, 0);
Dontydonty 8:1b4bf6e5e029 92 free(AT_ND);
Dontydonty 8:1b4bf6e5e029 93
Dontydonty 8:1b4bf6e5e029 94 int time = timeout;
Dontydonty 8:1b4bf6e5e029 95 while(time >=0){
Dontydonty 8:1b4bf6e5e029 96 //wait_ms(10);
Dontydonty 8:1b4bf6e5e029 97 time -= 10;
Dontydonty 8:1b4bf6e5e029 98 if(xbee->readable()){
Dontydonty 8:1b4bf6e5e029 99 isStartDelimiter(xbee,pc);
Dontydonty 8:1b4bf6e5e029 100 int len = getLenght(xbee,pc);
Dontydonty 8:1b4bf6e5e029 101
Dontydonty 8:1b4bf6e5e029 102 char *c;
Dontydonty 8:1b4bf6e5e029 103 c = readFrame(xbee, pc);
Dontydonty 8:1b4bf6e5e029 104
Dontydonty 8:1b4bf6e5e029 105
Dontydonty 8:1b4bf6e5e029 106 if(len>14){
Dontydonty 8:1b4bf6e5e029 107 pc->printf("\n\r\tMAC adresse:");
Dontydonty 8:1b4bf6e5e029 108 for(int i=0; i<8;i++){
Dontydonty 8:1b4bf6e5e029 109 macAddr[i] = c[i+7];
Dontydonty 8:1b4bf6e5e029 110 pc->printf("0x%x ", c[i+7]);
Dontydonty 8:1b4bf6e5e029 111 }
Dontydonty 8:1b4bf6e5e029 112 }else{
Dontydonty 8:1b4bf6e5e029 113 toggleError(xbee, pc, 200, "\n\r !!! Mac adresse not return !!!");
Dontydonty 8:1b4bf6e5e029 114 return -1;
Dontydonty 8:1b4bf6e5e029 115 }
Dontydonty 8:1b4bf6e5e029 116 flush(xbee,pc);
Dontydonty 8:1b4bf6e5e029 117 free(c);
Dontydonty 8:1b4bf6e5e029 118 return 0;
Dontydonty 8:1b4bf6e5e029 119 }
Dontydonty 8:1b4bf6e5e029 120 }
Dontydonty 8:1b4bf6e5e029 121 pc->printf("WARNING : Connection Lost!");
Dontydonty 8:1b4bf6e5e029 122 return -1;
Dontydonty 8:1b4bf6e5e029 123 }
Dontydonty 8:1b4bf6e5e029 124
Dontydonty 8:1b4bf6e5e029 125
Dontydonty 8:1b4bf6e5e029 126 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 127 //------------------- MAC --------------------
Dontydonty 8:1b4bf6e5e029 128 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 129 int isStartDelimiter(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 130 pc->printf("\n\r\tRECEIVE:");
Dontydonty 8:1b4bf6e5e029 131 return (xbee->getc() == 0x7E) ? 0 : -1;
Dontydonty 8:1b4bf6e5e029 132 }
Dontydonty 8:1b4bf6e5e029 133 int getLenght(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 134 char *buf;
Dontydonty 8:1b4bf6e5e029 135 buf = read(xbee, pc, 2, "Lenght");
Dontydonty 8:1b4bf6e5e029 136 int result = buf[0] << 8 | buf[1];
Dontydonty 8:1b4bf6e5e029 137 free(buf);
Dontydonty 8:1b4bf6e5e029 138 return result;
Dontydonty 8:1b4bf6e5e029 139 }
Dontydonty 8:1b4bf6e5e029 140 char * readFrame(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 141 int l = 0;
Dontydonty 8:1b4bf6e5e029 142 char *packet = NULL;
Dontydonty 8:1b4bf6e5e029 143 while(xbee->readable()) {
Dontydonty 8:1b4bf6e5e029 144 packet = (char*)realloc(packet ,sizeof(char)*(l+1));
Dontydonty 8:1b4bf6e5e029 145 packet[l++] = xbee->getc();
Dontydonty 8:1b4bf6e5e029 146 }
Dontydonty 8:1b4bf6e5e029 147 //wait_ms(10); // CPU to fast
Dontydonty 8:1b4bf6e5e029 148 pc->printf("\n\r\tFrame:");
Dontydonty 8:1b4bf6e5e029 149 for(int i=0; i<l; i++){
Dontydonty 8:1b4bf6e5e029 150 pc->printf("0x%x ",packet[i]);
Dontydonty 8:1b4bf6e5e029 151 }
Dontydonty 8:1b4bf6e5e029 152 return packet;
Dontydonty 8:1b4bf6e5e029 153 }
Dontydonty 8:1b4bf6e5e029 154 char * readParam(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 155 int l = 0;
Dontydonty 8:1b4bf6e5e029 156 char *packet = NULL;
Dontydonty 8:1b4bf6e5e029 157 while(xbee->readable()) {
Dontydonty 8:1b4bf6e5e029 158 packet = (char*)realloc(&packet[0],sizeof(char)*(l+1));
Dontydonty 8:1b4bf6e5e029 159 packet[l++] = xbee->getc();
Dontydonty 8:1b4bf6e5e029 160 }
Dontydonty 8:1b4bf6e5e029 161 //wait_ms(50); // CPU to fast
Dontydonty 8:1b4bf6e5e029 162 pc->printf("\n\r\tParams:");
Dontydonty 8:1b4bf6e5e029 163 for(int i=0; i<l; i++){
Dontydonty 8:1b4bf6e5e029 164 pc->printf("0x%x ",packet[i]);
Dontydonty 8:1b4bf6e5e029 165 }
Dontydonty 8:1b4bf6e5e029 166 return packet;
Dontydonty 8:1b4bf6e5e029 167 }
Dontydonty 8:1b4bf6e5e029 168
Dontydonty 8:1b4bf6e5e029 169
Dontydonty 8:1b4bf6e5e029 170
Dontydonty 8:1b4bf6e5e029 171 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 172 //------------------- PHY --------------------
Dontydonty 8:1b4bf6e5e029 173 //--------------------------------------------
Dontydonty 8:1b4bf6e5e029 174 char read(Serial *xbee, Serial *pc, char* msg){
Dontydonty 8:1b4bf6e5e029 175 char c;
Dontydonty 8:1b4bf6e5e029 176 pc->printf("\n\r\t %s:",msg);
Dontydonty 8:1b4bf6e5e029 177 c = xbee->getc();
Dontydonty 8:1b4bf6e5e029 178 pc->printf(" 0x%X", c);
Dontydonty 8:1b4bf6e5e029 179 if(strstr(msg, "Status")!= NULL){
Dontydonty 8:1b4bf6e5e029 180 if((int)c != 0){
Dontydonty 8:1b4bf6e5e029 181 toggleError(xbee, pc, 200, "Bad Status");
Dontydonty 8:1b4bf6e5e029 182 }
Dontydonty 8:1b4bf6e5e029 183 }
Dontydonty 8:1b4bf6e5e029 184 //wait_ms(10);// CPU to fast
Dontydonty 8:1b4bf6e5e029 185 return c;
Dontydonty 8:1b4bf6e5e029 186 }
Dontydonty 8:1b4bf6e5e029 187 void send(Serial* xbee, Serial* pc, char * b, int size){
Dontydonty 8:1b4bf6e5e029 188 pc->printf("\n\r\tSEND:");
Dontydonty 8:1b4bf6e5e029 189 for(int i=0 ;i<size; i=i++){
Dontydonty 8:1b4bf6e5e029 190 xbee->putc(b[i]);
Dontydonty 8:1b4bf6e5e029 191 pc->printf(" 0x%X", b[i]);
Dontydonty 8:1b4bf6e5e029 192 }
Dontydonty 8:1b4bf6e5e029 193 }
Dontydonty 8:1b4bf6e5e029 194 void sendAT(Serial *xbee, Serial *pc, char* command, char* params, int lenparams){
Dontydonty 8:1b4bf6e5e029 195 uint8_t len = 4 + lenparams;
Dontydonty 8:1b4bf6e5e029 196 //printf("Lenght is: %d\n", len);
Dontydonty 8:1b4bf6e5e029 197
Dontydonty 8:1b4bf6e5e029 198 char c[4+len];
Dontydonty 8:1b4bf6e5e029 199 c[0]= 0x7E;
Dontydonty 8:1b4bf6e5e029 200 c[1]= len >> 8 ;
Dontydonty 8:1b4bf6e5e029 201 c[2]= len;
Dontydonty 8:1b4bf6e5e029 202
Dontydonty 8:1b4bf6e5e029 203 c[3]= 0x09;
Dontydonty 8:1b4bf6e5e029 204 c[4]= 0x01;
Dontydonty 8:1b4bf6e5e029 205 c[5] = command[0];
Dontydonty 8:1b4bf6e5e029 206 c[6] = command[1];
Dontydonty 8:1b4bf6e5e029 207 int i =0;
Dontydonty 8:1b4bf6e5e029 208 for(; i<lenparams; i++){
Dontydonty 8:1b4bf6e5e029 209 c[i+7] = params[i];
Dontydonty 8:1b4bf6e5e029 210 }
Dontydonty 8:1b4bf6e5e029 211 char check;
Dontydonty 8:1b4bf6e5e029 212 check = checksum(c,lenparams+4 );
Dontydonty 8:1b4bf6e5e029 213 c[i+7] = check;
Dontydonty 8:1b4bf6e5e029 214
Dontydonty 8:1b4bf6e5e029 215 send(xbee,pc, c,len+4);
Dontydonty 8:1b4bf6e5e029 216 free(c);
Dontydonty 8:1b4bf6e5e029 217 }
Dontydonty 8:1b4bf6e5e029 218
Dontydonty 8:1b4bf6e5e029 219 void sendTR(Serial *xbee, Serial *pc, char macAddr[8], char RFdata[], int lenparams ){
Dontydonty 8:1b4bf6e5e029 220 uint8_t len = 14 + lenparams;
Dontydonty 8:1b4bf6e5e029 221
Dontydonty 8:1b4bf6e5e029 222 char c[4+len];
Dontydonty 8:1b4bf6e5e029 223 c[0]= 0x7E;
Dontydonty 8:1b4bf6e5e029 224 c[1]= len >> 8 ;
Dontydonty 8:1b4bf6e5e029 225 c[2]= len;
Dontydonty 8:1b4bf6e5e029 226
Dontydonty 8:1b4bf6e5e029 227 c[3]= 0x10;
Dontydonty 8:1b4bf6e5e029 228 c[4]= 0x01;
Dontydonty 8:1b4bf6e5e029 229 c[5] = macAddr[0];
Dontydonty 8:1b4bf6e5e029 230 c[6] = macAddr[1];
Dontydonty 8:1b4bf6e5e029 231 c[7] = macAddr[2];
Dontydonty 8:1b4bf6e5e029 232 c[8] = macAddr[3];
Dontydonty 8:1b4bf6e5e029 233 c[9] = macAddr[4];
Dontydonty 8:1b4bf6e5e029 234 c[10] = macAddr[5];
Dontydonty 8:1b4bf6e5e029 235 c[11] = macAddr[6];
Dontydonty 8:1b4bf6e5e029 236 c[12] = macAddr[7];
Dontydonty 8:1b4bf6e5e029 237 c[13] = 0xFF;
Dontydonty 8:1b4bf6e5e029 238 c[14] = 0xFE;
Dontydonty 8:1b4bf6e5e029 239 c[15] = 0x00;
Dontydonty 8:1b4bf6e5e029 240 c[16] = 0x00;
Dontydonty 8:1b4bf6e5e029 241 int i =0;
Dontydonty 8:1b4bf6e5e029 242 for(; i<lenparams; i++){
Dontydonty 8:1b4bf6e5e029 243 c[i+17] = RFdata[i];
Dontydonty 8:1b4bf6e5e029 244 }
Dontydonty 8:1b4bf6e5e029 245 char check;
Dontydonty 8:1b4bf6e5e029 246 check = checksum(c,len);
Dontydonty 8:1b4bf6e5e029 247 c[i+17] = check;
Dontydonty 8:1b4bf6e5e029 248
Dontydonty 8:1b4bf6e5e029 249 send(xbee,pc, c,4+len);
Dontydonty 8:1b4bf6e5e029 250 free(c);
Dontydonty 8:1b4bf6e5e029 251 }
Dontydonty 8:1b4bf6e5e029 252
Dontydonty 8:1b4bf6e5e029 253 char checksum(char* array, int size){
Dontydonty 8:1b4bf6e5e029 254 char checksum = 0x00;
Dontydonty 8:1b4bf6e5e029 255 for(int x = 3; x < size+3; x++){
Dontydonty 8:1b4bf6e5e029 256 checksum += array[x];
Dontydonty 8:1b4bf6e5e029 257 //printf("\n\r 0x%X --> 0x%x",array[x],checksum);
Dontydonty 8:1b4bf6e5e029 258 }
Dontydonty 8:1b4bf6e5e029 259 //printf("\n\r substract 0xFF");
Dontydonty 8:1b4bf6e5e029 260 checksum = 0xFF - checksum;
Dontydonty 8:1b4bf6e5e029 261 //printf("\n\rChecksum is: 0x%x\n", checksum);
Dontydonty 8:1b4bf6e5e029 262 return checksum;
Dontydonty 8:1b4bf6e5e029 263 }
Dontydonty 8:1b4bf6e5e029 264
Dontydonty 8:1b4bf6e5e029 265 void ATWR(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 266 char c[8] = {0x7E,0x00,0x04,0x09,0x01,0x57,0x52,0x4C};
Dontydonty 8:1b4bf6e5e029 267 send(xbee,pc, c,8);
Dontydonty 8:1b4bf6e5e029 268 //free(c);
Dontydonty 8:1b4bf6e5e029 269 }
Dontydonty 8:1b4bf6e5e029 270 void apply(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 271 char c[8] = {0x7E,0x00,0x04,0x09,0x01,0x41,0x43,0x71};
Dontydonty 8:1b4bf6e5e029 272 send(xbee,pc, c,8);
Dontydonty 8:1b4bf6e5e029 273 //free(c);
Dontydonty 8:1b4bf6e5e029 274 }
Dontydonty 8:1b4bf6e5e029 275 void flush(Serial *xbee, Serial *pc){
Dontydonty 8:1b4bf6e5e029 276 while(xbee->readable()) {
Dontydonty 8:1b4bf6e5e029 277 char c = xbee->getc();
Dontydonty 8:1b4bf6e5e029 278 //pc->printf("%X ",c);
Dontydonty 8:1b4bf6e5e029 279 }
Dontydonty 8:1b4bf6e5e029 280 }
Dontydonty 8:1b4bf6e5e029 281
Dontydonty 8:1b4bf6e5e029 282
Dontydonty 8:1b4bf6e5e029 283 char * read(Serial *xbee, Serial *pc, int nbyte, char* msg){
Dontydonty 8:1b4bf6e5e029 284 pc->printf("\n\r\t%s:",msg);
Dontydonty 8:1b4bf6e5e029 285 char *buff = NULL;
Dontydonty 8:1b4bf6e5e029 286 if(xbee->readable()) {
Dontydonty 8:1b4bf6e5e029 287 for(int i=0; i<nbyte; i++){
Dontydonty 8:1b4bf6e5e029 288 buff = (char*)realloc(buff ,sizeof(char)*(i+1));
Dontydonty 8:1b4bf6e5e029 289 buff[i] = xbee->getc();
Dontydonty 8:1b4bf6e5e029 290 }
Dontydonty 8:1b4bf6e5e029 291 }
Dontydonty 8:1b4bf6e5e029 292
Dontydonty 8:1b4bf6e5e029 293 //wait_ms(10); // CPU to fast
Dontydonty 8:1b4bf6e5e029 294 for(int i=0; i<nbyte; i++){
Dontydonty 8:1b4bf6e5e029 295 pc->printf("0x%X ", buff[i]);
Dontydonty 8:1b4bf6e5e029 296 }
Dontydonty 8:1b4bf6e5e029 297 return buff;
Dontydonty 8:1b4bf6e5e029 298 }