Code APP3

Dependencies:   mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial

Fork of APP3_Lab by Jean-Philippe Fournier

Committer:
Cheroukee
Date:
Sun Oct 01 01:34:37 2017 +0000
Revision:
12:1286b80c68f7
Parent:
11:ecf5776b950a
Child:
14:cd488eba8bba
Added DIO4 blink on broadcast

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Cheroukee 1:ea1b52d0a8a3 1
Cheroukee 1:ea1b52d0a8a3 2 /***
Cheroukee 1:ea1b52d0a8a3 3 * xbee.cpp - en-tete de lib xbee - fouj1807 - mcgj2701
Cheroukee 1:ea1b52d0a8a3 4 */
Cheroukee 1:ea1b52d0a8a3 5
Cheroukee 1:ea1b52d0a8a3 6 #include "xbee.h"
Cheroukee 1:ea1b52d0a8a3 7
Cheroukee 2:a9bb12eefc08 8 DigitalOut xbee_transmit_led(LED1);
Cheroukee 2:a9bb12eefc08 9 DigitalOut xbee_receive_led(LED2);
Cheroukee 1:ea1b52d0a8a3 10 DigitalOut xbee_reset(p8);
Cheroukee 1:ea1b52d0a8a3 11
Cheroukee 1:ea1b52d0a8a3 12 Serial xbee(p13, p14); // tx, rx
Cheroukee 1:ea1b52d0a8a3 13
Cheroukee 1:ea1b52d0a8a3 14 char TransmitBuffer[2048] = {0};
Cheroukee 1:ea1b52d0a8a3 15 char ReceiveBuffer[2048] = {0};
Cheroukee 1:ea1b52d0a8a3 16
Cheroukee 1:ea1b52d0a8a3 17 void xbee_init()
Cheroukee 1:ea1b52d0a8a3 18 {
Cheroukee 2:a9bb12eefc08 19 xbee_receive_led = 0;
Cheroukee 1:ea1b52d0a8a3 20
Cheroukee 1:ea1b52d0a8a3 21 wait_ms(400);
Cheroukee 1:ea1b52d0a8a3 22
Cheroukee 1:ea1b52d0a8a3 23 xbee_reset = 1;
Cheroukee 1:ea1b52d0a8a3 24
Cheroukee 1:ea1b52d0a8a3 25 wait_ms(5000);
Cheroukee 1:ea1b52d0a8a3 26
Cheroukee 11:ecf5776b950a 27 //xbee_receive_led = 1;
Cheroukee 1:ea1b52d0a8a3 28 }
Cheroukee 1:ea1b52d0a8a3 29
Cheroukee 1:ea1b52d0a8a3 30
Cheroukee 1:ea1b52d0a8a3 31 bool set_pan_id(long pan_id)
Cheroukee 1:ea1b52d0a8a3 32 {
Cheroukee 1:ea1b52d0a8a3 33 return false;
Cheroukee 1:ea1b52d0a8a3 34 }
Cheroukee 1:ea1b52d0a8a3 35
Cheroukee 1:ea1b52d0a8a3 36 long get_pan_id()
Cheroukee 1:ea1b52d0a8a3 37 {
Cheroukee 1:ea1b52d0a8a3 38 return 0L;
Cheroukee 1:ea1b52d0a8a3 39 }
Cheroukee 1:ea1b52d0a8a3 40
Cheroukee 2:a9bb12eefc08 41
Cheroukee 2:a9bb12eefc08 42 void build_api_frame_header(int frame_data_size)
Cheroukee 2:a9bb12eefc08 43 {
Cheroukee 2:a9bb12eefc08 44 // Delimiter
Cheroukee 2:a9bb12eefc08 45 TransmitBuffer[FRAME_DELIMITER_POS] = ZIGBEE_DELIMITER;
Cheroukee 2:a9bb12eefc08 46 TransmitBuffer[FRAME_LEN_MSB_POS] = frame_data_size >> 8;
Cheroukee 2:a9bb12eefc08 47 TransmitBuffer[FRAME_LEN_LSB_POS] = frame_data_size & 0xFF;
Cheroukee 2:a9bb12eefc08 48 }
Cheroukee 2:a9bb12eefc08 49
Cheroukee 2:a9bb12eefc08 50 void build_api_frame_checksum(int frame_data_size)
Cheroukee 2:a9bb12eefc08 51 {
Cheroukee 1:ea1b52d0a8a3 52 // Calculate checksum
Cheroukee 2:a9bb12eefc08 53 char checksum = 0xFF;
Cheroukee 2:a9bb12eefc08 54 for (int i = 3; i < FRAME_CHEKSUM_POS; i++)
Cheroukee 1:ea1b52d0a8a3 55 {
Cheroukee 1:ea1b52d0a8a3 56 checksum -= TransmitBuffer[i];
Cheroukee 1:ea1b52d0a8a3 57 }
Cheroukee 1:ea1b52d0a8a3 58
Cheroukee 1:ea1b52d0a8a3 59 // Insert checksum into buffer
Cheroukee 2:a9bb12eefc08 60 TransmitBuffer[FRAME_CHEKSUM_POS] = checksum;
Cheroukee 2:a9bb12eefc08 61 }
Cheroukee 2:a9bb12eefc08 62
Cheroukee 2:a9bb12eefc08 63 void set_api_frame_type(frame_type_t frame_type)
Cheroukee 2:a9bb12eefc08 64 {
Cheroukee 2:a9bb12eefc08 65 TransmitBuffer[API_FRAME_TYPE_POS] = frame_type;
Cheroukee 2:a9bb12eefc08 66 }
Cheroukee 2:a9bb12eefc08 67
Cheroukee 2:a9bb12eefc08 68 void set_api_frame_id(int id)
Cheroukee 2:a9bb12eefc08 69 {
Cheroukee 2:a9bb12eefc08 70 TransmitBuffer[API_FRAME_ID_POS] = id;
Cheroukee 2:a9bb12eefc08 71 }
Cheroukee 2:a9bb12eefc08 72
Cheroukee 2:a9bb12eefc08 73 void set_at_command(int at_command)
Cheroukee 2:a9bb12eefc08 74 {
Cheroukee 2:a9bb12eefc08 75 // NOT IMPLEMENTED
Cheroukee 2:a9bb12eefc08 76 }
Cheroukee 2:a9bb12eefc08 77
Cheroukee 2:a9bb12eefc08 78 void set_64_addr(zigbee_addr_64_t address)
Cheroukee 2:a9bb12eefc08 79 {
Cheroukee 2:a9bb12eefc08 80 int i = 0;
Cheroukee 2:a9bb12eefc08 81 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_0;
Cheroukee 2:a9bb12eefc08 82 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_1;
Cheroukee 2:a9bb12eefc08 83 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_2;
Cheroukee 2:a9bb12eefc08 84 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_3;
Cheroukee 2:a9bb12eefc08 85
Cheroukee 2:a9bb12eefc08 86 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_4;
Cheroukee 2:a9bb12eefc08 87 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_5;
Cheroukee 2:a9bb12eefc08 88 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_6;
Cheroukee 2:a9bb12eefc08 89 TransmitBuffer[TRANSMIT_REQ_ADDR64_MSB_POS + i++] = address.addr_7;
Cheroukee 2:a9bb12eefc08 90 }
Cheroukee 2:a9bb12eefc08 91
Cheroukee 2:a9bb12eefc08 92 void set_16_addr(zigbee_addr_16_t address)
Cheroukee 2:a9bb12eefc08 93 {
Cheroukee 2:a9bb12eefc08 94 TransmitBuffer[TRANSMIT_REQ_ADDR16_MSB_POS] = address.addr_msb;
Cheroukee 2:a9bb12eefc08 95 TransmitBuffer[TRANSMIT_REQ_ADDR16_MSB_POS + 1] = address.addr_lsb;
Cheroukee 2:a9bb12eefc08 96 }
Cheroukee 2:a9bb12eefc08 97
Cheroukee 2:a9bb12eefc08 98 void set_broadcast_radius(int position, char radius)
Cheroukee 2:a9bb12eefc08 99 {
Cheroukee 2:a9bb12eefc08 100 TransmitBuffer[position] = radius;
Cheroukee 2:a9bb12eefc08 101 }
Cheroukee 2:a9bb12eefc08 102
Cheroukee 2:a9bb12eefc08 103 void set_transmit_request_options(int position, char options)
Cheroukee 2:a9bb12eefc08 104 {
Cheroukee 2:a9bb12eefc08 105 TransmitBuffer[position] = options;
Cheroukee 2:a9bb12eefc08 106 }
Cheroukee 2:a9bb12eefc08 107
Cheroukee 12:1286b80c68f7 108 void set_transmit_data(int start_pos, char* data, int data_length)
Cheroukee 2:a9bb12eefc08 109 {
Cheroukee 2:a9bb12eefc08 110 for (int i = 0; i < data_length; i++)
Cheroukee 1:ea1b52d0a8a3 111 {
Cheroukee 12:1286b80c68f7 112 TransmitBuffer[start_pos + i] = data[i];
Cheroukee 1:ea1b52d0a8a3 113 }
Cheroukee 2:a9bb12eefc08 114 }
Cheroukee 2:a9bb12eefc08 115
Cheroukee 2:a9bb12eefc08 116 bool transmit_request_64(char* buffer, int data_length, char options, zigbee_addr_64_t destination)
Cheroukee 2:a9bb12eefc08 117 {
Cheroukee 2:a9bb12eefc08 118 build_api_frame_header(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 119
Cheroukee 2:a9bb12eefc08 120 set_api_frame_type(TransmitRequest);
Cheroukee 2:a9bb12eefc08 121 set_api_frame_id(0x01);
Cheroukee 2:a9bb12eefc08 122
Cheroukee 2:a9bb12eefc08 123 set_64_addr(destination);
Cheroukee 2:a9bb12eefc08 124 DECLARE_ADDR16_UNKNOWN_OR_BCAST
Cheroukee 2:a9bb12eefc08 125 set_16_addr(USE_ADDR16_UNKNOWN_OR_BCAST);
Cheroukee 2:a9bb12eefc08 126
Cheroukee 2:a9bb12eefc08 127 set_broadcast_radius(15, 0);
Cheroukee 2:a9bb12eefc08 128 set_transmit_request_options(15, 0);
Cheroukee 2:a9bb12eefc08 129
Cheroukee 12:1286b80c68f7 130 set_transmit_data(TRANSMIT_REQ_DATA_START, buffer, data_length);
Cheroukee 2:a9bb12eefc08 131
Cheroukee 2:a9bb12eefc08 132 build_api_frame_checksum(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 133
Cheroukee 2:a9bb12eefc08 134 transmit(data_length);
Cheroukee 1:ea1b52d0a8a3 135
Cheroukee 1:ea1b52d0a8a3 136 return false;
Cheroukee 1:ea1b52d0a8a3 137 }
Cheroukee 1:ea1b52d0a8a3 138
Cheroukee 2:a9bb12eefc08 139 bool transmit_request_16(char* buffer, int data_length, char options, zigbee_addr_16_t destination)
Cheroukee 2:a9bb12eefc08 140 {
Cheroukee 2:a9bb12eefc08 141 build_api_frame_header(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 142
Cheroukee 2:a9bb12eefc08 143 set_api_frame_type(TransmitRequest);
Cheroukee 2:a9bb12eefc08 144 set_api_frame_id(0x01);
Cheroukee 2:a9bb12eefc08 145
Cheroukee 2:a9bb12eefc08 146 DECLARE_ADDR64_BCAST
Cheroukee 2:a9bb12eefc08 147 set_64_addr(USE_ADDR64_BCAST);
Cheroukee 2:a9bb12eefc08 148 set_16_addr(destination);
Cheroukee 2:a9bb12eefc08 149
Cheroukee 2:a9bb12eefc08 150 set_broadcast_radius(15, 0);
Cheroukee 2:a9bb12eefc08 151 set_transmit_request_options(15, 0);
Cheroukee 2:a9bb12eefc08 152
Cheroukee 12:1286b80c68f7 153 set_transmit_data(TRANSMIT_REQ_DATA_START, buffer, data_length);
Cheroukee 2:a9bb12eefc08 154
Cheroukee 2:a9bb12eefc08 155 build_api_frame_checksum(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 156
Cheroukee 2:a9bb12eefc08 157 transmit(data_length);
Cheroukee 2:a9bb12eefc08 158
Cheroukee 2:a9bb12eefc08 159 return false;
Cheroukee 2:a9bb12eefc08 160 }
Cheroukee 2:a9bb12eefc08 161
Cheroukee 2:a9bb12eefc08 162 bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16)
Cheroukee 1:ea1b52d0a8a3 163 {
Cheroukee 2:a9bb12eefc08 164 build_api_frame_header(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 165
Cheroukee 2:a9bb12eefc08 166 set_api_frame_type(TransmitRequest);
Cheroukee 2:a9bb12eefc08 167 set_api_frame_id(0x01);
Cheroukee 2:a9bb12eefc08 168
Cheroukee 2:a9bb12eefc08 169 set_64_addr(destination64);
Cheroukee 2:a9bb12eefc08 170 set_16_addr(destination16);
Cheroukee 2:a9bb12eefc08 171
Cheroukee 2:a9bb12eefc08 172 set_broadcast_radius(15, 0);
Cheroukee 2:a9bb12eefc08 173 set_transmit_request_options(15, 0);
Cheroukee 2:a9bb12eefc08 174
Cheroukee 12:1286b80c68f7 175 set_transmit_data(TRANSMIT_REQ_DATA_START, buffer, data_length);
Cheroukee 2:a9bb12eefc08 176
Cheroukee 2:a9bb12eefc08 177 build_api_frame_checksum(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 178
Cheroukee 12:1286b80c68f7 179 transmit(data_length + TRANSMIT_REQ_OVERHEAD_LENGTH);
Cheroukee 2:a9bb12eefc08 180
Cheroukee 2:a9bb12eefc08 181 return false;
Cheroukee 2:a9bb12eefc08 182 }
Cheroukee 2:a9bb12eefc08 183
Cheroukee 12:1286b80c68f7 184 void remote_at_command_query(char msb, char lsb, char options)
Cheroukee 12:1286b80c68f7 185 {
Cheroukee 12:1286b80c68f7 186 char remote_command[2] = {msb, lsb};
Cheroukee 12:1286b80c68f7 187
Cheroukee 12:1286b80c68f7 188 build_api_frame_header(2 + REMOTE_AT_OVERHEAD_LENGTH);
Cheroukee 12:1286b80c68f7 189
Cheroukee 12:1286b80c68f7 190 set_api_frame_type(RemoteCommandRequest);
Cheroukee 12:1286b80c68f7 191 set_api_frame_id(0x01);
Cheroukee 12:1286b80c68f7 192
Cheroukee 12:1286b80c68f7 193 DECLARE_ADDR16_UNKNOWN_OR_BCAST
Cheroukee 12:1286b80c68f7 194 DECLARE_ADDR64_BCAST
Cheroukee 12:1286b80c68f7 195
Cheroukee 12:1286b80c68f7 196 set_64_addr(USE_ADDR64_BCAST);
Cheroukee 12:1286b80c68f7 197 set_16_addr(USE_ADDR16_UNKNOWN_OR_BCAST);
Cheroukee 12:1286b80c68f7 198
Cheroukee 12:1286b80c68f7 199 // Set as apply
Cheroukee 12:1286b80c68f7 200 set_transmit_request_options(15, options);
Cheroukee 12:1286b80c68f7 201
Cheroukee 12:1286b80c68f7 202 set_transmit_data(16, remote_command, 2);
Cheroukee 12:1286b80c68f7 203
Cheroukee 12:1286b80c68f7 204 build_api_frame_checksum(2 + REMOTE_AT_OVERHEAD_LENGTH);
Cheroukee 12:1286b80c68f7 205
Cheroukee 12:1286b80c68f7 206 transmit(2 + REMOTE_AT_OVERHEAD_LENGTH);
Cheroukee 12:1286b80c68f7 207 }
Cheroukee 12:1286b80c68f7 208
Cheroukee 12:1286b80c68f7 209 void remote_at_command_set(char msb, char lsb, char parameter, char options)
Cheroukee 12:1286b80c68f7 210 {
Cheroukee 12:1286b80c68f7 211 char remote_command[3] = {msb, lsb, parameter};
Cheroukee 12:1286b80c68f7 212
Cheroukee 12:1286b80c68f7 213 build_api_frame_header(3 + REMOTE_AT_OVERHEAD_LENGTH);
Cheroukee 12:1286b80c68f7 214
Cheroukee 12:1286b80c68f7 215 set_api_frame_type(RemoteCommandRequest);
Cheroukee 12:1286b80c68f7 216 set_api_frame_id(0x01);
Cheroukee 12:1286b80c68f7 217
Cheroukee 12:1286b80c68f7 218 DECLARE_ADDR16_UNKNOWN_OR_BCAST
Cheroukee 12:1286b80c68f7 219 DECLARE_ADDR64_BCAST
Cheroukee 12:1286b80c68f7 220
Cheroukee 12:1286b80c68f7 221 set_64_addr(USE_ADDR64_BCAST);
Cheroukee 12:1286b80c68f7 222 set_16_addr(USE_ADDR16_UNKNOWN_OR_BCAST);
Cheroukee 12:1286b80c68f7 223
Cheroukee 12:1286b80c68f7 224 // Set as apply
Cheroukee 12:1286b80c68f7 225 set_transmit_request_options(15, options);
Cheroukee 12:1286b80c68f7 226
Cheroukee 12:1286b80c68f7 227 set_transmit_data(16, remote_command, 3);
Cheroukee 12:1286b80c68f7 228
Cheroukee 12:1286b80c68f7 229 build_api_frame_checksum(3 + REMOTE_AT_OVERHEAD_LENGTH);
Cheroukee 12:1286b80c68f7 230
Cheroukee 12:1286b80c68f7 231 transmit(3 + REMOTE_AT_OVERHEAD_LENGTH);
Cheroukee 12:1286b80c68f7 232 }
Cheroukee 12:1286b80c68f7 233
Cheroukee 2:a9bb12eefc08 234 void transmit(int packet_length)
Cheroukee 2:a9bb12eefc08 235 {
Cheroukee 12:1286b80c68f7 236 for (int i = 0; i < packet_length + 4; i++)
Cheroukee 2:a9bb12eefc08 237 {
Cheroukee 2:a9bb12eefc08 238 xbee.putc(TransmitBuffer[i]);
Cheroukee 2:a9bb12eefc08 239 }
Cheroukee 5:9e6a09a38785 240 xbee_transmit_led = !xbee_transmit_led;
Cheroukee 5:9e6a09a38785 241 }
Cheroukee 5:9e6a09a38785 242
Cheroukee 8:5955af1ee445 243 bool receive(frame_t* out_frame, int max_length)
Cheroukee 5:9e6a09a38785 244 {
Cheroukee 8:5955af1ee445 245 static int curr_length = 0;
Cheroukee 8:5955af1ee445 246
Cheroukee 8:5955af1ee445 247 static frame_recv_state_t recv_state = wait_delimiter;
Cheroukee 11:ecf5776b950a 248 frame_t* frame = out_frame;
Cheroukee 8:5955af1ee445 249 static char checksum = 0xFF;
Cheroukee 8:5955af1ee445 250
Cheroukee 8:5955af1ee445 251 bool finished_frame = false;
Cheroukee 8:5955af1ee445 252
Cheroukee 11:ecf5776b950a 253 xbee_receive_led = !xbee_receive_led;
Cheroukee 8:5955af1ee445 254 while(xbee.readable() && curr_length < max_length && !finished_frame)
Cheroukee 5:9e6a09a38785 255 {
Cheroukee 11:ecf5776b950a 256 char current = xbee.getc();
Cheroukee 8:5955af1ee445 257 switch(recv_state)
Cheroukee 8:5955af1ee445 258 {
Cheroukee 8:5955af1ee445 259 case wait_delimiter:
Cheroukee 8:5955af1ee445 260 {
Cheroukee 11:ecf5776b950a 261 if (current == ZIGBEE_DELIMITER)
Cheroukee 8:5955af1ee445 262 {
Cheroukee 11:ecf5776b950a 263 curr_length = 0;
Cheroukee 8:5955af1ee445 264 recv_state = read_length_msb;
Cheroukee 11:ecf5776b950a 265 frame->length = 0;
Cheroukee 8:5955af1ee445 266 }
Cheroukee 8:5955af1ee445 267 break;
Cheroukee 8:5955af1ee445 268 }
Cheroukee 8:5955af1ee445 269 case read_length_msb:
Cheroukee 8:5955af1ee445 270 {
Cheroukee 11:ecf5776b950a 271 frame->length = (current << 8);
Cheroukee 8:5955af1ee445 272 recv_state = read_length_lsb;
Cheroukee 8:5955af1ee445 273 break;
Cheroukee 8:5955af1ee445 274 }
Cheroukee 8:5955af1ee445 275 case read_length_lsb:
Cheroukee 11:ecf5776b950a 276 {
Cheroukee 11:ecf5776b950a 277 frame->length |= current;
Cheroukee 8:5955af1ee445 278 checksum = 0xFF;
Cheroukee 8:5955af1ee445 279 recv_state = read_frame_specific;
Cheroukee 8:5955af1ee445 280 break;
Cheroukee 8:5955af1ee445 281 }
Cheroukee 8:5955af1ee445 282 case read_frame_specific:
Cheroukee 8:5955af1ee445 283 {
Cheroukee 11:ecf5776b950a 284 frame->buffer[curr_length++] = current;
Cheroukee 11:ecf5776b950a 285 checksum -= current;
Cheroukee 11:ecf5776b950a 286 if (curr_length >= frame->length)
Cheroukee 8:5955af1ee445 287 {
Cheroukee 8:5955af1ee445 288 recv_state = read_checksum;
Cheroukee 8:5955af1ee445 289 }
Cheroukee 8:5955af1ee445 290 break;
Cheroukee 8:5955af1ee445 291 }
Cheroukee 8:5955af1ee445 292 case read_checksum:
Cheroukee 8:5955af1ee445 293 {
Cheroukee 8:5955af1ee445 294 recv_state = wait_delimiter;
Cheroukee 11:ecf5776b950a 295 if (checksum == current)
Cheroukee 8:5955af1ee445 296 {
Cheroukee 8:5955af1ee445 297 finished_frame = true;
Cheroukee 8:5955af1ee445 298 }
Cheroukee 8:5955af1ee445 299 break;
Cheroukee 8:5955af1ee445 300 }
Cheroukee 8:5955af1ee445 301 }
Cheroukee 8:5955af1ee445 302 }
Cheroukee 8:5955af1ee445 303
Cheroukee 8:5955af1ee445 304 return finished_frame;
Cheroukee 5:9e6a09a38785 305 }
Cheroukee 8:5955af1ee445 306
Cheroukee 8:5955af1ee445 307
Cheroukee 8:5955af1ee445 308 /**
Cheroukee 8:5955af1ee445 309 *
Cheroukee 8:5955af1ee445 310 * // Calculate checksum
Cheroukee 8:5955af1ee445 311 char checksum = 0xFF;
Cheroukee 8:5955af1ee445 312 for (int i = 3; i < FRAME_CHEKSUM_POS; i++)
Cheroukee 8:5955af1ee445 313 {
Cheroukee 8:5955af1ee445 314 checksum -= TransmitBuffer[i];
Cheroukee 8:5955af1ee445 315 }
Cheroukee 8:5955af1ee445 316
Cheroukee 8:5955af1ee445 317 // Insert checksum into buffer
Cheroukee 8:5955af1ee445 318 TransmitBuffer[FRAME_CHEKSUM_POS] = checksum;*/