Donavan Martin
/
Web_suck_et
Websocket example
Fork of Websocket_Ethernet_HelloWorld by
ATcommand.cpp@8:1b4bf6e5e029, 2017-12-03 (annotated)
- Committer:
- Dontydonty
- Date:
- Sun Dec 03 18:19:22 2017 +0000
- Revision:
- 8:1b4bf6e5e029
Web sock et
Who changed what in which revision?
User | Revision | Line number | New 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 | } |