commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 01/04: tags: adds get_tags_in_window helper


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/04: tags: adds get_tags_in_window helper function for handling tags. Also updates some docs.
Date: Sun, 23 Feb 2014 22:19:45 +0000 (UTC)

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

trondeau pushed a commit to branch master
in repository gnuradio.

commit b5fcc18523caeafebbf117cf2c838e7974856966
Author: Tom Rondeau <address@hidden>
Date:   Sun Feb 23 11:25:57 2014 -0500

    tags: adds get_tags_in_window helper function for handling tags. Also 
updates some docs.
---
 docs/doxygen/other/stream_tags.dox                 | 27 ++++++++----
 gnuradio-runtime/include/gnuradio/block.h          | 50 +++++++++++++++++++--
 gnuradio-runtime/lib/block.cc                      | 51 ++++++++++++++++------
 .../gnuradio/blocks/message_strobe_random.h        | 19 +++++---
 .../include/gnuradio/blocks/tagged_stream_to_pdu.h | 11 +++--
 .../include/gnuradio/blocks/vector_source_X.h.t    | 13 +++++-
 6 files changed, 134 insertions(+), 37 deletions(-)

diff --git a/docs/doxygen/other/stream_tags.dox 
b/docs/doxygen/other/stream_tags.dox
index 2a03c96..8517409 100644
--- a/docs/doxygen/other/stream_tags.dox
+++ b/docs/doxygen/other/stream_tags.dox
@@ -63,15 +63,26 @@ at <em>nitems_written(0)+i</em> for the 0th output port.
 The stream tags API consists of four functions, two to add and two to
 get the stream tags. These functions are:
 
-\li add_item_tag: Adds an item tag to a particular output port using a
+\li gr::block::add_item_tag: Adds an item tag to a particular output port 
using a
 gr::tag_t data type.
-\li add_item_tag: Adds an item tag to a particular output port where
-each value of the tag is explicitly given.
-\li get_tags_in_range: Gets all tags from a particular input port between
-a certain range of items (in absolute item time).
-\li get_tags_in_range: Gets any tag that has a specified key from a
-particular input port between a certain range of items (in absolute
-item time).
+
+\li gr::block::add_item_tag: Adds an item tag to a particular output
+port where each value of the tag is explicitly given.
+
+\li gr::block::get_tags_in_range: Gets all tags from a particular
+input port between a certain range of items (in absolute item time).
+
+\li gr::block::get_tags_in_range: Gets any tag that has a specified
+key from a particular input port between a certain range of items (in
+absolute item time).
+
+\li gr::block::get_tags_in_window: Gets all tags from a particular
+input port between a certain range of items (in relative item time
+within the work function).
+
+\li gr::block::get_tags_in_range: Gets any tag that has a specified
+key from a particular input port between a certain range of items (in
+relative item time within the work function).
 
 
 \subsection add_item_tag Adding a Tag to a Stream
