Hi,
Which version of UHD?  Also, what if you have Rx on continuously and
schedule Tx but make Tx completely independent of Rx such that Tx is just
sending a dummy buffer?  Does this still produce L?
Rob

On Tue, Jul 13, 2021 at 3:54 PM <sunny04...@gmail.com> wrote:

> Hi all,
>
> I am using x310 to continuously receive  on RF A RX2, process the data,
> and schedule a transmit periodically on RF B TX.  The issue I am running
> into is when the RX is in STREAM_MODE_START_CONTINUOUS, and TX is scheduled
> to send at a specific time in the future a set number of samples, I get a
> lot of LLLLs. I understand L is a late packet, but I get the same LLLs even
> if I add more time to the tx schedule.
>
> After I confirm the specified number of samples are sent, I set
> md.end_of_burst = true and call tx_stream->send("", 0, md). And, this when
> I see the LLLLs. I used the rec_sysnc_msg and found out the LLLs are
> printed while it is waiting for EVENT_CODE_BURST_ACK.
>
> Waiting for async burst ACK... LLLLLLLLLLLLLLLLsuccess
> Waiting for async burst ACK... LLLLLLLLLLLLLLLLsuccess
>
> I don't see this issue if RX is also scheduled or if I turn off the RX and
> send data from a buffer. Below is part of the code that handles the tx
> schedule and send. Any help would be greatly appreciated.
>
> uhd::tx_metadata_t md;
> md.start_of_burst = false;
> md.end_of_burst = false;
> md.has_time_spec = true;
> md.time_spec = uhd::time_spec_t(tx_send_time)
> tx_timeout = 2.0
>
> while (mainloop)
> {
>     //**
>     **//
>     while (num_tx_samps < tx_buff_size)
>     {
>         num_tx_samps = tx_stream->send(&txBuff[tx_buff_index],
> tx_buff_size, md, tx_timeout);
>         if (num_tx_samps < tx_buff_size)
>         {
>             std::cout << "  TX number of sample error: " << std::endl;
>             tx_buff_size -= num_tx_samps;
>             tx_buff_index += num_tx_samps;
>             num_tx_samps = 0;
>         }
>
>         md.has_time_spec = false;
>         md.start_of_burst = false;
>         md.end_of_burst = false;
>     }
>
>     // send a mini EOB packet
>     md.end_of_burst = true;
>     tx_stream->send("", 0, md);
>
>     std::cout << std::endl
>               << "Waiting for async burst ACK... " << std::flush;
>     uhd::async_metadata_t async_md;
>     bool got_async_burst_ack = false;
>     // loop through all messages for the ACK packet (may have underflow
> messages in queue)
>     while (not got_async_burst_ack and tx_stream->recv_async_msg(async_md,
> tx_timeout))
>     {
>         got_async_burst_ack =
>             (async_md.event_code ==
> uhd::async_metadata_t::EVENT_CODE_BURST_ACK);
>     }
>     std::cout << (got_async_burst_ack ? "success" : "fail") << std::endl;
>
>     //schedule the next tx
>     md.has_time_spec = true;
>     md.start_of_burst = false;
>     md.end_of_burst = false;
>     tx_time_spec += tx_time_interval;
>     md.time_spec = uhd::time_spec_t(tx_time_spec);
>     //**
>     **//
> }
>
> Thanks!
> _______________________________________________
> USRP-users mailing list -- usrp-users@lists.ettus.com
> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to