summaryrefslogtreecommitdiff
path: root/gr-blocks/lib
diff options
context:
space:
mode:
authorTim O'Shea <tim.oshea753@gmail.com>2013-11-26 14:18:59 -0500
committerTom Rondeau <tom@trondeau.com>2013-11-27 17:28:45 -0500
commit04cfc9f425bf65fb8da21c95709c4846114f627a (patch)
treebe8dcb44759bd21b81d92733435244378c58fb99 /gr-blocks/lib
parentf863f08c747d10feb2cee0ab4088da851d2e51b7 (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.cc26
-rw-r--r--gr-blocks/lib/throttle_impl.h3
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();