Visualizer #3
|
@ -94,6 +94,9 @@ add_executable(
|
||||||
../src/var_array.c
|
../src/var_array.c
|
||||||
../src/var_array.h
|
../src/var_array.h
|
||||||
../src/config.h
|
../src/config.h
|
||||||
|
../src/jsonlogger.c
|
||||||
|
../src/jsonlogger.h
|
||||||
|
../src/debug_structs.h
|
||||||
layer1/test_rx_file.c
|
layer1/test_rx_file.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <liquid/liquid.h>
|
#include <liquid/liquid.h>
|
||||||
|
|
||||||
|
#include "jsonlogger.h"
|
||||||
#include "layer1/rx.h"
|
#include "layer1/rx.h"
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -20,12 +21,9 @@
|
||||||
#define CHUNKSIZE_RF (CHUNKSIZE_INPUT/2)
|
#define CHUNKSIZE_RF (CHUNKSIZE_INPUT/2)
|
||||||
#define CHUNKSIZE_BB (CHUNKSIZE_RF/SDR_OVERSAMPLING)
|
#define CHUNKSIZE_BB (CHUNKSIZE_RF/SDR_OVERSAMPLING)
|
||||||
|
|
||||||
static struct {
|
#define JSONLOGGER 0
|
||||||
size_t preambles_found;
|
|
||||||
size_t successful_decodes;
|
static rx_stats_t m_rx_stats;
|
||||||
size_t failed_decodes;
|
|
||||||
size_t header_errors;
|
|
||||||
} m_stats;
|
|
||||||
|
|
||||||
|
|
||||||
static result_t sdr_rf_to_baseband(nco_crcf nco, firdecim_crcf decim,
|
static result_t sdr_rf_to_baseband(nco_crcf nco, firdecim_crcf decim,
|
||||||
|
@ -69,11 +67,11 @@ void cb_rx(rx_evt_t evt, const layer1_rx_t *rx, uint8_t *packet_data, size_t pac
|
||||||
//fprintf(stderr, "=== FAILED PAYLOAD ===\n");
|
//fprintf(stderr, "=== FAILED PAYLOAD ===\n");
|
||||||
//hexdump(packet_data, packet_len);
|
//hexdump(packet_data, packet_len);
|
||||||
//fprintf(stderr, "=======================\n");
|
//fprintf(stderr, "=======================\n");
|
||||||
m_stats.failed_decodes++;
|
m_rx_stats.failed_decodes++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RX_EVT_HEADER_ERROR:
|
case RX_EVT_HEADER_ERROR:
|
||||||
m_stats.header_errors++;
|
m_rx_stats.header_errors++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RX_EVT_PACKET_RECEIVED:
|
case RX_EVT_PACKET_RECEIVED:
|
||||||
|
@ -82,18 +80,24 @@ void cb_rx(rx_evt_t evt, const layer1_rx_t *rx, uint8_t *packet_data, size_t pac
|
||||||
//hexdump(packet_data, packet_len < 64 ? packet_len : 64);
|
//hexdump(packet_data, packet_len < 64 ? packet_len : 64);
|
||||||
//fprintf(stderr, "====================================\n");
|
//fprintf(stderr, "====================================\n");
|
||||||
|
|
||||||
m_stats.successful_decodes++;
|
m_rx_stats.successful_decodes++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RX_EVT_PREAMBLE_FOUND:
|
case RX_EVT_PREAMBLE_FOUND:
|
||||||
//fprintf(stderr, "Found preamble!\n");
|
//fprintf(stderr, "Found preamble!\n");
|
||||||
m_stats.preambles_found++;
|
m_rx_stats.preambles_found++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RX_EVT_PACKET_DEBUG_INFO_COMPLETE:
|
case RX_EVT_PACKET_DEBUG_INFO_COMPLETE:
|
||||||
// FIXME: print debug info
|
#if JSONLOGGER
|
||||||
|
jsonlogger_log_rx_packet_info(&rx->packet_debug_info);
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if JSONLOGGER
|
||||||
|
jsonlogger_log_rx_stats(&m_rx_stats);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,6 +116,13 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
// ** Initialize **
|
// ** Initialize **
|
||||||
|
|
||||||
|
#if JSONLOGGER
|
||||||
|
if(!jsonlogger_init("jsonlog_test.fifo")) {
|
||||||
|
fprintf(stderr, "Could not initialize JSON logger.\n");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
firdecim_crcf decim = firdecim_crcf_create_kaiser(SDR_OVERSAMPLING, 9, 60.0f);
|
firdecim_crcf decim = firdecim_crcf_create_kaiser(SDR_OVERSAMPLING, 9, 60.0f);
|
||||||
nco_crcf rx_nco = nco_crcf_create(LIQUID_NCO);
|
nco_crcf rx_nco = nco_crcf_create(LIQUID_NCO);
|
||||||
nco_crcf_set_frequency(rx_nco, 2 * 3.14159 * SDR_RX_IF_SHIFT / SDR_RX_SAMPLING_RATE);
|
nco_crcf_set_frequency(rx_nco, 2 * 3.14159 * SDR_RX_IF_SHIFT / SDR_RX_SAMPLING_RATE);
|
||||||
|
@ -147,13 +158,13 @@ int main(int argc, char **argv)
|
||||||
RESULT_CHECK(layer1_rx_process(&rx, bb_samples, n_bb_samples));
|
RESULT_CHECK(layer1_rx_process(&rx, bb_samples, n_bb_samples));
|
||||||
|
|
||||||
fprintf(stderr, "Receiver statistics:\n");
|
fprintf(stderr, "Receiver statistics:\n");
|
||||||
fprintf(stderr, " Preambles found: %8zd\n", m_stats.preambles_found);
|
fprintf(stderr, " Preambles found: %8zd\n", m_rx_stats.preambles_found);
|
||||||
fprintf(stderr, " Successful decodes: %8zd (%6.2f %%)\n",
|
fprintf(stderr, " Successful decodes: %8zd (%6.2f %%)\n",
|
||||||
m_stats.successful_decodes, m_stats.successful_decodes * 100.0f / m_stats.preambles_found);
|
m_rx_stats.successful_decodes, m_rx_stats.successful_decodes * 100.0f / m_rx_stats.preambles_found);
|
||||||
fprintf(stderr, " Header errors: %8zd (%6.2f %%)\n",
|
fprintf(stderr, " Header errors: %8zd (%6.2f %%)\n",
|
||||||
m_stats.header_errors, m_stats.header_errors * 100.0f / m_stats.preambles_found);
|
m_rx_stats.header_errors, m_rx_stats.header_errors * 100.0f / m_rx_stats.preambles_found);
|
||||||
fprintf(stderr, " Failed decodes: %8zd (%6.2f %%)\n",
|
fprintf(stderr, " Failed decodes: %8zd (%6.2f %%)\n",
|
||||||
m_stats.failed_decodes, m_stats.failed_decodes * 100.0f / m_stats.preambles_found);
|
m_rx_stats.failed_decodes, m_rx_stats.failed_decodes * 100.0f / m_rx_stats.preambles_found);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,5 +172,9 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
layer1_rx_shutdown(&rx);
|
layer1_rx_shutdown(&rx);
|
||||||
|
|
||||||
|
#if JSONLOGGER
|
||||||
|
jsonlogger_shutdown();
|
||||||
|
#endif
|
||||||
|
|
||||||
fprintf(stderr, "Done.\n");
|
fprintf(stderr, "Done.\n");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue