diff options
author | Brent Stapleton <brent.stapleton@ettus.com> | 2019-01-18 09:45:34 -0800 |
---|---|---|
committer | Brent Stapleton <brent.stapleton@ettus.com> | 2019-01-18 17:51:35 -0800 |
commit | a53130679944ddd179593259eb953b89ab1a7a38 (patch) | |
tree | 5d8274750bed0b21aa133bc93d97d75bbce0ecd9 /host/lib/transport/super_send_packet_handler.hpp | |
parent | 2a44d6836ca08b6b67b83b63487b838e138ac379 (diff) | |
download | uhd-a53130679944ddd179593259eb953b89ab1a7a38.tar.gz uhd-a53130679944ddd179593259eb953b89ab1a7a38.tar.bz2 uhd-a53130679944ddd179593259eb953b89ab1a7a38.zip |
lib: transport: apply clang-format
This is a continuation of 967be2a4.
$ find host/lib/transport -iname *.hpp -o -iname *.cpp |\
xargs clang-format -i -style=file
Skipping host/lib/transport/nirio/ because of build errors.
$ git checkout host/lib/transport/nirio
Diffstat (limited to 'host/lib/transport/super_send_packet_handler.hpp')
-rw-r--r-- | host/lib/transport/super_send_packet_handler.hpp | 406 |
1 files changed, 220 insertions, 186 deletions
diff --git a/host/lib/transport/super_send_packet_handler.hpp b/host/lib/transport/super_send_packet_handler.hpp index b90ea8afd..af6ecaa5e 100644 --- a/host/lib/transport/super_send_packet_handler.hpp +++ b/host/lib/transport/super_send_packet_handler.hpp @@ -9,34 +9,32 @@ #define INCLUDED_LIBUHD_TRANSPORT_SUPER_SEND_PACKET_HANDLER_HPP #include <uhd/config.hpp> -#include <uhd/exception.hpp> #include <uhd/convert.hpp> +#include <uhd/exception.hpp> #include <uhd/stream.hpp> -#include <uhd/utils/tasks.hpp> -#include <uhd/utils/byteswap.hpp> -#include <uhd/utils/thread.hpp> -#include <uhd/types/metadata.hpp> #include <uhd/transport/vrt_if_packet.hpp> #include <uhd/transport/zero_copy.hpp> +#include <uhd/types/metadata.hpp> +#include <uhd/utils/byteswap.hpp> +#include <uhd/utils/tasks.hpp> +#include <uhd/utils/thread.hpp> #include <uhdlib/rfnoc/tx_stream_terminator.hpp> #include <boost/function.hpp> -#include <iostream> -#include <vector> #include <chrono> +#include <iostream> #include <thread> +#include <vector> #ifdef UHD_TXRX_DEBUG_PRINTS // Included for debugging -#include <boost/format.hpp> -#include <boost/thread/thread.hpp> -#include "boost/date_time/posix_time/posix_time.hpp" -#include <map> -#include <fstream> +# include "boost/date_time/posix_time/posix_time.hpp" +# include <boost/format.hpp> +# include <boost/thread/thread.hpp> +# include <fstream> +# include <map> #endif -namespace uhd { -namespace transport { -namespace sph { +namespace uhd { namespace transport { namespace sph { /*********************************************************************** * Super send packet handler @@ -45,52 +43,61 @@ namespace sph { * The channel group shares a common sample rate. * All channels are sent in unison in send(). **********************************************************************/ -class send_packet_handler{ +class send_packet_handler +{ public: typedef std::function<managed_send_buffer::sptr(double)> get_buff_type; typedef std::function<void(void)> post_send_cb_type; - typedef std::function<bool(uhd::async_metadata_t &, const double)> async_receiver_type; - typedef void(*vrt_packer_type)(uint32_t *, vrt::if_packet_info_t &); - //typedef std::function<void(uint32_t *, vrt::if_packet_info_t &)> vrt_packer_type; + typedef std::function<bool(uhd::async_metadata_t&, const double)> async_receiver_type; + typedef void (*vrt_packer_type)(uint32_t*, vrt::if_packet_info_t&); + // typedef std::function<void(uint32_t *, vrt::if_packet_info_t &)> vrt_packer_type; /*! * Make a new packet handler for send * \param size the number of transport channels */ - send_packet_handler(const size_t size = 1): - _next_packet_seq(0), _cached_metadata(false) + send_packet_handler(const size_t size = 1) + : _next_packet_seq(0), _cached_metadata(false) { this->set_enable_trailer(true); this->resize(size); } - ~send_packet_handler(void){ + ~send_packet_handler(void) + { /* NOP */ } //! Resize the number of transport channels - void resize(const size_t size){ - if (this->size() == size) return; + void resize(const size_t size) + { + if (this->size() == size) + return; _props.resize(size); static const uint64_t zero = 0; _zero_buffs.resize(size, &zero); } //! Get the channel width of this handler - size_t size(void) const{ + size_t size(void) const + { return _props.size(); } //! Setup the vrt packer function and offset - void set_vrt_packer(const vrt_packer_type &vrt_packer, const size_t header_offset_words32 = 0){ - _vrt_packer = vrt_packer; + void set_vrt_packer( + const vrt_packer_type& vrt_packer, const size_t header_offset_words32 = 0) + { + _vrt_packer = vrt_packer; _header_offset_words32 = header_offset_words32; } //! Set the stream ID for a specific channel (or no SID) - void set_xport_chan_sid(const size_t xport_chan, const bool has_sid, const uint32_t sid = 0){ + void set_xport_chan_sid( + const size_t xport_chan, const bool has_sid, const uint32_t sid = 0) + { _props.at(xport_chan).has_sid = has_sid; - _props.at(xport_chan).sid = sid; + _props.at(xport_chan).sid = sid; } void set_enable_trailer(const bool enable) @@ -99,12 +106,14 @@ public: } //! Set the rate of ticks per second - void set_tick_rate(const double rate){ + void set_tick_rate(const double rate) + { _tick_rate = rate; } //! Set the rate of samples per second - void set_samp_rate(const double rate){ + void set_samp_rate(const double rate) + { _samp_rate = rate; } @@ -113,7 +122,8 @@ public: * \param xport_chan which transport channel * \param get_buff the getter function */ - void set_xport_chan_get_buff(const size_t xport_chan, const get_buff_type &get_buff){ + void set_xport_chan_get_buff(const size_t xport_chan, const get_buff_type& get_buff) + { _props.at(xport_chan).get_buff = get_buff; } @@ -122,15 +132,17 @@ public: * \param xport_chan which transport channel * \param cb post-send callback */ - void set_xport_chan_post_send_cb(const size_t xport_chan, const post_send_cb_type &cb){ + void set_xport_chan_post_send_cb(const size_t xport_chan, const post_send_cb_type& cb) + { _props.at(xport_chan).go_postal = cb; } //! Set the conversion routine for all channels - void set_converter(const uhd::convert::id_type &id){ + void set_converter(const uhd::convert::id_type& id) + { _num_inputs = id.num_inputs; - _converter = uhd::convert::get_converter(id)(); - this->set_scale_factor(32767.); //update after setting converter + _converter = uhd::convert::get_converter(id)(); + this->set_scale_factor(32767.); // update after setting converter _bytes_per_otw_item = uhd::convert::get_bytes_per_item(id.output_format); _bytes_per_cpu_item = uhd::convert::get_bytes_per_item(id.input_format); } @@ -140,27 +152,29 @@ public: * Ex: A USRP1 in dual channel mode would be half. * \param num_samps the maximum samples in a packet */ - void set_max_samples_per_packet(const size_t num_samps){ + void set_max_samples_per_packet(const size_t num_samps) + { _max_samples_per_packet = num_samps; } //! Set the scale factor used in float conversion - void set_scale_factor(const double scale_factor){ + void set_scale_factor(const double scale_factor) + { _converter->set_scalar(scale_factor); } //! Set the callback to get async messages - void set_async_receiver(const async_receiver_type &async_receiver) + void set_async_receiver(const async_receiver_type& async_receiver) { _async_receiver = async_receiver; } //! Overload call to get async metadata - bool recv_async_msg( - uhd::async_metadata_t &async_metadata, double timeout = 0.1 - ){ - if (_async_receiver) return _async_receiver(async_metadata, timeout); - std::this_thread::sleep_for(std::chrono::microseconds(long(timeout*1e6))); + bool recv_async_msg(uhd::async_metadata_t& async_metadata, double timeout = 0.1) + { + if (_async_receiver) + return _async_receiver(async_metadata, timeout); + std::this_thread::sleep_for(std::chrono::microseconds(long(timeout * 1e6))); return false; } @@ -169,16 +183,15 @@ public: * The entry point for the fast-path send calls. * Dispatch into combinations of single packet send calls. ******************************************************************/ - UHD_INLINE size_t send( - const uhd::tx_streamer::buffs_type &buffs, + UHD_INLINE size_t send(const uhd::tx_streamer::buffs_type& buffs, const size_t nsamps_per_buff, - const uhd::tx_metadata_t &metadata, - const double timeout - ){ - //translate the metadata to vrt if packet info + const uhd::tx_metadata_t& metadata, + const double timeout) + { + // translate the metadata to vrt if packet info vrt::if_packet_info_t if_packet_info; if_packet_info.packet_type = vrt::if_packet_info_t::PACKET_TYPE_DATA; - //if_packet_info.has_sid = false; //set per channel + // if_packet_info.has_sid = false; //set per channel if_packet_info.has_cid = false; if_packet_info.has_tlr = _has_tlr; if_packet_info.has_tsi = false; @@ -186,99 +199,102 @@ public: if_packet_info.tsf = metadata.time_spec.to_ticks(_tick_rate); if_packet_info.sob = metadata.start_of_burst; if_packet_info.eob = metadata.end_of_burst; - if_packet_info.fc_ack = false; //This is a data packet + if_packet_info.fc_ack = false; // This is a data packet /* - * Metadata is cached when we get a send requesting a start of burst with no samples. - * It is applied here on the next call to send() that actually has samples to send. + * Metadata is cached when we get a send requesting a start of burst with no + * samples. It is applied here on the next call to send() that actually has + * samples to send. */ - if (_cached_metadata && nsamps_per_buff != 0) - { + if (_cached_metadata && nsamps_per_buff != 0) { // If the new metada has a time_spec, do not use the cached time_spec. - if (!metadata.has_time_spec) - { + if (!metadata.has_time_spec) { if_packet_info.has_tsf = _metadata_cache.has_time_spec; if_packet_info.tsf = _metadata_cache.time_spec.to_ticks(_tick_rate); } - if_packet_info.sob = _metadata_cache.start_of_burst; - if_packet_info.eob = _metadata_cache.end_of_burst; - _cached_metadata = false; + if_packet_info.sob = _metadata_cache.start_of_burst; + if_packet_info.eob = _metadata_cache.end_of_burst; + _cached_metadata = false; } - if (nsamps_per_buff <= _max_samples_per_packet){ - - //TODO remove this code when sample counts of zero are supported by hardware - #ifndef SSPH_DONT_PAD_TO_ONE - static const uint64_t zero = 0; - _zero_buffs.resize(buffs.size(), &zero); - - if (nsamps_per_buff == 0) - { - // if this is a start of a burst and there are no samples - if (metadata.start_of_burst) - { - // cache metadata and apply on the next send() - _metadata_cache = metadata; - _cached_metadata = true; - return 0; - } else { - // send requests with no samples are handled here (such as end of burst) - return send_one_packet(_zero_buffs, 1, if_packet_info, timeout) & 0x0; - } + if (nsamps_per_buff <= _max_samples_per_packet) { +// TODO remove this code when sample counts of zero are supported by hardware +#ifndef SSPH_DONT_PAD_TO_ONE + static const uint64_t zero = 0; + _zero_buffs.resize(buffs.size(), &zero); + + if (nsamps_per_buff == 0) { + // if this is a start of a burst and there are no samples + if (metadata.start_of_burst) { + // cache metadata and apply on the next send() + _metadata_cache = metadata; + _cached_metadata = true; + return 0; + } else { + // send requests with no samples are handled here (such as end of + // burst) + return send_one_packet(_zero_buffs, 1, if_packet_info, timeout) & 0x0; } - #endif + } +#endif - size_t nsamps_sent = send_one_packet(buffs, nsamps_per_buff, if_packet_info, timeout); + size_t nsamps_sent = + send_one_packet(buffs, nsamps_per_buff, if_packet_info, timeout); #ifdef UHD_TXRX_DEBUG_PRINTS - dbg_print_send(nsamps_per_buff, nsamps_sent, metadata, timeout); + dbg_print_send(nsamps_per_buff, nsamps_sent, metadata, timeout); #endif - return nsamps_sent; } + return nsamps_sent; + } size_t total_num_samps_sent = 0; - //false until final fragment + // false until final fragment if_packet_info.eob = false; - const size_t num_fragments = (nsamps_per_buff-1)/_max_samples_per_packet; - const size_t final_length = ((nsamps_per_buff-1)%_max_samples_per_packet)+1; - - //loop through the following fragment indexes - for (size_t i = 0; i < num_fragments; i++){ - - //send a fragment with the helper function - const size_t num_samps_sent = send_one_packet( - buffs, _max_samples_per_packet, - if_packet_info, timeout, - total_num_samps_sent*_bytes_per_cpu_item - ); + const size_t num_fragments = (nsamps_per_buff - 1) / _max_samples_per_packet; + const size_t final_length = ((nsamps_per_buff - 1) % _max_samples_per_packet) + 1; + + // loop through the following fragment indexes + for (size_t i = 0; i < num_fragments; i++) { + // send a fragment with the helper function + const size_t num_samps_sent = send_one_packet(buffs, + _max_samples_per_packet, + if_packet_info, + timeout, + total_num_samps_sent * _bytes_per_cpu_item); total_num_samps_sent += num_samps_sent; - if (num_samps_sent == 0) return total_num_samps_sent; + if (num_samps_sent == 0) + return total_num_samps_sent; - //setup metadata for the next fragment - const time_spec_t time_spec = metadata.time_spec + time_spec_t::from_ticks(total_num_samps_sent, _samp_rate); + // setup metadata for the next fragment + const time_spec_t time_spec = + metadata.time_spec + + time_spec_t::from_ticks(total_num_samps_sent, _samp_rate); if_packet_info.tsf = time_spec.to_ticks(_tick_rate); if_packet_info.sob = false; - } - //send the final fragment with the helper function + // send the final fragment with the helper function if_packet_info.eob = metadata.end_of_burst; - size_t nsamps_sent = total_num_samps_sent - + send_one_packet(buffs, final_length, if_packet_info, timeout, - total_num_samps_sent * _bytes_per_cpu_item); + size_t nsamps_sent = total_num_samps_sent + + send_one_packet(buffs, + final_length, + if_packet_info, + timeout, + total_num_samps_sent * _bytes_per_cpu_item); #ifdef UHD_TXRX_DEBUG_PRINTS - dbg_print_send(nsamps_per_buff, nsamps_sent, metadata, timeout); + dbg_print_send(nsamps_per_buff, nsamps_sent, metadata, timeout); #endif - return nsamps_sent; + return nsamps_sent; } private: - vrt_packer_type _vrt_packer; size_t _header_offset_words32; double _tick_rate, _samp_rate; - struct xport_chan_props_type{ - xport_chan_props_type(void):has_sid(false),sid(0){} + struct xport_chan_props_type + { + xport_chan_props_type(void) : has_sid(false), sid(0) {} get_buff_type get_buff; post_send_cb_type go_postal; bool has_sid; @@ -287,11 +303,11 @@ private: }; std::vector<xport_chan_props_type> _props; size_t _num_inputs; - size_t _bytes_per_otw_item; //used in conversion - size_t _bytes_per_cpu_item; //used in conversion - uhd::convert::converter::sptr _converter; //used in conversion + size_t _bytes_per_otw_item; // used in conversion + size_t _bytes_per_cpu_item; // used in conversion + uhd::convert::converter::sptr _converter; // used in conversion size_t _max_samples_per_packet; - std::vector<const void *> _zero_buffs; + std::vector<const void*> _zero_buffs; size_t _next_packet_seq; bool _has_tlr; async_receiver_type _async_receiver; @@ -299,10 +315,22 @@ private: uhd::tx_metadata_t _metadata_cache; #ifdef UHD_TXRX_DEBUG_PRINTS - struct dbg_send_stat_t { - dbg_send_stat_t(long wc, size_t nspb, size_t nss, uhd::tx_metadata_t md, double to, double rate): - wallclock(wc), nsamps_per_buff(nspb), nsamps_sent(nss), metadata(md), timeout(to), samp_rate(rate) - {} + struct dbg_send_stat_t + { + dbg_send_stat_t(long wc, + size_t nspb, + size_t nss, + uhd::tx_metadata_t md, + double to, + double rate) + : wallclock(wc) + , nsamps_per_buff(nspb) + , nsamps_sent(nss) + , metadata(md) + , timeout(to) + , samp_rate(rate) + { + } long wallclock; size_t nsamps_per_buff; size_t nsamps_sent; @@ -310,32 +338,37 @@ private: double timeout; double samp_rate; // Create a formatted print line for all the info gathered in this struct. - std::string print_line() { + std::string print_line() + { boost::format fmt("send,%ld,%f,%i,%i,%s,%s,%s,%ld"); fmt % wallclock; - fmt % timeout % (int)nsamps_per_buff % (int) nsamps_sent; - fmt % (metadata.start_of_burst ? "true":"false") % (metadata.end_of_burst ? "true":"false"); - fmt % (metadata.has_time_spec ? "true":"false") % metadata.time_spec.to_ticks(samp_rate); + fmt % timeout % (int)nsamps_per_buff % (int)nsamps_sent; + fmt % (metadata.start_of_burst ? "true" : "false") + % (metadata.end_of_burst ? "true" : "false"); + fmt % (metadata.has_time_spec ? "true" : "false") + % metadata.time_spec.to_ticks(samp_rate); return fmt.str(); } }; - void dbg_print_send(size_t nsamps_per_buff, size_t nsamps_sent, - const uhd::tx_metadata_t &metadata, const double timeout, - bool dbg_print_directly = true) + void dbg_print_send(size_t nsamps_per_buff, + size_t nsamps_sent, + const uhd::tx_metadata_t& metadata, + const double timeout, + bool dbg_print_directly = true) { dbg_send_stat_t data(boost::get_system_time().time_of_day().total_microseconds(), nsamps_per_buff, nsamps_sent, metadata, timeout, - _samp_rate - ); - if(dbg_print_directly){ + _samp_rate); + if (dbg_print_directly) { dbg_print_err(data.print_line()); } } - void dbg_print_err(std::string msg) { + void dbg_print_err(std::string msg) + { msg = "super_send_packet_handler," + msg; fprintf(stderr, "%s\n", msg.c_str()); } @@ -346,37 +379,39 @@ private: /******************************************************************* * Send a single packet: ******************************************************************/ - UHD_INLINE size_t send_one_packet( - const uhd::tx_streamer::buffs_type &buffs, + UHD_INLINE size_t send_one_packet(const uhd::tx_streamer::buffs_type& buffs, const size_t nsamps_per_buff, - vrt::if_packet_info_t &if_packet_info, + vrt::if_packet_info_t& if_packet_info, const double timeout, - const size_t buffer_offset_bytes = 0 - ){ - - //load the rest of the if_packet_info in here - if_packet_info.num_payload_bytes = nsamps_per_buff*_num_inputs*_bytes_per_otw_item; - if_packet_info.num_payload_words32 = (if_packet_info.num_payload_bytes + 3/*round up*/)/sizeof(uint32_t); + const size_t buffer_offset_bytes = 0) + { + // load the rest of the if_packet_info in here + if_packet_info.num_payload_bytes = + nsamps_per_buff * _num_inputs * _bytes_per_otw_item; + if_packet_info.num_payload_words32 = + (if_packet_info.num_payload_bytes + 3 /*round up*/) / sizeof(uint32_t); if_packet_info.packet_count = _next_packet_seq; - //get a buffer for each channel or timeout - BOOST_FOREACH(xport_chan_props_type &props, _props){ - if (not props.buff) props.buff = props.get_buff(timeout); - if (not props.buff) return 0; //timeout + // get a buffer for each channel or timeout + BOOST_FOREACH (xport_chan_props_type& props, _props) { + if (not props.buff) + props.buff = props.get_buff(timeout); + if (not props.buff) + return 0; // timeout } - //setup the data to share with converter threads - _convert_nsamps = nsamps_per_buff; - _convert_buffs = &buffs; + // setup the data to share with converter threads + _convert_nsamps = nsamps_per_buff; + _convert_buffs = &buffs; _convert_buffer_offset_bytes = buffer_offset_bytes; - _convert_if_packet_info = &if_packet_info; + _convert_if_packet_info = &if_packet_info; - //perform N channels of conversion + // perform N channels of conversion for (size_t i = 0; i < this->size(); i++) { convert_to_in_buff(i); } - _next_packet_seq++; //increment sequence after commits + _next_packet_seq++; // increment sequence after commits return nsamps_per_buff; } @@ -389,75 +424,76 @@ private: */ UHD_INLINE void convert_to_in_buff(const size_t index) { - //shortcut references to local data structures - managed_send_buffer::sptr &buff = _props[index].buff; + // shortcut references to local data structures + managed_send_buffer::sptr& buff = _props[index].buff; vrt::if_packet_info_t if_packet_info = *_convert_if_packet_info; - const tx_streamer::buffs_type &buffs = *_convert_buffs; + const tx_streamer::buffs_type& buffs = *_convert_buffs; - //fill IO buffs with pointers into the output buffer - const void *io_buffs[4/*max interleave*/]; - for (size_t i = 0; i < _num_inputs; i++){ - const char *b = reinterpret_cast<const char *>(buffs[index*_num_inputs + i]); - io_buffs[i] = b + _convert_buffer_offset_bytes; + // fill IO buffs with pointers into the output buffer + const void* io_buffs[4 /*max interleave*/]; + for (size_t i = 0; i < _num_inputs; i++) { + const char* b = reinterpret_cast<const char*>(buffs[index * _num_inputs + i]); + io_buffs[i] = b + _convert_buffer_offset_bytes; } - const ref_vector<const void *> in_buffs(io_buffs, _num_inputs); + const ref_vector<const void*> in_buffs(io_buffs, _num_inputs); - //pack metadata into a vrt header - uint32_t *otw_mem = buff->cast<uint32_t *>() + _header_offset_words32; + // pack metadata into a vrt header + uint32_t* otw_mem = buff->cast<uint32_t*>() + _header_offset_words32; if_packet_info.has_sid = _props[index].has_sid; - if_packet_info.sid = _props[index].sid; + if_packet_info.sid = _props[index].sid; _vrt_packer(otw_mem, if_packet_info); otw_mem += if_packet_info.num_header_words32; - //perform the conversion operation + // perform the conversion operation _converter->conv(in_buffs, otw_mem, _convert_nsamps); - //commit the samples to the zero-copy interface - const size_t num_vita_words32 = _header_offset_words32+if_packet_info.num_packet_words32; - buff->commit(num_vita_words32*sizeof(uint32_t)); - buff.reset(); //effectively a release + // commit the samples to the zero-copy interface + const size_t num_vita_words32 = + _header_offset_words32 + if_packet_info.num_packet_words32; + buff->commit(num_vita_words32 * sizeof(uint32_t)); + buff.reset(); // effectively a release - if (_props[index].go_postal) - { + if (_props[index].go_postal) { _props[index].go_postal(); } } //! Shared variables for the worker threads size_t _convert_nsamps; - const tx_streamer::buffs_type *_convert_buffs; + const tx_streamer::buffs_type* _convert_buffs; size_t _convert_buffer_offset_bytes; - vrt::if_packet_info_t *_convert_if_packet_info; - + vrt::if_packet_info_t* _convert_if_packet_info; }; -class send_packet_streamer : public send_packet_handler, public tx_streamer{ +class send_packet_streamer : public send_packet_handler, public tx_streamer +{ public: - send_packet_streamer(const size_t max_num_samps){ + send_packet_streamer(const size_t max_num_samps) + { _max_num_samps = max_num_samps; this->set_max_samples_per_packet(_max_num_samps); } - size_t get_num_channels(void) const{ + size_t get_num_channels(void) const + { return this->size(); } - size_t get_max_num_samps(void) const{ + size_t get_max_num_samps(void) const + { return _max_num_samps; } - size_t send( - const tx_streamer::buffs_type &buffs, + size_t send(const tx_streamer::buffs_type& buffs, const size_t nsamps_per_buff, - const uhd::tx_metadata_t &metadata, - const double timeout - ){ + const uhd::tx_metadata_t& metadata, + const double timeout) + { return send_packet_handler::send(buffs, nsamps_per_buff, metadata, timeout); } - bool recv_async_msg( - uhd::async_metadata_t &async_metadata, double timeout = 0.1 - ){ + bool recv_async_msg(uhd::async_metadata_t& async_metadata, double timeout = 0.1) + { return send_packet_handler::recv_async_msg(async_metadata, timeout); } @@ -465,8 +501,6 @@ private: size_t _max_num_samps; }; -} // namespace sph -} // namespace transport -} // namespace uhd +}}} // namespace uhd::transport::sph #endif /* INCLUDED_LIBUHD_TRANSPORT_SUPER_SEND_PACKET_HANDLER_HPP */ |