diff options
author | Bill Clark <saikou@vt.edu> | 2015-03-31 21:28:30 -0400 |
---|---|---|
committer | Bill Clark <saikou@vt.edu> | 2015-03-31 21:28:30 -0400 |
commit | 34275a2c3e18c5738ccf02f4c3119efdacd00ae8 (patch) | |
tree | 934bddea2fdc7820f67a8a030dd1bda701d20636 | |
parent | 266557129cefa2d9144ae0db554ca4ac76ae974f (diff) |
gnuradio-runtime: added the individual port assignments to the hier_block2 max/min_output_buffer size; if output ports have different size assignments only the block directly connected to the output port is changed otherwise every block within the hier is set to that output buffer size; therefore single output hier blocks will always set every block within to the output buffer size
-rw-r--r-- | gnuradio-runtime/include/gnuradio/hier_block2.h | 10 | ||||
-rw-r--r-- | gnuradio-runtime/lib/hier_block2.cc | 18 | ||||
-rw-r--r-- | gnuradio-runtime/lib/hier_block2_detail.cc | 35 | ||||
-rw-r--r-- | gnuradio-runtime/swig/hier_block2.i | 2 |
4 files changed, 65 insertions, 0 deletions
diff --git a/gnuradio-runtime/include/gnuradio/hier_block2.h b/gnuradio-runtime/include/gnuradio/hier_block2.h index e547d2f30f..9a3f113a50 100644 --- a/gnuradio-runtime/include/gnuradio/hier_block2.h +++ b/gnuradio-runtime/include/gnuradio/hier_block2.h @@ -185,6 +185,11 @@ namespace gr { void set_max_output_buffer(long max_output_buffer); /*! + * \brief Sets max buffer size on output port \p port. + */ + void set_max_output_buffer(int port, long max_output_buffer); + + /*! * \brief Returns min buffer size on output port \p i. */ long min_output_buffer(size_t i=0); @@ -194,6 +199,11 @@ namespace gr { */ void set_min_output_buffer(long min_output_buffer); + /*! + * \brief Sets min buffer size on output port \p port. + */ + void set_min_output_buffer(int port, long min_output_buffer); + // This is a public method for ease of code organization, but should be // ignored by the user. diff --git a/gnuradio-runtime/lib/hier_block2.cc b/gnuradio-runtime/lib/hier_block2.cc index 5793e1c7e7..130b2a11d4 100644 --- a/gnuradio-runtime/lib/hier_block2.cc +++ b/gnuradio-runtime/lib/hier_block2.cc @@ -203,6 +203,15 @@ namespace gr { d_max_output_buffer[idx] = max_output_buffer; } } + + void + hier_block2::set_max_output_buffer(int port, long max_output_buffer) + { + if((size_t)port >= d_max_output_buffer.size()) + throw std::invalid_argument("hier_block2::max_output_buffer: port out of range."); + else + d_max_output_buffer[port] = max_output_buffer; + } long hier_block2::min_output_buffer(size_t i=0) @@ -223,6 +232,15 @@ namespace gr { d_min_output_buffer[idx] = min_output_buffer; } } + + void + hier_block2::set_min_output_buffer(int port, long min_output_buffer) + { + if((size_t)port >= d_min_output_buffer.size()) + throw std::invalid_argument("hier_block2::min_output_buffer: port out of range."); + else + d_min_output_buffer[port] = min_output_buffer; + } bool hier_block2::set_all_min_output_buffer(void) diff --git a/gnuradio-runtime/lib/hier_block2_detail.cc b/gnuradio-runtime/lib/hier_block2_detail.cc index 7210dca7cf..249fccf304 100644 --- a/gnuradio-runtime/lib/hier_block2_detail.cc +++ b/gnuradio-runtime/lib/hier_block2_detail.cc @@ -685,6 +685,41 @@ namespace gr { << " is not connected internally"; throw std::runtime_error(msg.str()); } + // TODO: Update buffers of just these output blocks + if(!set_all_min_buff){ + min_buff = d_owner->min_output_buffer(i); + if(min_buff != -1){ + block_sptr bb = boost::dynamic_pointer_cast<block>(blk); + if(bb != 0){ + int bb_src_port = d_outputs[i].port(); + bb->set_min_output_buffer(bb_src_port, min_buff); + } + else{ + hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(blk); + if(hh != 0){ + int hh_src_port = d_outputs[i].port(); + hh->set_min_output_buffer(hh_src_port, min_buff); + } + } + } + } + if(!set_all_max_buff){ + max_buff = d_owner->max_output_buffer(i); + if(max_buff != -1){ + block_sptr bb = boost::dynamic_pointer_cast<block>(blk); + if(bb != 0){ + int bb_src_port = d_outputs[i].port(); + bb->set_max_output_buffer(bb_src_port, max_buff); + } + else{ + hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(blk); + if(hh != 0){ + int hh_src_port = d_outputs[i].port(); + hh->set_max_output_buffer(hh_src_port, max_buff); + } + } + } + } tmp.push_back(blk); } sort(tmp.begin(), tmp.end()); diff --git a/gnuradio-runtime/swig/hier_block2.i b/gnuradio-runtime/swig/hier_block2.i index fbe44dceb3..d2a33b482c 100644 --- a/gnuradio-runtime/swig/hier_block2.i +++ b/gnuradio-runtime/swig/hier_block2.i @@ -94,8 +94,10 @@ namespace gr { // Methods to manage block's min/max buffer sizes. long max_output_buffer(int i); void set_max_output_buffer(long max_output_buffer); + void set_max_output_buffer(int port, long max_output_buffer); long min_output_buffer(int i); void set_min_output_buffer(long min_output_buffer); + void set_min_output_buffer(int port, long min_output_buffer); gr::hier_block2_sptr to_hier_block2(); // Needed for Python type coercion }; |