discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Waiting for async burst ACK... LLLLLLLLLLLLLLLLsuccess


From: Sunny Sam
Subject: Waiting for async burst ACK... LLLLLLLLLLLLLLLLsuccess
Date: Fri, 9 Jul 2021 15:23:16 -0400

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. Any help would be greatly appreciated. Below is part of the code that handles the tx schedule and send. 

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!


reply via email to

[Prev in Thread] Current Thread [Next in Thread]