JongYong Park / Mbed 2 deprecated NUCLEO-F767_LIFI_4CH_os2_v2

Dependencies:   mbed

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';