diff --git a/gnuradio-runtime/include/gnuradio/block.h 
b/gnuradio-runtime/include/gnuradio/block.h
index 112d251..7390e93 100644
--- a/gnuradio-runtime/include/gnuradio/block.h
+++ b/gnuradio-runtime/include/gnuradio/block.h
@@ -562,7 +562,7 @@ namespace gr {
     int set_thread_priority(int priority);
 
     bool update_rate() const;
-    
+
     // 
----------------------------------------------------------------------------
 
   private:
@@ -699,6 +699,50 @@ namespace gr {
                            uint64_t abs_end,
                            const pmt::pmt_t &key);
 
+    /*!
+     * \brief Gets all tags within the relative window of the current call to 
work.
+     *
+     * \details
+     *
+     * This opperates much like get_tags_in_range but allows us to
+     * work within the current window of items. Item range is
+     * therefore within the possible range of 0 to
+     * ninput_items[whic_input].
+     *
+     * Range of items counts from \p rel_start to \p rel_end-1 within
+     * current window.
+     *
+     * Tags are tuples of:
+     *      (item count, source id, key, value)
+     *
+     * \param v            a vector reference to return tags into
+     * \param which_input  an integer of which input stream to pull from
+     * \param rel_start    a uint64 count of the start of the range of interest
+     * \param rel_end      a uint64 count of the end of the range of interest
+     */
+    void get_tags_in_window(std::vector<tag_t> &v,
+                            unsigned int which_input,
+                            uint64_t rel_start,
+                            uint64_t rel_end);
+
+    /*!
+     * \brief Operates like gr::block::get_tags_in_window with the
+     * ability to only return tags with the specified \p key.
+     *
+     * \details
+     *
+     * \param v            a vector reference to return tags into
+     * \param which_input  an integer of which input stream to pull from
+     * \param rel_start    a uint64 count of the start of the range of interest
+     * \param rel_end      a uint64 count of the end of the range of interest
+     * \param key          a PMT symbol key to filter only tags of this key
+     */
+    void get_tags_in_window(std::vector<tag_t> &v,
+                            unsigned int which_input,
+                            uint64_t rel_start,
+                            uint64_t rel_end,
+                            const pmt::pmt_t &key);
+
     void enable_update_rate(bool en);
 
     std::vector<long> d_max_output_buffer;
@@ -708,11 +752,11 @@ namespace gr {
      * setting/resetting of parameters thread-safe.
      *
      * Used by calling gr::thread::scoped_lock l(d_setlock);
-     */ 
+     */
     gr::thread::mutex d_setlock;
 
     /*! Used by blocks to access the logger system.
-     */ 
+     */
     gr::logger_ptr d_logger;
     gr::logger_ptr d_debug_logger;
 
diff --git a/gnuradio-runtime/lib/block.cc b/gnuradio-runtime/lib/block.cc
index 442f8dd..169a1b0 100644
--- a/gnuradio-runtime/lib/block.cc
+++ b/gnuradio-runtime/lib/block.cc
@@ -288,19 +288,42 @@ namespace gr {
 
   void
   block::get_tags_in_range(std::vector<tag_t> &v,
-                           unsigned int which_output,
+                           unsigned int which_input,
                            uint64_t start, uint64_t end)
   {
-    d_detail->get_tags_in_range(v, which_output, start, end, unique_id());
+    d_detail->get_tags_in_range(v, which_input, start, end, unique_id());
   }
 
   void
   block::get_tags_in_range(std::vector<tag_t> &v,
-                           unsigned int which_output,
+                           unsigned int which_input,
                            uint64_t start, uint64_t end,
                            const pmt::pmt_t &key)
   {
-    d_detail->get_tags_in_range(v, which_output, start, end, key, unique_id());
+    d_detail->get_tags_in_range(v, which_input, start, end, key, unique_id());
+  }
+
+  void
+  block::get_tags_in_window(std::vector<tag_t> &v,
+                            unsigned int which_input,
+                            uint64_t start, uint64_t end)
+  {
+    d_detail->get_tags_in_range(v, which_input,
+                                nitems_read(which_input) + start,
+                                nitems_read(which_input) + end,
+                                unique_id());
+  }
+
+  void
+  block::get_tags_in_window(std::vector<tag_t> &v,
+                            unsigned int which_input,
+                            uint64_t start, uint64_t end,
+                            const pmt::pmt_t &key)
+  {
+    d_detail->get_tags_in_range(v, which_input,
+                                nitems_read(which_input) + start,
+                                nitems_read(which_input) + end,
+                                key, unique_id());
   }
 
   block::tag_propagation_policy_t
@@ -361,7 +384,7 @@ namespace gr {
     }
   }
 
-  int 
+  int
   block::active_thread_priority()
   {
     if(d_detail) {
@@ -370,13 +393,13 @@ namespace gr {
     return -1;
   }
 
-  int 
+  int
   block::thread_priority()
   {
     return d_priority;
   }
 
-  int 
+  int
   block::set_thread_priority(int priority)
   {
     d_priority = priority;
@@ -402,10 +425,10 @@ namespace gr {
       throw std::invalid_argument("basic_block::max_output_buffer: port out of 
range.");
     return d_max_output_buffer[i];
   }
-  
+
   void
   block::set_max_output_buffer(long max_output_buffer)
-  { 
+  {
     for(int i = 0; i < output_signature()->max_streams(); i++) {
       set_max_output_buffer(i, max_output_buffer);
     }
@@ -417,9 +440,9 @@ namespace gr {
     if((size_t)port >= d_max_output_buffer.size())
       d_max_output_buffer.push_back(max_output_buffer);
     else
-      d_max_output_buffer[port] = max_output_buffer; 
+      d_max_output_buffer[port] = max_output_buffer;
   }
-  
+
   long
   block::min_output_buffer(size_t i)
   {
@@ -427,7 +450,7 @@ namespace gr {
       throw std::invalid_argument("basic_block::min_output_buffer: port out of 
range.");
     return d_min_output_buffer[i];
   }
-  
+
   void
   block::set_min_output_buffer(long min_output_buffer)
   {
@@ -436,14 +459,14 @@ namespace gr {
       set_min_output_buffer(i, min_output_buffer);
     }
   }
-  
+
   void
   block::set_min_output_buffer(int port, long min_output_buffer)
   {
     if((size_t)port >= d_min_output_buffer.size())
       d_min_output_buffer.push_back(min_output_buffer);
     else
-      d_min_output_buffer[port] = min_output_buffer; 
+      d_min_output_buffer[port] = min_output_buffer;
   }
 
 
diff --git a/gr-blocks/include/gnuradio/blocks/message_strobe_random.h 
b/gr-blocks/include/gnuradio/blocks/message_strobe_random.h
index f399f63..8f5a20e 100644
--- a/gr-blocks/include/gnuradio/blocks/message_strobe_random.h
+++ b/gr-blocks/include/gnuradio/blocks/message_strobe_random.h
@@ -43,8 +43,11 @@ namespace gr {
      * \ingroup message_tools_blk
      *
      * \details
-     * Takes a PMT message and sends it out every \p period_ms
-     * milliseconds. Useful for testing/debugging the message system.
+
+     * Takes a PMT message and sends it out every at random
+     * intervals. The interval is basedon a random distribution, \p
+     * dist, with specified mean (\p mean_ms) and variance (\p
+     * std_ms). Useful for testing/debugging the message system.
      */
     class BLOCKS_API message_strobe_random : virtual public block
     {
@@ -53,12 +56,14 @@ namespace gr {
       typedef boost::shared_ptr<message_strobe_random> sptr;
 
       /*!
-       * Make a message stobe block to send message \p msg every \p
-       * period_ms milliseconds.
+       * Make a message stobe block to sends message \p msg at random
+       * intervals defined by the distribution \p dist with mean \p
+       * mean_ms and standard deviation \p std_ms.
        *
        * \param msg The message to send as a PMT.
-       * \param period_ms the time period in milliseconds in which to
-       *                  send \p msg.
+       * \param dist The random distribution from which to draw events.
+       * \param mean_ms The mean of the distribution.
+       * \param std_ms The standard deviation of the distribution.
        */
       static sptr make(pmt::pmt_t msg, message_strobe_random_distribution_t 
dist, float mean_ms, float std_ms);
 
@@ -104,7 +109,7 @@ namespace gr {
        * Get the std of strobe_random.
        */
       virtual float std() const = 0;
-   
+
     };
 
   } /* namespace blocks */
diff --git a/gr-blocks/include/gnuradio/blocks/tagged_stream_to_pdu.h 
b/gr-blocks/include/gnuradio/blocks/tagged_stream_to_pdu.h
index 15ed50f..af32792 100644
--- a/gr-blocks/include/gnuradio/blocks/tagged_stream_to_pdu.h
+++ b/gr-blocks/include/gnuradio/blocks/tagged_stream_to_pdu.h
@@ -31,11 +31,13 @@ namespace gr {
   namespace blocks {
 
     /*!
-     * \brief Turns received stream data and tags into PDUs and sends them 
through a message port.
+     * \brief Turns received stream data and tags into PDUs and sends
+     * them through a message port.
      * \ingroup message_tools_blk
      *
-     * The sent message is a PMT-pair (created by pmt::cons()). The first 
element is a dictionary
-     * containing all the tags. The second is a vector containing the actual 
data.
+     * The sent message is a PMT-pair (created by pmt::cons()). The
+     * first element is a dictionary containing all the tags. The
+     * second is a vector containing the actual data.
      */
     class BLOCKS_API tagged_stream_to_pdu : virtual public tagged_stream_block
     {
@@ -46,7 +48,8 @@ namespace gr {
       /*!
        * \brief Construct a tagged_stream_to_pdu block
        * \param type PDU type of pdu::vector_type
-       * \param lengthtagname The name of the tag that specifies how long the 
packet is.
+       * \param lengthtagname The name of the tag that specifies
+       *        how long the packet is.
        */
       static sptr make(pdu::vector_type type,
                        const std::string& lengthtagname="packet_len");
diff --git a/gr-blocks/include/gnuradio/blocks/vector_source_X.h.t 
b/gr-blocks/include/gnuradio/blocks/vector_source_X.h.t
index 7ff18ad..9751514 100644
--- a/gr-blocks/include/gnuradio/blocks/vector_source_X.h.t
+++ b/gr-blocks/include/gnuradio/blocks/vector_source_X.h.t
@@ -32,8 +32,19 @@ namespace gr {
   namespace blocks {
 
     /*!
-     * \brief source of @TYPE@'s that gets its data from a vector
+     * \brief Source that streams @TYPE@ items based on the input \data vector.
      * \ingroup misc_blk
+     *
+     * \details
+     * This block produces a stream of samples based on an input
+     * vector. In C++, this is a std::vector<@TYPE@>, and in Python,
+     * this is either a list or tuple. The data can repeat infinitely
+     * until the flowgraph is terminated by some other event or, the
+     * default, run the data once and stop.
+     *
+     * The vector source can also produce stream tags with the
+     * data. Pass in a vector of gr::tag_t objects and they will be
+     * emitted based on the specified offset of the tag.
      */
     class BLOCKS_API @NAME@ : virtual public sync_block
     {



reply via email to

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