From d2ef6d97418c32ef872d2ef5f8800d6141c98887 Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Sat, 27 Jul 2024 00:50:04 +0200 Subject: [PATCH] Remove empty packets from the queue after their first transmission --- impl/src/layer2/layer2_tx.c | 13 +++++++++++++ impl/src/layer2/layer2_tx.h | 4 ++++ impl/src/main.c | 2 ++ 3 files changed, 19 insertions(+) diff --git a/impl/src/layer2/layer2_tx.c b/impl/src/layer2/layer2_tx.c index fdff035..1e0bb7f 100644 --- a/impl/src/layer2/layer2_tx.c +++ b/impl/src/layer2/layer2_tx.c @@ -160,6 +160,19 @@ void layer2_tx_restart(layer2_tx_t *ctx) } +void layer2_tx_clean_empty_packet(layer2_tx_t *ctx) +{ + const packet_queue_entry_t *entry = packet_queue_get(&ctx->packet_queue, 0); + if(entry && entry->header.msg_type == L2_MSG_TYPE_EMPTY) { + packet_queue_delete(&ctx->packet_queue, 1); + + if(ctx->next_packet_index > 0) { + ctx->next_packet_index--; + } + } +} + + void layer2_tx_handle_ack(layer2_tx_t *ctx, uint8_t acked_seq, bool do_ack) { ctx->next_packet_index = 0; diff --git a/impl/src/layer2/layer2_tx.h b/impl/src/layer2/layer2_tx.h index 04a256d..6376932 100644 --- a/impl/src/layer2/layer2_tx.h +++ b/impl/src/layer2/layer2_tx.h @@ -57,6 +57,10 @@ size_t layer2_tx_encode_next_packet(layer2_tx_t *ctx, uint8_t ack_seq_nr, uint8_ */ void layer2_tx_restart(layer2_tx_t *ctx); +/*!\brief Remove the first packet from the queue if it is an empty packet. + */ +void layer2_tx_clean_empty_packet(layer2_tx_t *ctx); + /*!\brief Handle acknowledgements. * \details * Removes all packets before the given sequence number from the queue. diff --git a/impl/src/main.c b/impl/src/main.c index 26d4242..a2d31cd 100644 --- a/impl/src/main.c +++ b/impl/src/main.c @@ -284,6 +284,8 @@ int main(int argc, char **argv) // generate the ramp-down RESULT_CHECK(layer1_tx_finalize_burst(&tx)); + layer2_tx_clean_empty_packet(&l2tx); + size_t burst_len = layer1_tx_get_sample_count(&tx); const float complex *whole_burst = layer1_tx_get_sample_data(&tx);