JongYong Park / Mbed 2 deprecated NUCLEO-F767_LIFI_4CH_os2_v2

Dependencies:   mbed

Revision:
22:1b6e6d26273e
Parent:
21:82b5759f5047
Child:
23:45461af5efc5
--- a/lifiReceiver.cpp	Tue Apr 09 09:11:24 2019 +0000
+++ b/lifiReceiver.cpp	Tue Apr 09 10:21:34 2019 +0000
@@ -88,8 +88,49 @@
 };
 // __attribute__((packed));
 
+struct RX_VARS_RECEIVED {
+    int probe_adc_high;
+    int probe_adc_low;
+    int probe_adc_gap;
+    uint8_t rx_frame_buffer[FRAME_BUFFER_SIZE];
+    //////////// keep received message
+    bool is_valid;
+    bool is_received;
+    ///////////
+    int rx_frame_size;
+    uint16_t pdu_length;
+    uint16_t pdu_length_count;
+    uint16_t frame_length;
+};
+
 static RX_VARS rx_vars[LIFI_MIMO_CHANNEL_NUM];
-//static int adc_read_value=0;
+static RX_VARS_RECEIVED rx_vars_received[LIFI_MIMO_CHANNEL_NUM];
+
+void LifiRx_CopyAdcInfo_FromReceivedFrame(int channel, int high, int low)
+{
+    rx_vars_received[channel].probe_adc_high = high ;
+    rx_vars_received[channel].probe_adc_low = low ;
+    rx_vars_received[channel].probe_adc_gap = high - low ;
+}
+
+void LifiRx_CopyData_FromReceivedFrame(int channel)
+{
+    rx_vars_received[channel].is_received = rx_vars[channel].is_received ;
+    rx_vars_received[channel].is_valid = rx_vars[channel].is_valid ;
+
+    rx_vars_received[channel].rx_frame_size = rx_vars[channel].rx_frame_size ;
+    rx_vars_received[channel].pdu_length = rx_vars[channel].pdu_length ;
+    rx_vars_received[channel].pdu_length_count = rx_vars[channel].pdu_length_count ;
+    rx_vars_received[channel].frame_length = rx_vars[channel].frame_length ;
+
+    memcpy( rx_vars_received[channel].rx_frame_buffer, rx_vars[channel].rx_frame_buffer, FRAME_BUFFER_SIZE) ;
+}
+
+void LifiRx_CopyAll_FromReceivedFrame(int channel)
+{
+	LifiRx_CopyAdcInfo_FromReceivedFrame(channel, rx_vars[channel].probe_adc_high, rx_vars[channel].probe_adc_low );
+	LifiRx_CopyData_FromReceivedFrame(channel);
+}
 
 void print_frame_data(uint8_t* frame, int length)
 {
@@ -217,11 +258,11 @@
     if ((rx_vars[channel].sensorValue - rx_vars[channel].oldValue)
             > LIFI_RX_EDGE_THRESHOLD) {
         rx_vars[channel].edge_val = 1;
-        
+
 #if CHECK_EDGE_WITH_DEBUG_LED
-		if( int LifiRx_GetDebugLed() == 0 ) printf("\n Edge Detect Fail (Up / 0) !!!");
+        if( int LifiRx_GetDebugLed() == 0 ) printf("\n Edge Detect Fail (Up / 0) !!!");
 #endif
-        
+
 #if RX_DEBUG_EDGE
         printf("%d/ %d-%d",channel+1,rx_vars[channel].sensorValue,rx_vars[channel].oldValue);
 #endif
@@ -230,11 +271,11 @@
     } else if ((rx_vars[channel].oldValue - rx_vars[channel].sensorValue)
                > LIFI_RX_EDGE_THRESHOLD) {
         rx_vars[channel].edge_val = -1;
-        
+
 #if CHECK_EDGE_WITH_DEBUG_LED
-		if( int LifiRx_GetDebugLed() == 1 ) printf("\n Edge Detect Fail (Down / 1) !!!");
-#endif    
-    
+        if( int LifiRx_GetDebugLed() == 1 ) printf("\n Edge Detect Fail (Down / 1) !!!");
+#endif
+
 #if RX_DEBUG_EDGE
         printf("%d| %d-%d",channel+1,rx_vars[channel].oldValue,rx_vars[channel].sensorValue);
 #endif
@@ -522,13 +563,8 @@
 #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
-            rx_vars[channel].probe_adc_high_received =
-                rx_vars[channel].probe_adc_high;
-            rx_vars[channel].probe_adc_low_received =
-                rx_vars[channel].probe_adc_low;
-            rx_vars[channel].probe_adc_gap_received =
-                rx_vars[channel].probe_adc_high
-                - rx_vars[channel].probe_adc_low;
+
+            LifiRx_CopyAdcInfo_FromReceivedFrame(  channel,  rx_vars[channel].probe_adc_high , rx_vars[channel].probe_adc_low);  
 
             rx_vars[channel].probe_adc_high = 0;
             rx_vars[channel].probe_adc_low = 1024;
@@ -556,10 +592,9 @@
 //			printf("\n=============");
 //			print_frame_data(rx_vars[channel].rx_frame_buffer,rx_vars[channel].frame_length_save);
 
-            memcpy(rx_vars[channel].rx_frame_buffer_save,
-                   rx_vars[channel].rx_frame_buffer, FRAME_BUFFER_SIZE);
+            memcpy(rx_vars[channel].rx_frame_buffer_save, rx_vars[channel].rx_frame_buffer, FRAME_BUFFER_SIZE);
             rx_vars[channel].is_received = true;
-
+            printf(" *** Channel[%d] Rx Finished !!! *** ", channel +1 );
             if (valid_chars) {
 //                //println(&(rx_frame_buffer[1]));
 //                //stringReceive = string(&(rx_frame_buffer[1]));
@@ -571,7 +606,12 @@
 //                printf("\nMSG_Invalid(ch_%d)[%s]",channel, rx_vars[channel].rx_frame_buffer);
                 rx_vars[channel].is_valid = false;
             }
-
+            // http://www.java2s.com/Tutorial/Cpp/0160__Structure/Usememcpytoduplicatestructures.htm
+            //memcpy((void*) &rx_vars_received[channel], (void*) &rx_vars[channel], sizeof( struct RX_VARS));
+            //memcpy( &rx_vars_received[channel], &rx_vars[channel], sizeof( struct RX_VARS));
+            //memcpy((void*) & (rx_vars_received[channel]), (void*) &(rx_vars[channel]), sizeof(rx_vars[channel]));
+            
+            LifiRx_CopyData_FromReceivedFrame(channel);
             got_all_frame = true;
         }
         //if(frame_state != IDLE_STATE) println(received_data, HEX);
@@ -590,9 +630,9 @@
            rx_vars[channel].pdu_length_count_save,
            rx_vars[channel].pdu_length_save,
            rx_vars[channel].frame_length_save,
-           rx_vars[channel].probe_adc_high_received,
-           rx_vars[channel].probe_adc_low_received,
-           rx_vars[channel].probe_adc_gap_received);
+           rx_vars[channel].probe_adc_high,
+           rx_vars[channel].probe_adc_low,
+           rx_vars[channel].probe_adc_gap);
 //	print_frame_data(rx_vars[channel].rx_frame_buffer_save,rx_vars[channel].pdu_length);
     print_pdu_data(rx_vars[channel].rx_frame_buffer_save + LIFI_RX_FRAME_DATA_OFFSET,rx_vars[channel].pdu_length_save);
     print_frame_data(rx_vars[channel].rx_frame_buffer_save,rx_vars[channel].frame_length_save);
