Code APP3
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
Diff: xbee.cpp
- Revision:
- 24:29ec42daa82e
- Parent:
- 23:c3f25b511448
- Child:
- 25:7b808fb9e025
diff -r c3f25b511448 -r 29ec42daa82e xbee.cpp --- a/xbee.cpp Mon Oct 02 16:59:26 2017 +0000 +++ b/xbee.cpp Mon Oct 02 17:35:34 2017 +0000 @@ -305,18 +305,17 @@ bool receive(frame_t* out_frame, int max_length) { - - //NVIC_DisableIRQ(UART1_IRQn); - /* - static int curr_length = 0; - static frame_recv_state_t recv_state = wait_delimiter; + static int curr_length = 0; + + static frame_recv_state_t recv_state = wait_delimiter; static char checksum = 0xFF; bool finished_frame = false; - while(rx_out != rx_in && !finished_frame) + xbee_receive_led = !xbee_receive_led; + while(xbee.readable() && curr_length < max_length && !finished_frame) { - char current = ReceiveBuffer[rx_out]; + char current = xbee.getc(); switch(recv_state) { case wait_delimiter: @@ -337,15 +336,13 @@ } case read_length_lsb: { - out_frame->length |= current; - //pc.printf("\n\rFrame length = %u", out_frame->length); + out_frame->length |= current; checksum = 0xFF; recv_state = read_frame_specific; break; } case read_frame_specific: - { - //pc.printf(":: read_frame_specific x%x", current); + { out_frame->buffer[curr_length++] = current; checksum -= current; if (curr_length >= out_frame->length) @@ -364,73 +361,6 @@ } break; } - } - rx_out = (rx_out + 1) % BUFFER_SIZE; - } - - NVIC_EnableIRQ(UART1_IRQn); - - return finished_frame; */ - 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) - { - char current = xbee.getc(); - switch(recv_state) - { - case wait_delimiter: - { - //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; - } - case read_frame_specific: - { - //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; - } - case read_checksum: - { - // pc.printf(":: read_checksum x%x", current); - recv_state = wait_delimiter; - if (checksum == current) - { - finished_frame = true; - } - break; - } } } return finished_frame;