JongYong Park / Mbed 2 deprecated NUCLEO-F767_LIFI_4CH_os2_v2

Dependencies:   mbed

Revision:
18:2f7b820324c3
Parent:
17:847e9b792c72
Child:
19:a7e295b496a8
--- a/lifiReceiver.cpp	Mon Apr 08 01:14:04 2019 +0000
+++ b/lifiReceiver.cpp	Mon Apr 08 04:25:57 2019 +0000
@@ -67,11 +67,11 @@
 	int probe_adc_low;
 	int probe_adc_gap;
 	enum receiver_state frame_state;
-	unsigned char rx_frame_buffer[FRAME_BUFFER_SIZE];
+	uint8_t rx_frame_buffer[FRAME_BUFFER_SIZE];
 	//////////// keep received message
 	bool is_valid;
 	bool is_received;
-	unsigned char rx_frame_buffer_received[FRAME_BUFFER_SIZE];
+	uint8_t rx_frame_buffer_save[FRAME_BUFFER_SIZE];
 	int probe_adc_high_received;
 	int probe_adc_low_received;
 	int probe_adc_gap_received;
@@ -81,6 +81,8 @@
 	int rx_frame_size;
 	uint16_t length;
 	uint16_t received_data_count;
+	uint16_t length_save;
+	uint16_t received_data_count_save;
 };
 // __attribute__((packed));
 
@@ -252,7 +254,7 @@
 #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)
+int add_byte_to_frame_v1(int channel,uint8_t * 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 ;
@@ -300,7 +302,7 @@
     return -1 ;
 }
 
