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:
- 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