diff options
author | Tim O'Shea <tim.oshea753@gmail.com> | 2013-11-26 14:18:59 -0500 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2013-11-27 17:28:45 -0500 |
commit | 04cfc9f425bf65fb8da21c95709c4846114f627a (patch) | |
tree | be8dcb44759bd21b81d92733435244378c58fb99 /gr-blocks/lib | |
parent | f863f08c747d10feb2cee0ab4088da851d2e51b7 (diff) |
blocks: throttle block now looks for rx_rate tag and updates the throttle rate accordingly. A new block parameter can tell the block to ignore these tags; set to True by default.
Diffstat (limited to 'gr-blocks/lib')
-rw-r--r-- | gr-blocks/lib/throttle_impl.cc | 26 | ||||
-rw-r--r-- | gr-blocks/lib/throttle_impl.h | 3 |
2 files changed, 24 insertions, 5 deletions
diff --git a/gr-blocks/lib/throttle_impl.cc b/gr-blocks/lib/throttle_impl.cc index 42f3665c86..f46decee11 100644 --- a/gr-blocks/lib/throttle_impl.cc +++ b/gr-blocks/lib/throttle_impl.cc @@ -29,22 +29,26 @@ #include <cstring> #include <boost/thread/thread.hpp> +pmt::pmt_t throttle_rx_rate_pmt(pmt::intern("rx_rate")); + namespace gr { namespace blocks { throttle::sptr - throttle::make(size_t itemsize, double samples_per_sec) + throttle::make(size_t itemsize, double samples_per_sec, bool ignore_tags) { return gnuradio::get_initial_sptr - (new throttle_impl(itemsize, samples_per_sec)); + (new throttle_impl(itemsize, samples_per_sec, ignore_tags)); } throttle_impl::throttle_impl(size_t itemsize, - double samples_per_second) + double samples_per_second, + bool ignore_tags) : sync_block("throttle", io_signature::make(1, 1, itemsize), io_signature::make(1, 1, itemsize)), - d_itemsize(itemsize) + d_itemsize(itemsize), + d_ignore_tags(ignore_tags) { set_sample_rate(samples_per_second); } @@ -74,6 +78,20 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + // check for updated rx_rate tag + if(!d_ignore_tags){ + uint64_t abs_N = nitems_read(0); + std::vector<tag_t> all_tags; + get_tags_in_range(all_tags, 0, abs_N, abs_N + noutput_items); + std::vector<tag_t>::iterator itr; + for(itr = all_tags.begin(); itr != all_tags.end(); itr++) { + if(pmt::eq( (*itr).key, throttle_rx_rate_pmt)){ + double new_rate = pmt::to_double( (*itr).value ); + set_sample_rate(new_rate); + } + } + } + //calculate the expected number of samples to have passed through boost::system_time now = boost::get_system_time(); boost::int64_t ticks = (now - d_start).ticks(); diff --git a/gr-blocks/lib/throttle_impl.h b/gr-blocks/lib/throttle_impl.h index 797cb7d942..c5e43d7564 100644 --- a/gr-blocks/lib/throttle_impl.h +++ b/gr-blocks/lib/throttle_impl.h @@ -35,9 +35,10 @@ namespace gr { size_t d_itemsize; uint64_t d_total_samples; double d_samps_per_tick, d_samps_per_us; + bool d_ignore_tags; public: - throttle_impl(size_t itemsize, double samples_per_sec); + throttle_impl(size_t itemsize, double samples_per_sec, bool ignore_tags=true); ~throttle_impl(); void setup_rpc(); |