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.
Diff: lifiReceiver.cpp
- Revision:
- 16:c551ee1092f5
- Parent:
- 14:07669aafe0e4
- Child:
- 17:847e9b792c72
--- a/lifiReceiver.cpp Sat Apr 06 09:57:39 2019 +0000
+++ b/lifiReceiver.cpp Mon Apr 08 09:37:14 2019 +0900
@@ -252,6 +252,54 @@
#endif
}
+int add_byte_to_frame_v1(int channel,unsigned char * rx_frame_buffer, int * rx_frame_index, int * rx_frame_size, enum receiver_state * frame_state,unsigned char data)
+{
+ if(data == SYNC_SYMBOL/* && (*rx_frame_index) < 0*/) {
+ (*rx_frame_index) = 0 ;
+ (*rx_frame_size) = 0 ;
+ (*frame_state) = SYNC_STATE ;
+#if RX_DEBUG_FRAME
+ printf("\n%dSYNC ",channel+1);
+#endif
+ return 0 ;
+ }
+ if((*frame_state) != IDLE_STATE) { // we are synced
+ rx_frame_buffer[*rx_frame_index] = data ;
+ (*rx_frame_index) ++ ;
+ if(data == STX) {
+#if RX_DEBUG_FRAME
+ printf("%dSTART ",channel+1);
+#endif
+ (*frame_state) = START_STATE ;
+ return 0 ;
+ } else if(data == ETX) {
+#if RX_DEBUG_FRAME
+ printf("%dEND IDLE ",channel+1);
+#endif
+ (*rx_frame_size) = (*rx_frame_index) ;
+ (*rx_frame_index) = -1 ;
+ (*frame_state) = IDLE_STATE ;
+
+ return 1 ;
+ } else if((*rx_frame_index) >= FRAME_BUFFER_SIZE) { //frame is larger than max size of frame ...
+#if RX_DEBUG_FRAME
+ printf("%dIDLE - over FRAME_BUFFER_SIZE ",channel+1);
+#endif
+ (*rx_frame_index) = -1 ;
+ (*rx_frame_size) = -1 ;
+ (*frame_state) = IDLE_STATE ;
+ return -1 ;
+ } else {
+#if RX_DEBUG_FRAME
+ printf("%dD=%c[%x] ",channel+1,data,data);
+#endif
+ (*frame_state) = DATA_STATE ;
+ }
+ return 0 ;
+ }
+ return -1 ;
+}
+
int add_byte_to_frame(int channel, unsigned char * rx_frame_buffer,
int * rx_frame_index, int * rx_frame_size,
enum receiver_state * frame_state, unsigned char data) {
@@ -278,24 +326,23 @@
} else if (data == SYNC_SYMBOL) {
// do nothing
} else {
- printf(
- "\n Error # got wrong data after SYNC. it should be STX");
+ printf("\n Error # got wrong data after SYNC. it should be STX");
}
} else if ((*frame_state) == START_STATE) {
-
-#if RX_DEBUG_FRAME
- printf("%dLENGTH_LSB ",channel+1);
-#endif
(*frame_state) = LENGTH_LSB_STATE;
rx_vars[channel].length = data;
+#if RX_DEBUG_FRAME
+ printf("%dLENGTH_LSB(%d) ",channel+1,data);
+#endif
} else if ((*frame_state) == LENGTH_LSB_STATE) {
-#if RX_DEBUG_FRAME
- printf("%dLENGTH_MSB ",channel+1);
-#endif
(*frame_state) = LENGTH_MSB_STATE;
rx_vars[channel].length = rx_vars[channel].length + (data << 8);
+#if RX_DEBUG_FRAME
+ printf("%dLENGTH_MSB(%d) length=%d",channel+1,data, rx_vars[channel].length);
+#endif
+
} else if ((*frame_state) == LENGTH_MSB_STATE) {
#if RX_DEBUG_FRAME
@@ -327,7 +374,7 @@
return 1;
} else {
- printf("\n Error # got wrong data. it should be ETX");
+ printf("\n Error # got wrong data (%d). it should be ETX",data);
return 1;
}
} else if ((*rx_frame_index) >= FRAME_BUFFER_SIZE) { //frame is larger than max size of frame ...
@@ -394,11 +441,20 @@
// printf("%dRx:%c[%x]",,channel+1,(unsigned char) received_data,received_data & 0xFF);
#endif
rx_vars[channel].new_word = 0;
+#if LIFI_PACKET_USE_LENGTH
if ((byte_added = add_byte_to_frame(channel,
rx_vars[channel].rx_frame_buffer,
&rx_vars[channel].rx_frame_index,
&rx_vars[channel].rx_frame_size, &rx_vars[channel].frame_state,
- received_data)) > 0) {
+ received_data)) > 0)
+#else
+ if ((byte_added = add_byte_to_frame_v1(channel,
+ rx_vars[channel].rx_frame_buffer,
+ &rx_vars[channel].rx_frame_index,
+ &rx_vars[channel].rx_frame_size, &rx_vars[channel].frame_state,
+ received_data)) > 0)
+#endif
+ {
valid_chars = 1;
rx_vars[channel].rx_frame_buffer[rx_vars[channel].rx_frame_size - 1] =
'\0';