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:
- 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();