Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
Diff: xbee.cpp
- Revision:
- 15:c4d17caf0709
- Parent:
- 14:cd488eba8bba
- Child:
- 17:8abdbfa6019c
--- 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