Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed EthernetInterface WebSocketClient mbed-rtos BufferedSerial
Fork of APP3_Lab by
Diff: xbee.cpp
- Revision:
- 21:04fae6a95131
- Parent:
- 17:8abdbfa6019c
- Child:
- 23:c3f25b511448
--- a/xbee.cpp Mon Oct 02 15:20:22 2017 +0000
+++ b/xbee.cpp Mon Oct 02 16:54:00 2017 +0000
@@ -354,71 +354,67 @@
NVIC_EnableIRQ(UART1_IRQn);
return finished_frame; */
- if (xbee.readable())
+ 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)
{
- 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)
{
- char current = xbee.getc();
- switch(recv_state)
+ case wait_delimiter:
{
- case wait_delimiter:
+ //pc.printf(":: delimiter x%x", current);
+ if (current == ZIGBEE_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:
+ 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)
{
- frame->length = (current << 8);
- recv_state = read_length_lsb;
- break;
+ recv_state = read_checksum;
}
- 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:
+ break;
+ }
+ case read_checksum:
+ {
+ // pc.printf(":: read_checksum x%x", current);
+ recv_state = wait_delimiter;
+ if (checksum == current)
{
- //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;
+ finished_frame = true;
}
- case read_checksum:
- {
- // pc.printf(":: read_checksum x%x", current);
- recv_state = wait_delimiter;
- if (checksum == current)
- {
- finished_frame = true;
- }
- break;
- }
- }
- }
- return finished_frame;
+ break;
+ }
+ }
}
- return false;
+ return finished_frame;
}
