commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 15/16: blocks: random_pdu (allow specifying


From: git
Subject: [Commit-gnuradio] [gnuradio] 15/16: blocks: random_pdu (allow specifying the length modulo for random pdu lengths)
Date: Sun, 16 Feb 2014 21:11:21 +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 7f57cf7d5011ad33dfee1bbd2dcd31499ab40bf0
Author: Tim O'Shea <address@hidden>
Date:   Sun Feb 16 01:42:21 2014 -0500

    blocks: random_pdu (allow specifying the length modulo for random pdu 
lengths)
---
 gr-blocks/grc/blocks_random_pdu.xml            |  8 +++++++-
 gr-blocks/include/gnuradio/blocks/random_pdu.h |  2 +-
 gr-blocks/lib/random_pdu_impl.cc               | 14 ++++++++++----
 gr-blocks/lib/random_pdu_impl.h                |  3 ++-
 4 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/gr-blocks/grc/blocks_random_pdu.xml 
b/gr-blocks/grc/blocks_random_pdu.xml
index bd484d0..a70fa7f 100644
--- a/gr-blocks/grc/blocks_random_pdu.xml
+++ b/gr-blocks/grc/blocks_random_pdu.xml
@@ -9,7 +9,7 @@
        <key>blocks_random_pdu</key>
        <import>from gnuradio import blocks</import>
        <import>import pmt</import>
-       <make>blocks.random_pdu($minsize, $maxsize, chr($mask))</make>
+       <make>blocks.random_pdu($minsize, $maxsize, chr($mask), 
$length_modulo)</make>
        <param>
                <name>Min Bytes</name>
                <key>minsize</key>
@@ -28,6 +28,12 @@
                <value>0xFF</value>
                <type>int</type>
        </param>
+       <param>
+               <name>Length Modulo</name>
+               <key>length_modulo</key>
+               <value>2</value>
+               <type>int</type>
+       </param>
        <sink>
                <name>generate</name>
                <type>message</type>
diff --git a/gr-blocks/include/gnuradio/blocks/random_pdu.h 
b/gr-blocks/include/gnuradio/blocks/random_pdu.h
index fe6bca7..1f5fa50 100644
--- a/gr-blocks/include/gnuradio/blocks/random_pdu.h
+++ b/gr-blocks/include/gnuradio/blocks/random_pdu.h
@@ -43,7 +43,7 @@ namespace gr {
       /*!
        * \brief Construct a random PDU generator
        */
-      static sptr make(int mintime, int maxtime, char byte_mask = 0xFF);
+      static sptr make(int mintime, int maxtime, char byte_mask = 0xFF, int 
length_modulo = 1);
     };
 
   } /* namespace blocks */
diff --git a/gr-blocks/lib/random_pdu_impl.cc b/gr-blocks/lib/random_pdu_impl.cc
index 0ae800a..6efed06 100644
--- a/gr-blocks/lib/random_pdu_impl.cc
+++ b/gr-blocks/lib/random_pdu_impl.cc
@@ -32,12 +32,12 @@ namespace gr {
   namespace blocks {
 
     random_pdu::sptr
-    random_pdu::make(int min_items, int max_items, char byte_mask)
+    random_pdu::make(int min_items, int max_items, char byte_mask, int 
length_modulo)
     {
-      return gnuradio::get_initial_sptr(new random_pdu_impl(min_items, 
max_items, byte_mask));
+      return gnuradio::get_initial_sptr(new random_pdu_impl(min_items, 
max_items, byte_mask, length_modulo));
     }
 
-    random_pdu_impl::random_pdu_impl(int min_items, int max_items, char 
byte_mask)
+    random_pdu_impl::random_pdu_impl(int min_items, int max_items, char 
byte_mask, int length_modulo)
       :        block("random_pdu",
                 io_signature::make (0, 0, 0),
                 io_signature::make (0, 0, 0)),
@@ -45,11 +45,16 @@ namespace gr {
        d_brange(0, 255),
        d_rvar(d_rng, d_urange),
        d_bvar(d_rng, d_brange),
-    d_mask(byte_mask)
+    d_mask(byte_mask),
+    d_length_modulo(length_modulo)
     {
       message_port_register_out(PDU_PORT_ID);
       message_port_register_in(pmt::mp("generate"));
       set_msg_handler(pmt::mp("generate"), 
boost::bind(&random_pdu_impl::generate_pdu, this, _1));
+      if(length_modulo < 1)
+        throw std::runtime_error("length_module must be >= 1");
+      if(max_items < length_modulo)
+        throw std::runtime_error("max_items must be >= to length_modulo");
     }
 
     bool
@@ -64,6 +69,7 @@ namespace gr {
     {
       // pick a random vector length
       int len = d_rvar();
+      len = std::max(d_length_modulo, len - len%d_length_modulo);
 
       // fill it with random bytes
       std::vector<unsigned char> vec(len);
diff --git a/gr-blocks/lib/random_pdu_impl.h b/gr-blocks/lib/random_pdu_impl.h
index 9cb34c7..88b218f 100644
--- a/gr-blocks/lib/random_pdu_impl.h
+++ b/gr-blocks/lib/random_pdu_impl.h
@@ -39,9 +39,10 @@ namespace gr {
       boost::variate_generator< boost::mt19937, boost::uniform_int<> > d_rvar; 
// pdu length
       boost::variate_generator< boost::mt19937, boost::uniform_int<> > d_bvar; 
// pdu contents
       char d_mask;
+      int d_length_modulo;
 
     public:
-      random_pdu_impl(int min_items, int max_items, char byte_mask);
+      random_pdu_impl(int min_items, int max_items, char byte_mask, int 
length_modulo);
 
       bool start();
       void output_random();



reply via email to

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