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