summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-core/src/lib')
-rw-r--r--gnuradio-core/src/lib/general/gr_annotator_raw.cc70
-rw-r--r--gnuradio-core/src/lib/general/gr_annotator_raw.h24
-rw-r--r--gnuradio-core/src/lib/general/gr_keep_m_in_n.cc49
-rw-r--r--gnuradio-core/src/lib/general/gr_keep_m_in_n.h2
-rw-r--r--gnuradio-core/src/lib/general/gr_keep_m_in_n.i2
-rw-r--r--gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc34
-rw-r--r--gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h2
-rw-r--r--gnuradio-core/src/lib/gengen/gr_vector_insert_X.cc.t42
-rw-r--r--gnuradio-core/src/lib/gengen/gr_vector_insert_X.h.t16
9 files changed, 127 insertions, 114 deletions
diff --git a/gnuradio-core/src/lib/general/gr_annotator_raw.cc b/gnuradio-core/src/lib/general/gr_annotator_raw.cc
index 7aa8714c4..074c09173 100644
--- a/gnuradio-core/src/lib/general/gr_annotator_raw.cc
+++ b/gnuradio-core/src/lib/general/gr_annotator_raw.cc
@@ -29,50 +29,59 @@
#include <string.h>
#include <iostream>
#include <iomanip>
+#include <stdexcept>
+
+using namespace pmt;
gr_annotator_raw_sptr
-gr_make_annotator_raw ( size_t sizeof_stream_item)
+gr_make_annotator_raw(size_t sizeof_stream_item)
{
- return gnuradio::get_initial_sptr (new gr_annotator_raw
- (sizeof_stream_item));
+ return gnuradio::get_initial_sptr(new gr_annotator_raw
+ (sizeof_stream_item));
}
-gr_annotator_raw::gr_annotator_raw (size_t sizeof_stream_item)
- : gr_sync_block ("annotator_raw",
- gr_make_io_signature (1, 1, sizeof_stream_item),
- gr_make_io_signature (1, 1, sizeof_stream_item)),
+gr_annotator_raw::gr_annotator_raw(size_t sizeof_stream_item)
+ : gr_sync_block("annotator_raw",
+ gr_make_io_signature(1, 1, sizeof_stream_item),
+ gr_make_io_signature(1, 1, sizeof_stream_item)),
d_itemsize(sizeof_stream_item)
{
set_tag_propagation_policy(TPP_ONE_TO_ONE);
set_relative_rate(1.0);
}
+void gr_annotator_raw::add_tag(uint64_t offset, pmt_t key, pmt_t val)
+{
+ gruel::scoped_lock l(d_mutex);
-void gr_annotator_raw::add_tag( uint64_t offset, pmt_t key, pmt_t val ){
- gr_tag_t tag;
- tag.srcid = pmt::pmt_intern(d_name);
- tag.key = key;
- tag.value = val;
- tag.offset = offset;
+ gr_tag_t tag;
+ tag.srcid = pmt::pmt_intern(d_name);
+ tag.key = key;
+ tag.value = val;
+ tag.offset = offset;
- // add our new tag
- d_queued_tags.push_back( tag );
- // make sure our tags are in offset order
- std::sort(d_queued_tags.begin(), d_queued_tags.end(), gr_tag_t::offset_compare);
- // make sure we are not adding an item in the past!
- assert(tag->offset >= nitems_read(0));
+ // add our new tag
+ d_queued_tags.push_back(tag);
+ // make sure our tags are in offset order
+ std::sort(d_queued_tags.begin(), d_queued_tags.end(),
+ gr_tag_t::offset_compare);
+ // make sure we are not adding an item in the past!
+ if(tag.offset >= nitems_read(0)) {
+ throw std::runtime_error("gr_annotator_raw::add_tag: item added too far in the past\n.");
+ }
}
-
-gr_annotator_raw::~gr_annotator_raw ()
+gr_annotator_raw::~gr_annotator_raw()
{
}
int
-gr_annotator_raw::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+gr_annotator_raw::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
+ gruel::scoped_lock l(d_mutex);
+
const char *in = (const char*)input_items[0];
char *out = (char*)output_items[0];
@@ -81,12 +90,13 @@ gr_annotator_raw::work (int noutput_items,
// locate queued tags that fall in this range and insert them when appropriate
std::vector<gr_tag_t>::iterator i = d_queued_tags.begin();
- while( i != d_queued_tags.end() ){
- if( (*i).offset >= start_N && (*i).offset < end_N){
- add_item_tag(0, (*i).offset,(*i).key, (*i).value, (*i).srcid);
- i = d_queued_tags.erase(i);
- } else {
- break;
+ while( i != d_queued_tags.end() ) {
+ if( (*i).offset >= start_N && (*i).offset < end_N) {
+ add_item_tag(0, (*i).offset,(*i).key, (*i).value, (*i).srcid);
+ i = d_queued_tags.erase(i);
+ }
+ else {
+ break;
}
}
diff --git a/gnuradio-core/src/lib/general/gr_annotator_raw.h b/gnuradio-core/src/lib/general/gr_annotator_raw.h
index 0da27daec..8a6c3f6c0 100644
--- a/gnuradio-core/src/lib/general/gr_annotator_raw.h
+++ b/gnuradio-core/src/lib/general/gr_annotator_raw.h
@@ -26,18 +26,17 @@
#include <gr_core_api.h>
#include <gr_sync_block.h>
#include <gruel/pmt.h>
+#include <gruel/thread.h>
class gr_annotator_raw;
typedef boost::shared_ptr<gr_annotator_raw> gr_annotator_raw_sptr;
// public constructor
GR_CORE_API gr_annotator_raw_sptr
-gr_make_annotator_raw (size_t sizeof_stream_item);
-
-using namespace pmt;
+gr_make_annotator_raw(size_t sizeof_stream_item);
/*!
- * \brief raw stream annotator testing block.
+ * \brief raw stream annotator testing block.
*
* This block creates arbitrary tags to be sent downstream
* blocks to be sent are set manually via accessor methods and are sent only once.
@@ -47,23 +46,24 @@ using namespace pmt;
class GR_CORE_API gr_annotator_raw : public gr_sync_block
{
public:
- ~gr_annotator_raw ();
- int work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ ~gr_annotator_raw();
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
- // insert a tag to be added
- void add_tag( uint64_t offset, pmt::pmt_t key, pmt::pmt_t val );
+ // insert a tag to be added
+ void add_tag(uint64_t offset, pmt::pmt_t key, pmt::pmt_t val);
protected:
- gr_annotator_raw (size_t sizeof_stream_item);
+ gr_annotator_raw(size_t sizeof_stream_item);
private:
size_t d_itemsize;
std::vector<gr_tag_t> d_queued_tags;
+ gruel::mutex d_mutex;
friend GR_CORE_API gr_annotator_raw_sptr
- gr_make_annotator_raw (size_t sizeof_stream_item);
+ gr_make_annotator_raw(size_t sizeof_stream_item);
};
#endif
diff --git a/gnuradio-core/src/lib/general/gr_keep_m_in_n.cc b/gnuradio-core/src/lib/general/gr_keep_m_in_n.cc
index a9f4c12ba..0da69a126 100644
--- a/gnuradio-core/src/lib/general/gr_keep_m_in_n.cc
+++ b/gnuradio-core/src/lib/general/gr_keep_m_in_n.cc
@@ -30,9 +30,9 @@
#include <stdio.h>
gr_keep_m_in_n_sptr
-gr_make_keep_m_in_n (size_t item_size, int m, int n, int offset)
+gr_make_keep_m_in_n(size_t item_size, int m, int n, int offset)
{
- return gnuradio::get_initial_sptr(new gr_keep_m_in_n (item_size, m, n, offset));
+ return gnuradio::get_initial_sptr(new gr_keep_m_in_n(item_size, m, n, offset));
}
@@ -40,17 +40,17 @@ gr_make_keep_m_in_n (size_t item_size, int m, int n, int offset)
*
* offset = 0, starts with 0th item
* offset = 1, starts with 1st item, etc...
-*
+*
* we take m items out of each n
*/
-gr_keep_m_in_n::gr_keep_m_in_n (size_t item_size, int m, int n, int offset)
- : gr_block ("keep_m_in_n",
- gr_make_io_signature (1, 1, item_size),
- gr_make_io_signature (1, 1, item_size)),
+gr_keep_m_in_n::gr_keep_m_in_n(size_t item_size, int m, int n, int offset)
+ : gr_block("keep_m_in_n",
+ gr_make_io_signature(1, 1, item_size),
+ gr_make_io_signature(1, 1, item_size)),
d_n(n),
d_m(m),
- d_offset( offset ),
- d_itemsize( item_size )
+ d_offset(offset),
+ d_itemsize(item_size)
{
// sanity checking
assert(d_m > 0);
@@ -62,33 +62,36 @@ gr_keep_m_in_n::gr_keep_m_in_n (size_t item_size, int m, int n, int offset)
}
-void gr_keep_m_in_n::forecast (int noutput_items, gr_vector_int &ninput_items_required){
- ninput_items_required[0] = d_n*(noutput_items/d_m);
+void
+gr_keep_m_in_n::forecast(int noutput_items, gr_vector_int &ninput_items_required)
+{
+ ninput_items_required[0] = d_n*(noutput_items/d_m);
}
-void gr_keep_m_in_n::set_offset(int offset){
- d_offset = offset;
+void
+gr_keep_m_in_n::set_offset(int offset)
+{
+ d_offset = offset;
}
-
int
-gr_keep_m_in_n::general_work (int noutput_items,
- gr_vector_int &ninput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+gr_keep_m_in_n::general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
- uint8_t* out = (uint8_t*) output_items[0];
- const uint8_t* in = (const uint8_t*) input_items[0];
+ uint8_t* out = (uint8_t*)output_items[0];
+ const uint8_t* in = (const uint8_t*)input_items[0];
// iterate over data blocks of size {n, input : m, output}
- int blks = std::min( noutput_items/d_m, ninput_items[0]/d_n );
- for(int i=0; i<blks; i++){
+ int blks = std::min(noutput_items/d_m, ninput_items[0]/d_n);
+ for(int i=0; i<blks; i++) {
// set up copy pointers
const uint8_t* iptr = &in[(i*d_n + d_offset)*d_itemsize];
uint8_t* optr = &out[i*d_m*d_itemsize];
// perform copy
memcpy( optr, iptr, d_m*d_itemsize );
- }
+ }
consume_each(d_n);
return d_m;
diff --git a/gnuradio-core/src/lib/general/gr_keep_m_in_n.h b/gnuradio-core/src/lib/general/gr_keep_m_in_n.h
index 22fbd2f4c..711c704f5 100644
--- a/gnuradio-core/src/lib/general/gr_keep_m_in_n.h
+++ b/gnuradio-core/src/lib/general/gr_keep_m_in_n.h
@@ -29,7 +29,7 @@
class gr_keep_m_in_n;
typedef boost::shared_ptr<gr_keep_m_in_n> gr_keep_m_in_n_sptr;
-GR_CORE_API gr_keep_m_in_n_sptr
+GR_CORE_API gr_keep_m_in_n_sptr
gr_make_keep_m_in_n (size_t item_size, int m, int n, int offset);
diff --git a/gnuradio-core/src/lib/general/gr_keep_m_in_n.i b/gnuradio-core/src/lib/general/gr_keep_m_in_n.i
index cb5c63683..de89cec2c 100644
--- a/gnuradio-core/src/lib/general/gr_keep_m_in_n.i
+++ b/gnuradio-core/src/lib/general/gr_keep_m_in_n.i
@@ -22,7 +22,7 @@
GR_SWIG_BLOCK_MAGIC(gr,keep_m_in_n)
-gr_keep_m_in_n_sptr
+gr_keep_m_in_n_sptr
gr_make_keep_m_in_n (size_t itemsize, int m, int n, int offset);
class gr_keep_m_in_n : public gr_sync_block
diff --git a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc b/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc
index fc7e689fe..0a366a4cc 100644
--- a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc
+++ b/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.cc
@@ -29,41 +29,41 @@
#include <stdexcept>
#include <iostream>
-gr_pack_k_bits_bb_sptr gr_make_pack_k_bits_bb (unsigned k)
+gr_pack_k_bits_bb_sptr gr_make_pack_k_bits_bb(unsigned k)
{
- return gnuradio::get_initial_sptr(new gr_pack_k_bits_bb (k));
+ return gnuradio::get_initial_sptr(new gr_pack_k_bits_bb(k));
}
gr_pack_k_bits_bb::gr_pack_k_bits_bb (unsigned k)
- : gr_sync_decimator ("pack_k_bits_bb",
- gr_make_io_signature (1, 1, sizeof (unsigned char)),
- gr_make_io_signature (1, 1, sizeof (unsigned char)),
- k),
+ : gr_sync_decimator("pack_k_bits_bb",
+ gr_make_io_signature (1, 1, sizeof(unsigned char)),
+ gr_make_io_signature (1, 1, sizeof(unsigned char)),
+ k),
d_k (k)
{
if (d_k == 0)
- throw std::out_of_range ("interpolation must be > 0");
+ throw std::out_of_range("interpolation must be > 0");
}
-gr_pack_k_bits_bb::~gr_pack_k_bits_bb ()
+gr_pack_k_bits_bb::~gr_pack_k_bits_bb()
{
}
int
-gr_pack_k_bits_bb::work (int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+gr_pack_k_bits_bb::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
- const unsigned char *in = (const unsigned char *) input_items[0];
- unsigned char *out = (unsigned char *) output_items[0];
+ const unsigned char *in = (const unsigned char *)input_items[0];
+ unsigned char *out = (unsigned char *)output_items[0];
- for (int i = 0; i < noutput_items; i++){
+ for(int i = 0; i < noutput_items; i++) {
out[i] = 0x00;
- for (unsigned int j = 0; j < d_k; j++){
- out[i] |= (0x01 & in[i*d_k+j])<<(d_k-j-1);
+ for(unsigned int j = 0; j < d_k; j++) {
+ out[i] |= (0x01 & in[i*d_k+j])<<(d_k-j-1);
}
}
-
+
return noutput_items;
}
diff --git a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h b/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h
index 00b8f8f13..caf6d7992 100644
--- a/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h
+++ b/gnuradio-core/src/lib/general/gr_pack_k_bits_bb.h
@@ -33,7 +33,7 @@ GR_CORE_API gr_pack_k_bits_bb_sptr gr_make_pack_k_bits_bb (unsigned k);
class gr_pack_k_bits_bb;
/*!
- * \brief Converts a byte with k relevent bits to k output bytes with 1 bit in the LSB.
+ * \brief Converts a stream of bytes with 1 bit in the LSB to a byte with k relevent bits.
* \ingroup converter_blk
*/
class GR_CORE_API gr_pack_k_bits_bb : public gr_sync_decimator
diff --git a/gnuradio-core/src/lib/gengen/gr_vector_insert_X.cc.t b/gnuradio-core/src/lib/gengen/gr_vector_insert_X.cc.t
index 15e19edb0..75ed526ad 100644
--- a/gnuradio-core/src/lib/gengen/gr_vector_insert_X.cc.t
+++ b/gnuradio-core/src/lib/gengen/gr_vector_insert_X.cc.t
@@ -32,13 +32,13 @@
#include <stdio.h>
-@NAME@::@NAME@ (const std::vector<@TYPE@> &data, int periodicity, int offset)
- : gr_block ("@BASE_NAME@",
- gr_make_io_signature (1, 1, sizeof (@TYPE@)),
- gr_make_io_signature (1, 1, sizeof (@TYPE@))),
- d_data (data),
- d_offset (offset),
- d_periodicity (periodicity)
+@NAME@::@NAME@(const std::vector<@TYPE@> &data, int periodicity, int offset)
+ : gr_block("@BASE_NAME@",
+ gr_make_io_signature (1, 1, sizeof(@TYPE@)),
+ gr_make_io_signature (1, 1, sizeof(@TYPE@))),
+ d_data(data),
+ d_offset(offset),
+ d_periodicity(periodicity)
{
//printf("INITIAL: periodicity = %d, offset = %d\n", periodicity, offset);
// some sanity checks
@@ -48,22 +48,22 @@
}
int
-@NAME@::general_work (int noutput_items,
+@NAME@::general_work(int noutput_items,
gr_vector_int &ninput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
- @TYPE@ *out = (@TYPE@ *) output_items[0];
- const @TYPE@ *in = (const @TYPE@ *) input_items[0];
+ @TYPE@ *out = (@TYPE@ *)output_items[0];
+ const @TYPE@ *in = (const @TYPE@ *)input_items[0];
int ii(0), oo(0);
- while( (oo < noutput_items) && (ii < ninput_items[0]) ){
+ while((oo < noutput_items) && (ii < ninput_items[0])) {
//printf("oo = %d, ii = %d, d_offset = %d, noutput_items = %d, ninput_items[0] = %d", oo, ii, d_offset, noutput_items, ninput_items[0]);
//printf(", d_periodicity = %d\n", d_periodicity);
- if( d_offset >= ((int)d_data.size()) ){ // if we are in the copy region
+ if(d_offset >= ((int)d_data.size())) { // if we are in the copy region
int max_copy = std::min( std::min( noutput_items - oo, ninput_items[0] - ii ), d_periodicity - d_offset );
//printf("copy %d from input\n", max_copy);
memcpy( &out[oo], &in[ii], sizeof(@TYPE@)*max_copy );
@@ -72,24 +72,24 @@ int
oo += max_copy;
d_offset = (d_offset + max_copy)%d_periodicity;
- } else { // if we are in the insertion region
+ }
+ else { // if we are in the insertion region
int max_copy = std::min( noutput_items - oo, ((int)d_data.size()) - d_offset );
//printf("copy %d from d_data[%d] to out[%d]\n", max_copy, d_offset, oo);
memcpy( &out[oo], &d_data[d_offset], sizeof(@TYPE@)*max_copy );
//printf(" * memcpy returned.\n");
- oo += max_copy;
+ oo += max_copy;
d_offset = (d_offset + max_copy)%d_periodicity;
//printf(" ## (inelse) oo = %d, d_offset = %d\n", oo, d_offset);
- }
+ }
//printf(" # exit else, on to next loop.\n");
- }
- //printf(" # got out of loop\n");
-
- //printf("consume = %d, produce = %d\n", ii, oo);
- consume_each(ii);
- return oo;
+ }
+ //printf(" # got out of loop\n");
+ //printf("consume = %d, produce = %d\n", ii, oo);
+ consume_each(ii);
+ return oo;
}
@NAME@_sptr
diff --git a/gnuradio-core/src/lib/gengen/gr_vector_insert_X.h.t b/gnuradio-core/src/lib/gengen/gr_vector_insert_X.h.t
index 76c6b7a5d..a7de7831b 100644
--- a/gnuradio-core/src/lib/gengen/gr_vector_insert_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_vector_insert_X.h.t
@@ -37,25 +37,25 @@ typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
*/
class @NAME@ : public gr_block {
- friend GR_CORE_API @NAME@_sptr
- gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, int periodicity, int offset);
+ friend GR_CORE_API @NAME@_sptr
+ gr_make_@BASE_NAME@(const std::vector<@TYPE@> &data, int periodicity, int offset);
std::vector<@TYPE@> d_data;
int d_offset;
int d_periodicity;
- @NAME@ (const std::vector<@TYPE@> &data, int periodicity, int offset);
+ @NAME@(const std::vector<@TYPE@> &data, int periodicity, int offset);
public:
void rewind() {d_offset=0;}
- virtual int general_work (int noutput_items,
- gr_vector_int &ninput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ virtual int general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
void set_data(const std::vector<@TYPE@> &data){ d_data = data; rewind(); }
};
GR_CORE_API @NAME@_sptr
-gr_make_@BASE_NAME@ (const std::vector<@TYPE@> &data, int periodicity, int offset=0);
+gr_make_@BASE_NAME@(const std::vector<@TYPE@> &data, int periodicity, int offset=0);
#endif