-int add_byte_to_frame(int channel, unsigned char * rx_frame_buffer,
+int add_byte_to_frame(int channel, uint8_t * 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*/) {
@@ -353,12 +355,15 @@
 			rx_vars[channel].received_data_count++;
 
 		} else if ((*frame_state) == DATA_STATE) {
-
 			rx_vars[channel].received_data_count++;
-
 			// when ETX
 			if (rx_vars[channel].received_data_count
 					> rx_vars[channel].length) {
+				
+				rx_vars[channel].received_data_count--; // ETX is not included on data length
+				rx_vars[channel].received_data_count_save = rx_vars[channel].received_data_count;
+				rx_vars[channel].length_save = rx_vars[channel].length;
+						
 				if (data == ETX) {
 #if RX_DEBUG_FRAME
 					printf("%dEND IDLE ",channel+1);
@@ -366,13 +371,14 @@
 					(*rx_frame_size) = (*rx_frame_index);
 					(*rx_frame_index) = -1;
 					(*frame_state) = IDLE_STATE;
-	
+
 					return 1;
 				} else {
 					printf("\n Error # got wrong data (%d). it should be ETX",data);
-					return 1;
+					return -1;
 				}
 			}
+			// normal DATA
 			else{
 #if RX_DEBUG_FRAME
 				printf("%dD=%c[%x] ",channel+1,data,data);
@@ -426,7 +432,7 @@
 	//unsigned char received_data_print ;
 	//int nb_shift ;
 	int byte_added = 0;
-	int valid_chars;
+	bool valid_chars;
 	if (rx_vars[channel].new_word == 1) {
 		received_data = 0;
 		for (i = 0; i < 16; i = i + 2) { //decoding Manchester
@@ -456,9 +462,8 @@
 					received_data)) > 0)
 #endif
 		{
-			valid_chars = 1;
-			rx_vars[channel].rx_frame_buffer[rx_vars[channel].rx_frame_size - 1] =
-					'\0';
+			valid_chars = true;
+			rx_vars[channel].rx_frame_buffer[rx_vars[channel].rx_frame_size - 1] = 	'\0';
 #if RX_DEBUG_MAIN_LOOP
 			//printf("%dAdc[Max=%d Min=%d]",channel+1,rx_vars[channel].probe_adc_high,rx_vars[channel].probe_adc_low);
 #endif
@@ -472,17 +477,28 @@
 
 			rx_vars[channel].probe_adc_high = 0;
 			rx_vars[channel].probe_adc_low = 1024;
+#if 1
+//			for (int i = 1; i < (rx_vars[channel].rx_frame_size - 1); i++) {
+//				if ((rx_vars[channel].rx_frame_buffer[i] < ' ')
+//						|| (rx_vars[channel].rx_frame_buffer[i] > '~')) {
+//					valid_chars = false0;
+//					break;
+//				} else {
+//				}
+//			}
+			valid_chars = true;
+#else 
+			// only valid when char is charactor
 			for (int i = 1; i < (rx_vars[channel].rx_frame_size - 1); i++) {
 				if ((rx_vars[channel].rx_frame_buffer[i] < ' ')
 						|| (rx_vars[channel].rx_frame_buffer[i] > '~')) {
-					valid_chars = 0;
+					valid_chars = false;
 					break;
 				} else {
 				}
-
 			}
-
-			memcpy(rx_vars[channel].rx_frame_buffer_received,
+#endif
+			memcpy(rx_vars[channel].rx_frame_buffer_save,
 					rx_vars[channel].rx_frame_buffer, FRAME_BUFFER_SIZE);
 			rx_vars[channel].is_received = true;
 
@@ -501,6 +517,42 @@
 		//if(frame_state != IDLE_STATE) println(received_data, HEX);
 	}
 }
+void print_frame_data(uint8_t* frame, int length)
+{
+	printf("\n frame = ");
+	for(int i=0; i < length; i++)
+	{
+		// https://simple.wikipedia.org/wiki/ASCII
+		if(frame[i] >= 0x20 || frame[i] <= 0x7E )
+		{
+			printf("%c_%02x ",frame[i],frame[i]);
+		}
+		else
+		{
+			printf("_%02x ",frame[i]);
+		}
+	}
+}
+
+void print_channel_data(int channel)
+{
+#if RX_DEBUG_MAIN_LOOP    
+	printf("\n{{{");
+	printf("\nMSG valid=%d, (ch_%d)[len:%d/%d] Adc[Max=%d Min=%d Gap=%d]",
+			rx_vars[channel].is_valid,
+			rx_vars[channel].received_data_count,
+			rx_vars[channel].length, channel,
+			rx_vars[channel].probe_adc_high_received,
+			rx_vars[channel].probe_adc_low_received,
+			rx_vars[channel].probe_adc_gap_received);
+	print_frame_data(rx_vars[channel].rx_frame_buffer_save,rx_vars[channel].length);
+	
+#endif    
+}
+
+void print_psd_data()
+{
+}
 
 void print_4ch_message() {
 	int channel = LIFI_CHANNEL_1;
@@ -509,58 +561,21 @@
 			return;
 	}
 #if RX_DEBUG_MAIN_LOOP    
-	printf("\n{{{");
-	printf("\nMSG valid=%d, (ch_%d)[len:%d/%d][%s] Adc[Max=%d Min=%d Gap=%d]",
-			rx_vars[LIFI_CHANNEL_1].is_valid,
-			rx_vars[LIFI_CHANNEL_1].received_data_count,
-			rx_vars[LIFI_CHANNEL_1].length, LIFI_CHANNEL_1,
-			rx_vars[LIFI_CHANNEL_1].rx_frame_buffer_received,
-			rx_vars[LIFI_CHANNEL_1].probe_adc_high_received,
-			rx_vars[LIFI_CHANNEL_1].probe_adc_low_received,
-			rx_vars[LIFI_CHANNEL_1].probe_adc_gap_received);
-#endif    
+	printf("\n{{{");	
+#endif
+	print_channel_data(LIFI_CHANNEL_1);
 	rx_vars[LIFI_CHANNEL_1].is_received = false;
 
 	if (Lifi_IsChannelAvailable(LIFI_CHANNEL_2)) {
-#if RX_DEBUG_MAIN_LOOP   
-		printf(
-				"\nMSG valid=%d, (ch_%d)[len:%d/%d][%s] Adc[Max=%d Min=%d Gap=%d]",
-				rx_vars[LIFI_CHANNEL_2].is_valid,
-				rx_vars[LIFI_CHANNEL_2].received_data_count,
-				rx_vars[LIFI_CHANNEL_2].length, LIFI_CHANNEL_2,
-				rx_vars[LIFI_CHANNEL_2].rx_frame_buffer_received,
-				rx_vars[LIFI_CHANNEL_2].probe_adc_high_received,
-				rx_vars[LIFI_CHANNEL_2].probe_adc_low_received,
-				rx_vars[LIFI_CHANNEL_2].probe_adc_gap_received);
-#endif   
+		print_channel_data(LIFI_CHANNEL_2);
 		rx_vars[LIFI_CHANNEL_2].is_received = false;
 	}
 	if (Lifi_IsChannelAvailable(LIFI_CHANNEL_3)) {
-#if RX_DEBUG_MAIN_LOOP   
-		printf(
-				"\nMSG valid=%d, (ch_%d)[len:%d/%d][%s] Adc[Max=%d Min=%d Gap=%d]",
-				rx_vars[LIFI_CHANNEL_3].is_valid,
-				rx_vars[LIFI_CHANNEL_3].received_data_count,
-				rx_vars[LIFI_CHANNEL_3].length, LIFI_CHANNEL_3,
-				rx_vars[LIFI_CHANNEL_3].rx_frame_buffer_received,
-				rx_vars[LIFI_CHANNEL_3].probe_adc_high_received,
-				rx_vars[LIFI_CHANNEL_3].probe_adc_low_received,
-				rx_vars[LIFI_CHANNEL_3].probe_adc_gap_received);
-#endif   
+		print_channel_data(LIFI_CHANNEL_3);
 		rx_vars[LIFI_CHANNEL_3].is_received = false;
 	}
 	if (Lifi_IsChannelAvailable(LIFI_CHANNEL_4)) {
-#if RX_DEBUG_MAIN_LOOP   
-		printf(
-				"\nMSG valid=%d, (ch_%d)[len:%d/%d][%s] Adc[Max=%d Min=%d Gap=%d]",
-				rx_vars[LIFI_CHANNEL_4].is_valid,
-				rx_vars[LIFI_CHANNEL_4].received_data_count,
-				rx_vars[LIFI_CHANNEL_4].length, LIFI_CHANNEL_4,
-				rx_vars[LIFI_CHANNEL_4].rx_frame_buffer_received,
-				rx_vars[LIFI_CHANNEL_4].probe_adc_high_received,
-				rx_vars[LIFI_CHANNEL_4].probe_adc_low_received,
-				rx_vars[LIFI_CHANNEL_4].probe_adc_gap_received);
-#endif   
+	print_channel_data(LIFI_CHANNEL_4); 
 		rx_vars[LIFI_CHANNEL_4].is_received = false;
 	}
 #if RX_DEBUG_MAIN_LOOP