@@ -600,6 +640,24 @@
 #endif
 }
 
+void print_channel_received_data(int channel)
+{
+#if RX_DEBUG_MAIN_LOOP
+    printf("\nMSG(%d) valid=%d, [len:%d/%d/%d] Adc[Max=%d Min=%d Gap=%d]",
+           channel,
+           rx_vars_received[channel].is_valid,
+           rx_vars_received[channel].pdu_length_count,
+           rx_vars_received[channel].pdu_length,
+           rx_vars_received[channel].frame_length,
+           rx_vars_received[channel].probe_adc_high,
+           rx_vars_received[channel].probe_adc_low,
+           rx_vars_received[channel].probe_adc_gap);
+//	print_frame_data(rx_vars[channel].rx_frame_buffer_save,rx_vars[channel].pdu_length);
+    print_pdu_data(rx_vars_received[channel].rx_frame_buffer + LIFI_RX_FRAME_DATA_OFFSET,rx_vars_received[channel].pdu_length);
+    print_frame_data(rx_vars_received[channel].rx_frame_buffer,rx_vars_received[channel].frame_length);
+
+#endif
+}
 
 void print_4ch_message()
 {
@@ -703,7 +761,7 @@
     else if(finished_channel >= 1 ) {
         loop_count++;
         if(loop_count > 1000 ) {
-            printf("\nHERE 1 Finished(%d)",finished_channel);
+            printf("\nHERE 1 Finished channel count (%d)",finished_channel);
             LifixRx_PrintUnfinishedChannl();
             print_4ch_message();
             LifiRx_Init();