Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
Revision 8:5955af1ee445, committed 2017-09-30
- Comitter:
- Cheroukee
- Date:
- Sat Sep 30 20:07:23 2017 +0000
- Parent:
- 7:b054ce191070
- Child:
- 9:3631d3685cfa
- Commit message:
- Fixed Platform IO compiling with new ACCEL lib, added new packet receiving
Changed in this revision
--- a/main.cpp Sat Sep 30 20:02:08 2017 +0000 +++ b/main.cpp Sat Sep 30 20:07:23 2017 +0000 @@ -21,7 +21,7 @@ char hello_world[12] = "Hello world"; - + frame_t* current_frame; #if IS_COORDINATOR #else @@ -38,14 +38,14 @@ //pc.putc(c); }*/ - int recv_len = receive(recv_buff, 2048); + bool finished_packet = receive(current_frame, 2048); - if (recv_len > 0) + if (finished_packet) { - pc.printf("DATA RECEIVED : "); - for (int i = 0; i < recv_len; i++) + pc.printf("DATA RECEIVED : Data count = %u", current_frame->length); + for (int i = 0; i < current_frame->length; i++) { - pc.putc(recv_buff[i]); + pc.putc(current_frame->buffer[i]); } pc.printf("\n\r"); }
--- a/sensors.h Sat Sep 30 20:02:08 2017 +0000 +++ b/sensors.h Sat Sep 30 20:07:23 2017 +0000 @@ -1,5 +1,5 @@ #include "mbed.h" -#include "MMA8452Q.h" +#include "MMA8452Q/MMA8452Q.h" // Accelerometer - SDA, SCL, and I2C address MMA8452Q accel(p9, p10, 0x1D);
--- a/xbee.cpp Sat Sep 30 20:02:08 2017 +0000 +++ b/xbee.cpp Sat Sep 30 20:07:23 2017 +0000 @@ -190,14 +190,77 @@ xbee_transmit_led = !xbee_transmit_led; } -int receive(char* buffer, int max_length) +bool receive(frame_t* out_frame, int max_length) { - int length = 0; - - while(xbee.readable() && length < max_length) + static int curr_length = 0; + + static frame_recv_state_t recv_state = wait_delimiter; + static frame_t frame; + static char checksum = 0xFF; + + bool finished_frame = false; + + while(xbee.readable() && curr_length < max_length && !finished_frame) { - buffer[length++] = xbee.getc(); - } - xbee_receive_led = !xbee_receive_led; - return length; + switch(recv_state) + { + case wait_delimiter: + { + if (xbee.getc() == ZIGBEE_DELIMITER) + { + recv_state = read_length_msb; + } + break; + } + case read_length_msb: + { + frame.length = (xbee.getc() << 8); + recv_state = read_length_lsb; + break; + } + case read_length_lsb: + { + frame.length |= xbee.getc(); + checksum = 0xFF; + recv_state = read_frame_specific; + break; + } + case read_frame_specific: + { + frame.buffer[curr_length] = xbee.getc(); + checksum -= frame.buffer[curr_length++]; + if (curr_length >= frame.length) + { + recv_state = read_checksum; + } + break; + } + case read_checksum: + { + recv_state = wait_delimiter; + xbee_receive_led = !xbee_receive_led; + if (checksum == xbee.getc()) + { + out_frame = &frame; + finished_frame = true; + } + break; + } + } + } + + return finished_frame; } + + +/** + * + * // 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
--- a/xbee.h Sat Sep 30 20:02:08 2017 +0000 +++ b/xbee.h Sat Sep 30 20:07:23 2017 +0000 @@ -50,6 +50,18 @@ char addr_lsb; } zigbee_addr_16_t; +typedef struct { + int length; + char buffer[2048]; +} frame_t; + +typedef enum { + wait_delimiter, + read_length_msb, + read_length_lsb, + read_frame_specific, + read_checksum +} frame_recv_state_t; // Position du frame delimiter #define FRAME_DELIMITER_POS 0 @@ -135,4 +147,4 @@ bool transmit_request(char* buffer, int data_length, char options, zigbee_addr_64_t destination64, zigbee_addr_16_t destination16); void transmit(int packet_length); -int receive(char* buffer, int max_length); +bool receive(frame_t* buffer, int max_length);