Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
Revision 15:c4d17caf0709, committed 2017-10-01
- Comitter:
- Cheroukee
- Date:
- Sun Oct 01 20:01:37 2017 +0000
- Parent:
- 14:cd488eba8bba
- Child:
- 16:0a5f3c449c95
- Commit message:
- Working reception + new analusis of packets;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
xbee.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sun Oct 01 18:53:18 2017 +0000 +++ b/main.cpp Sun Oct 01 20:01:37 2017 +0000 @@ -5,12 +5,12 @@ #include "sensors.h" #define IS_COORDINATOR 0 - #define PAN_ID 0xC0FFEE -#define BUFFER_SIZE 2048 +#define BUFFER_SIZE 64 char recv_buff[BUFFER_SIZE] = {0}; +DigitalOut loop_led(LED4); void set_remote_xbee_dio4(bool set); @@ -63,7 +63,6 @@ if (finished_packet) { - pc.printf("Data count = %u\r\n", current_frame.length); pc.printf("data start::: "); for (int i = 0; i < current_frame.length && i < BUFFER_SIZE; i++) { @@ -75,13 +74,13 @@ set_remote_xbee_dio4(toggle_led); toggle_led = !toggle_led; + loop_led = !loop_led; wait(1); } } #else void routeur() { - Serial pc(USBTX, USBRX); // tx, rx router_config_t config = read_router_config(); set_pan_id(config.pan_id); char sensor_buffer[64] = {}; @@ -97,6 +96,7 @@ transmit_request(sensor_buffer, 15, 0, USE_ADDR64_COORD, USE_ADDR16_UNKNOWN_OR_BCAST); + loop_led = !loop_led; wait(config.refresh_freq); } } @@ -104,7 +104,6 @@ void set_pan_id(long pan_id) { - //Serial pc(USBTX, USBRX); // tx, rx char pan_id_buffer[8] = {0}; for (int i = 0; i < 8; i++)
--- a/xbee.cpp Sun Oct 01 18:53:18 2017 +0000 +++ b/xbee.cpp Sun Oct 01 20:01:37 2017 +0000 @@ -255,10 +255,8 @@ void transmit(int packet_length) { - //Serial pc(USBTX, USBRX); // tx, rx for (int i = 0; i < packet_length + 4; i++) { - //pc.printf(" 0x%x", TransmitBuffer[i]); xbee.putc(TransmitBuffer[i]); } xbee_transmit_led = !xbee_transmit_led; @@ -266,76 +264,72 @@ bool receive(frame_t* out_frame, int max_length) { - static int curr_length = 0; - - static frame_recv_state_t recv_state = wait_delimiter; - frame_t* frame = out_frame; - static char checksum = 0xFF; - - bool finished_frame = false; - - xbee_receive_led = !xbee_receive_led; - while(xbee.readable() && curr_length < max_length && !finished_frame) + if (xbee.readable()) { - char current = xbee.getc(); - switch(recv_state) + //Serial pc(USBTX, USBRX); // tx, rx + static int curr_length = 0; + + frame_recv_state_t recv_state = wait_delimiter; + frame_t* frame = out_frame; + static char checksum = 0xFF; + + bool finished_frame = false; + + xbee_receive_led = !xbee_receive_led; + while(curr_length < max_length && !finished_frame) { - case wait_delimiter: - { - if (current == ZIGBEE_DELIMITER) - { - curr_length = 0; - recv_state = read_length_msb; - frame->length = 0; - } - break; - } - case read_length_msb: + char current = xbee.getc(); + switch(recv_state) { - frame->length = (current << 8); - recv_state = read_length_lsb; - break; - } - case read_length_lsb: - { - frame->length |= current; - checksum = 0xFF; - recv_state = read_frame_specific; - break; - } - case read_frame_specific: - { - frame->buffer[curr_length++] = current; - checksum -= current; - if (curr_length >= frame->length) + case wait_delimiter: { - recv_state = read_checksum; + //pc.printf(":: delimiter x%x", current); + if (current == ZIGBEE_DELIMITER) + { + curr_length = 0; + recv_state = read_length_msb; + frame->length = 0; + } + break; + } + case read_length_msb: + { + frame->length = (current << 8); + recv_state = read_length_lsb; + break; + } + case read_length_lsb: + { + frame->length |= current; + //pc.printf("\n\rFrame length = %u", frame->length); + checksum = 0xFF; + recv_state = read_frame_specific; + break; } - break; - } - case read_checksum: - { - recv_state = wait_delimiter; - if (checksum == current) + case read_frame_specific: { - finished_frame = true; + //pc.printf(":: read_frame_specific x%x", current); + frame->buffer[curr_length++] = current; + checksum -= current; + if (curr_length >= frame->length) + { + recv_state = read_checksum; + } + break; } - break; - } - } + case read_checksum: + { + // pc.printf(":: read_checksum x%x", current); + recv_state = wait_delimiter; + if (checksum == current) + { + finished_frame = true; + } + break; + } + } + } + return finished_frame; } - - return finished_frame; + return false; } - -/** - * - * // Calculate checksum - char checksum = 0xFF; - for (int i = 3; i < FRAME_CHEKSUM_POS; i++) - { - checksum -= TransmitBuffer[i]; - } - - // Insert checksum into buffer - TransmitBuffer[FRAME_CHEKSUM_POS] = checksum;*/ \ No newline at end of file