diff options
author | Josh Blum <josh@joshknows.com> | 2011-03-11 20:45:45 -0800 |
---|---|---|
committer | Josh Blum <josh@joshknows.com> | 2011-03-11 20:45:45 -0800 |
commit | 93aae6f5f4771eff2e2246e48ac37df0a8e74d30 (patch) | |
tree | 467b833ead4cb2bca945d2c5d75a50508cefd57e | |
parent | f7687f06cf3005bd8c4f66d0708b24738ec34d1d (diff) | |
download | uhd-93aae6f5f4771eff2e2246e48ac37df0a8e74d30.tar.gz uhd-93aae6f5f4771eff2e2246e48ac37df0a8e74d30.tar.bz2 uhd-93aae6f5f4771eff2e2246e48ac37df0a8e74d30.zip |
usrp2: also store expected_time in-between states
-rw-r--r-- | host/lib/usrp/usrp2/io_impl.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/host/lib/usrp/usrp2/io_impl.cpp b/host/lib/usrp/usrp2/io_impl.cpp index 1fa5708be..340e9d155 100644 --- a/host/lib/usrp/usrp2/io_impl.cpp +++ b/host/lib/usrp/usrp2/io_impl.cpp @@ -183,6 +183,7 @@ struct usrp2_impl::io_impl{ } alignment_indexes indexes_to_do; //used in alignment logic + time_spec_t expected_time; //used in alignment logic bool get_recv_buffs(vrt_packet_handler::managed_recv_buffs_t &buffs); std::vector<zero_copy_if::sptr> &dsp_xports; @@ -430,21 +431,20 @@ UHD_INLINE bool usrp2_impl::io_impl::get_recv_buffs( boost::system_time exit_time = boost::get_system_time() + to_time_dur(recv_timeout); managed_recv_buffer::sptr buff_tmp; bool clear, msg; - time_spec_t expected_time; + size_t index; //If we did not enter this routine with an empty indexes set, //jump to after the clear so we can preserve the previous state. //This saves buffers from being lost when using non-blocking recv. - if (not indexes_to_do.empty()) goto skip_reset; + if (not indexes_to_do.empty()) goto skip_pop_initial; //respond to a clear by starting from scratch got_clear: indexes_to_do.reset(buffs.size()); - skip_reset: clear = false; //do an initial pop to load an initial sequence id - size_t index = indexes_to_do.front(); + index = indexes_to_do.front(); buff_tmp = dsp_xports[recv_map[index]]->get_recv_buff(from_time_dur(exit_time - boost::get_system_time())); if (buff_tmp.get() == NULL) return false; extract_packet_info(buff_tmp, this->prev_infos[recv_map[index]], expected_time, clear, msg); @@ -452,6 +452,7 @@ UHD_INLINE bool usrp2_impl::io_impl::get_recv_buffs( buffs[index] = buff_tmp; if (msg) return handle_msg_packet(buffs, index); indexes_to_do.remove(index); + skip_pop_initial: //get an aligned set of elements from the buffers: while(not indexes_to_do.empty()){ |