diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 93b3c7218928a5452f6064b042b49227d0e49d10..f9cc4a111aecacb740dde74d2b1f93af53e683b2 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -310,6 +310,23 @@ static int trx_usrp_start(openair0_device *device) { return 0; } +static void trx_usrp_send_end_of_burst(usrp_state_t *s) { + // if last packet sent was end of burst no need to do anything. otherwise send end of burst packet + if (s->tx_md.end_of_burst) + return; + + s->tx_md.end_of_burst = true; + s->tx_md.start_of_burst = false; + s->tx_md.has_time_spec = false; + + int32_t dummy = 0; + std::vector<const void *> buffs; + for (size_t ch = 0; ch < s->tx_stream->get_num_channels(); ch++) + buffs.push_back(&dummy); // same buffer for each channel + + s->tx_stream->send(buffs, 0, s->tx_md); +} + static void trx_usrp_write_reset(openair0_thread_t *wt); /*! \brief Terminate operation of the USRP transceiver -- free all associated resources @@ -328,6 +345,7 @@ static void trx_usrp_end(openair0_device *device) { if (usrp_tx_thread != 0) trx_usrp_write_reset(&device->write_thread); + trx_usrp_send_end_of_burst(s); s->tx_stream->~tx_streamer(); s->rx_stream->~rx_streamer(); s->usrp->~multi_usrp();