From 7995f5bef0c0bafa57555afb6a7d7d480ecd146e Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Tue, 2 Jan 2024 19:04:19 +0100 Subject: [PATCH] Print RX stats periodically instead of debug logging --- impl/src/main.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/impl/src/main.c b/impl/src/main.c index 79d2ff2..e509665 100644 --- a/impl/src/main.c +++ b/impl/src/main.c @@ -38,6 +38,12 @@ static bool m_running = true; static double next_tx_switch_time = 0.0; +static struct { + size_t preambles_found; + size_t successful_decodes; + size_t failed_decodes; +} m_stats; + static void block_tx_for(unsigned offset_ms) { @@ -102,18 +108,21 @@ void cb_rx(rx_evt_t evt, uint8_t *packet_data, size_t packet_len) switch(evt) { case RX_EVT_CHECKSUM_ERROR: - fprintf(stderr, "Received a message of %zu bytes, but decoding failed.\n", packet_len); + //fprintf(stderr, "Received a message of %zu bytes, but decoding failed.\n", packet_len); //fprintf(stderr, "=== FAILED PAYLOAD ===\n"); //hexdump(packet_data, packet_len); //fprintf(stderr, "=======================\n"); + m_stats.failed_decodes++; break; case RX_EVT_PACKET_RECEIVED: - fprintf(stderr, "A message of %zu bytes was decoded successfully.\n", packet_len); + //fprintf(stderr, "A message of %zu bytes was decoded successfully.\n", packet_len); //fprintf(stderr, "=== DECODED PAYLOAD (%4zu bytes) ===\n", packet_len); //hexdump(packet_data, packet_len < 64 ? packet_len : 64); //fprintf(stderr, "====================================\n"); + m_stats.successful_decodes++; + block_tx_for(TX_SWITCH_BACKOFF_END_OF_PACKET_MS); ret = write(m_tunfd, packet_data, packet_len); @@ -123,8 +132,9 @@ void cb_rx(rx_evt_t evt, uint8_t *packet_data, size_t packet_len) break; case RX_EVT_PREAMBLE_FOUND: - fprintf(stderr, "Found preamble!\n"); + //fprintf(stderr, "Found preamble!\n"); block_tx_for(TX_SWITCH_BACKOFF_PREAMBLE_MS); + m_stats.preambles_found++; break; } } @@ -220,7 +230,7 @@ int main(void) double old = get_hires_time(); size_t total_samples = 0; - double next_rate_print_time = old + 0.5; + double next_stats_print_time = old + 0.5; while(m_running) { double now = get_hires_time(); @@ -300,10 +310,16 @@ int main(void) total_samples += n_rf_samples; double new = get_hires_time(); - if(new >= next_rate_print_time) { + if(new >= next_stats_print_time) { double rate = total_samples / (new - old); fprintf(stderr, "\nEstimated rate: %.3f MS/s\n", rate / 1e6); - next_rate_print_time += 0.5; + fprintf(stderr, "Receiver statistics:\n"); + fprintf(stderr, " Preambles found: %8zd\n", m_stats.preambles_found); + fprintf(stderr, " Successful decodes: %8zd (%6.2f %%)\n", + m_stats.successful_decodes, m_stats.successful_decodes * 100.0f / m_stats.preambles_found); + fprintf(stderr, " Failed decodes: %8zd (%6.2f %%)\n", + m_stats.failed_decodes, m_stats.failed_decodes * 100.0f / m_stats.preambles_found); + next_stats_print_time += 0.5; total_samples = 0; old = new;