commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 01/04: runtime: added accessor to get base


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/04: runtime: added accessor to get base address of buffer. Addresses Issue #729.
Date: Thu, 19 Feb 2015 08:38:18 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch master
in repository gnuradio.

commit bab014a9f47f1d64f47317cec683a10c02ffa462
Author: Tom Rondeau <address@hidden>
Date:   Fri Feb 13 16:14:19 2015 -0500

    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.
---
 gnuradio-runtime/include/gnuradio/block.h  |  2 +-
 gnuradio-runtime/include/gnuradio/buffer.h |  5 ++++
 gr-blocks/lib/qa_blocks.cc                 |  2 ++
 gr-blocks/lib/qa_gr_block.cc               | 47 +++++++++++++++++++++++-------
 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 4a534b7..264ef9b 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 c0c9f3d..44d5235 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 149ef7a..b28ab5a 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 5df1b21..48683dd 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 06eb60f..14c7c40 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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]