diff options
| author | michael-west <michael.west@ettus.com> | 2016-08-02 14:23:06 -0700 | 
|---|---|---|
| committer | Martin Braun <martin.braun@ettus.com> | 2016-08-02 17:35:48 -0700 | 
| commit | 7dd34d09d96652a5040e14dae43b150ba302f740 (patch) | |
| tree | ab81ea7ad07de9d87046fc7512831237c4c74c1a /host | |
| parent | a3454891c90dcd7333fff446b8494b7a0f79c10c (diff) | |
| download | uhd-7dd34d09d96652a5040e14dae43b150ba302f740.tar.gz uhd-7dd34d09d96652a5040e14dae43b150ba302f740.tar.bz2 uhd-7dd34d09d96652a5040e14dae43b150ba302f740.zip | |
examples: tx_bursts fixes
- Wait for ACKs for all channels
- Put EOB on last data packet instead of empty packet
- Exit with failure when send times out and SIGINT has been received
Diffstat (limited to 'host')
| -rw-r--r-- | host/examples/tx_bursts.cpp | 40 | 
1 files changed, 29 insertions, 11 deletions
| diff --git a/host/examples/tx_bursts.cpp b/host/examples/tx_bursts.cpp index bb71d4581..5ee00d5cd 100644 --- a/host/examples/tx_bursts.cpp +++ b/host/examples/tx_bursts.cpp @@ -142,7 +142,13 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){          size_t num_acc_samps = 0; //number of accumulated samples          while(num_acc_samps < total_num_samps){ -            size_t samps_to_send = std::min(total_num_samps - num_acc_samps, spb); +            size_t samps_to_send = total_num_samps - num_acc_samps; +            if (samps_to_send > spb) +            { +                samps_to_send = spb; +            } else { +                md.end_of_burst = true; +            }              //send a single packet              size_t num_tx_samps = tx_stream->send( @@ -152,25 +158,37 @@ int UHD_SAFE_MAIN(int argc, char *argv[]){              md.has_time_spec = false;              md.start_of_burst = false; -            if (num_tx_samps < samps_to_send) std::cerr << "Send timeout..." << std::endl; -            if(verbose) std::cout << boost::format("Sent packet: %u samples") % num_tx_samps << std::endl; +            if (num_tx_samps < samps_to_send) +            { +                std::cerr << "Send timeout..." << std::endl; +                if (stop_signal_called) +                { +                    exit(EXIT_FAILURE); +                } +            } + +            if(verbose) +            { +                std::cout << boost::format("Sent packet: %u samples") % num_tx_samps << std::endl; +            }              num_acc_samps += num_tx_samps;          } -        md.end_of_burst = true; -        tx_stream->send(buffs, 0, md, timeout); -          time_to_send += rep_rate;          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, seconds_in_future)){ -            got_async_burst_ack = (async_md.event_code == uhd::async_metadata_t::EVENT_CODE_BURST_ACK); +        size_t acks = 0; +        //loop through all messages for the ACK packets (may have underflow messages in queue) +        while (acks < channel_nums.size() and tx_stream->recv_async_msg(async_md, seconds_in_future)) +        { +            if (async_md.event_code == uhd::async_metadata_t::EVENT_CODE_BURST_ACK) +            { +                acks++; +            }          } -        std::cout << (got_async_burst_ack? "success" : "fail") << std::endl; +        std::cout << (acks == channel_nums.size() ? "success" : "fail") << std::endl;      } while (not stop_signal_called and repeat);      //finished | 
