diff options
author | Tom Rondeau <tom@trondeau.com> | 2015-02-13 16:14:19 -0500 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2015-02-13 16:15:35 -0500 |
commit | bab014a9f47f1d64f47317cec683a10c02ffa462 (patch) | |
tree | de1ccea23f63d278e82d0aa4fb56441f0bd38062 | |
parent | c990e8256dd580a72b28d138c030a112a33157f7 (diff) |
runtime: added accessor to get base address of buffer. Addresses Issue #729.
Reintroduced qa_gr_block and added t2 tests to get input/output buffer size and base.
Need to include buffer.h, block.h, and block_detail.h when calling these in a block's work function.
-rw-r--r-- | gnuradio-runtime/include/gnuradio/block.h | 2 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/buffer.h | 5 | ||||
-rw-r--r-- | gr-blocks/lib/qa_blocks.cc | 2 | ||||
-rw-r--r-- | gr-blocks/lib/qa_gr_block.cc | 47 | ||||
-rw-r--r-- | gr-blocks/lib/qa_gr_block.h | 4 |
5 files changed, 46 insertions, 14 deletions
diff --git a/gnuradio-runtime/include/gnuradio/block.h b/gnuradio-runtime/include/gnuradio/block.h index 4a534b7f46..264ef9bd44 100644 --- a/gnuradio-runtime/include/gnuradio/block.h +++ b/gnuradio-runtime/include/gnuradio/block.h @@ -221,7 +221,7 @@ namespace gr { /*! * \brief Tell the scheduler \p how_many_items of input stream \p - * which_input were consumed. + * which_input were consumed. * This function should be called at the end of work() or general_work(), after all processing is finished. */ void consume(int which_input, int how_many_items); diff --git a/gnuradio-runtime/include/gnuradio/buffer.h b/gnuradio-runtime/include/gnuradio/buffer.h index c0c9f3d39d..44d5235652 100644 --- a/gnuradio-runtime/include/gnuradio/buffer.h +++ b/gnuradio-runtime/include/gnuradio/buffer.h @@ -68,6 +68,11 @@ namespace gr { int bufsize() const { return d_bufsize; } /*! + * \brief return the base address of the buffer + */ + char* base() const { return d_base; } + + /*! * \brief return pointer to write buffer. * * The return value points at space that can hold at least diff --git a/gr-blocks/lib/qa_blocks.cc b/gr-blocks/lib/qa_blocks.cc index 149ef7aa7c..b28ab5a57d 100644 --- a/gr-blocks/lib/qa_blocks.cc +++ b/gr-blocks/lib/qa_blocks.cc @@ -28,6 +28,7 @@ #include <qa_blocks.h> #include <qa_block_tags.h> #include <qa_rotator.h> +#include <qa_gr_block.h> CppUnit::TestSuite * qa_blocks::suite() @@ -36,6 +37,7 @@ qa_blocks::suite() s->addTest(qa_block_tags::suite()); s->addTest(qa_rotator::suite()); + s->addTest(qa_gr_block::suite()); return s; } diff --git a/gr-blocks/lib/qa_gr_block.cc b/gr-blocks/lib/qa_gr_block.cc index 5df1b217d4..48683ddbc1 100644 --- a/gr-blocks/lib/qa_gr_block.cc +++ b/gr-blocks/lib/qa_gr_block.cc @@ -30,19 +30,18 @@ #include <gnuradio/blocks/null_sink.h> #include <gnuradio/blocks/null_source.h> - // ---------------------------------------------------------------- void -qa_block::t0 () +qa_gr_block::t0 () { // test creation of sources gr::block_sptr src1(gr::blocks::null_source::make(sizeof (int))); CPPUNIT_ASSERT_EQUAL(std::string("null_source"), src1->name ()); CPPUNIT_ASSERT_EQUAL(0, src1->input_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL(1, src1->output_signature()->min_streams ()); - CPPUNIT_ASSERT_EQUAL(1, src1->output_signature()->max_streams ()); + CPPUNIT_ASSERT_EQUAL(-1, src1->output_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL((int) sizeof(int), src1->output_signature()->sizeof_stream_item (0)); @@ -50,40 +49,66 @@ qa_block::t0 () CPPUNIT_ASSERT_EQUAL(std::string ("null_source"), src2->name ()); CPPUNIT_ASSERT_EQUAL(0, src2->input_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL(1, src2->output_signature()->min_streams ()); - CPPUNIT_ASSERT_EQUAL(1, src2->output_signature()->max_streams ()); + CPPUNIT_ASSERT_EQUAL(-1, src2->output_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL((int)sizeof (short), src2->output_signature()->sizeof_stream_item (0)); } void -qa_block::t1 () +qa_gr_block::t1 () { // test creation of sinks gr::block_sptr dst1 (gr::blocks::null_sink::make (sizeof (int))); CPPUNIT_ASSERT_EQUAL (std::string ("null_sink"), dst1->name ()); CPPUNIT_ASSERT_EQUAL (1, dst1->input_signature()->min_streams ()); - CPPUNIT_ASSERT_EQUAL (1, dst1->input_signature()->max_streams ()); + CPPUNIT_ASSERT_EQUAL (-1, dst1->input_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL ((int) sizeof (int), - dst1->input_signature()->sizeof_stream_item (0)); + dst1->input_signature()->sizeof_stream_item (0)); CPPUNIT_ASSERT_EQUAL (0, dst1->output_signature()->max_streams ()); gr::block_sptr dst2 (gr::blocks::null_sink::make (sizeof (short))); CPPUNIT_ASSERT_EQUAL (std::string ("null_sink"), dst2->name ()); CPPUNIT_ASSERT_EQUAL (1, dst2->input_signature()->min_streams ()); - CPPUNIT_ASSERT_EQUAL (1, dst2->input_signature()->max_streams ()); + CPPUNIT_ASSERT_EQUAL (-1, dst2->input_signature()->max_streams ()); CPPUNIT_ASSERT_EQUAL ((int) sizeof (short), - dst2->input_signature()->sizeof_stream_item (0)); + dst2->input_signature()->sizeof_stream_item (0)); CPPUNIT_ASSERT_EQUAL (0, dst2->output_signature()->max_streams ()); } +#include <gnuradio/top_block.h> +#include <gnuradio/buffer.h> +#include <gnuradio/block_detail.h> +#include <gnuradio/blocks/nop.h> + void -qa_block::t2 () +qa_gr_block::t2 () { + gr::block_sptr src1(gr::blocks::null_source::make(sizeof (int))); + gr::block_sptr nop(gr::blocks::nop::make(sizeof (int))); + gr::block_sptr dst1 (gr::blocks::null_sink::make (sizeof (int))); + + gr::top_block_sptr tb(gr::make_top_block("t2")); + tb->connect(src1, 0, nop, 0); + tb->connect(nop, 0, dst1, 0); + tb->start(); + + char *obuf = nop->detail()->output(0)->base(); + int obsize = nop->detail()->output(0)->bufsize(); + char *ibuf = nop->detail()->input(0)->buffer()->base(); + int ibsize = nop->detail()->input(0)->buffer()->bufsize(); + + CPPUNIT_ASSERT(obuf != NULL); + CPPUNIT_ASSERT(ibuf != NULL); + CPPUNIT_ASSERT(obsize > 0); + CPPUNIT_ASSERT(ibsize > 0); + + tb->stop(); + tb->wait(); } void -qa_block::t3 () +qa_gr_block::t3 () { } diff --git a/gr-blocks/lib/qa_gr_block.h b/gr-blocks/lib/qa_gr_block.h index 06eb60f6e6..14c7c40d1f 100644 --- a/gr-blocks/lib/qa_gr_block.h +++ b/gr-blocks/lib/qa_gr_block.h @@ -27,9 +27,9 @@ #include <cppunit/TestCase.h> #include <stdexcept> -class qa_block : public CppUnit::TestCase { +class qa_gr_block : public CppUnit::TestCase { - CPPUNIT_TEST_SUITE (qa_block); + CPPUNIT_TEST_SUITE (qa_gr_block); CPPUNIT_TEST (t0); CPPUNIT_TEST (t1); CPPUNIT_TEST (t2); |