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/filter/gri_fft_filter_ccc_generic.cc5
-rw-r--r--gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h2
-rw-r--r--gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc5
-rw-r--r--gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h2
-rw-r--r--gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h4
-rw-r--r--gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h4
-rw-r--r--gnuradio-core/src/lib/general/CMakeLists.txt1
-rw-r--r--gnuradio-core/src/lib/general/Makefile.am3
-rw-r--r--gnuradio-core/src/lib/general/general.i2
-rw-r--r--gnuradio-core/src/lib/general/general_generated.i20
-rw-r--r--gnuradio-core/src/lib/general/gr_char_to_float.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_char_to_short.h2
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_char.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_int.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_float_to_short.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_fxpt.h6
-rw-r--r--gnuradio-core/src/lib/general/gr_int_to_float.h10
-rw-r--r--gnuradio-core/src/lib/general/gr_short_to_char.h2
-rw-r--r--gnuradio-core/src/lib/general/gr_short_to_float.h10
-rw-r--r--gnuradio-core/src/lib/general/gri_fft.cc18
-rw-r--r--gnuradio-core/src/lib/general/gri_fft.h13
-rw-r--r--gnuradio-core/src/lib/gengen/.gitignore30
-rw-r--r--gnuradio-core/src/lib/gengen/CMakeLists.txt2
-rw-r--r--gnuradio-core/src/lib/gengen/Makefile.am6
-rw-r--r--gnuradio-core/src/lib/gengen/Makefile.gen30
-rwxr-xr-xgnuradio-core/src/lib/gengen/generate_common.py6
-rw-r--r--gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t22
-rw-r--r--gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t4
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_X.cc.t (renamed from gnuradio-core/src/lib/general/gr_probe_signal_f.cc)23
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_X.h.t (renamed from gnuradio-core/src/lib/general/gr_probe_signal_f.h)30
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_X.i.t (renamed from gnuradio-core/src/lib/general/gr_probe_signal_f.i)12
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t59
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_vX.h.t62
-rw-r--r--gnuradio-core/src/lib/gengen/gr_probe_signal_vX.i.t32
-rw-r--r--gnuradio-core/src/lib/io/gr_wavfile_sink.h6
-rw-r--r--gnuradio-core/src/lib/runtime/gr_buffer.h3
-rw-r--r--gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc41
-rw-r--r--gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h9
-rw-r--r--gnuradio-core/src/lib/runtime/gr_hier_block2.h1
-rw-r--r--gnuradio-core/src/lib/runtime/gr_msg_queue.i14
-rw-r--r--gnuradio-core/src/lib/swig/gnuradio.i18
41 files changed, 479 insertions, 80 deletions
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc
index c894d62aa..1a9273af0 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc
@@ -45,6 +45,7 @@ gri_fft_filter_ccc_generic::~gri_fft_filter_ccc_generic ()
{
delete d_fwdfft;
delete d_invfft;
+ gri_fft_free(d_xformed_taps);
}
#if 0
@@ -115,7 +116,7 @@ gri_fft_filter_ccc_generic::compute_sizes(int ntaps)
delete d_invfft;
d_fwdfft = new gri_fft_complex(d_fftsize, true, d_nthreads);
d_invfft = new gri_fft_complex(d_fftsize, false, d_nthreads);
- d_xformed_taps.resize(d_fftsize);
+ d_xformed_taps = gri_fft_malloc_complex(d_fftsize);
}
}
@@ -152,7 +153,7 @@ gri_fft_filter_ccc_generic::filter (int nitems, const gr_complex *input, gr_comp
d_fwdfft->execute(); // compute fwd xform
gr_complex *a = d_fwdfft->get_outbuf();
- gr_complex *b = &d_xformed_taps[0];
+ gr_complex *b = d_xformed_taps;
gr_complex *c = d_invfft->get_inbuf();
volk_32fc_x2_multiply_32fc_a(c, a, b, d_fftsize);
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
index 217b9ab83..899b59e03 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h
@@ -44,8 +44,8 @@ class GR_CORE_API gri_fft_filter_ccc_generic
gri_fft_complex *d_invfft; // inverse "plan"
int d_nthreads; // number of FFTW threads to use
std::vector<gr_complex> d_tail; // state carried between blocks for overlap-add
- std::vector<gr_complex> d_xformed_taps; // Fourier xformed taps
std::vector<gr_complex> d_new_taps;
+ gr_complex *d_xformed_taps; // Fourier xformed taps
void compute_sizes(int ntaps);
int tailsize() const { return d_ntaps - 1; }
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc
index e7f66b714..0989c9621 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc
@@ -44,6 +44,7 @@ gri_fft_filter_fff_generic::~gri_fft_filter_fff_generic ()
{
delete d_fwdfft;
delete d_invfft;
+ gri_fft_free(d_xformed_taps);
}
/*
@@ -102,7 +103,7 @@ gri_fft_filter_fff_generic::compute_sizes(int ntaps)
delete d_invfft;
d_fwdfft = new gri_fft_real_fwd(d_fftsize);
d_invfft = new gri_fft_real_rev(d_fftsize);
- d_xformed_taps.resize(d_fftsize/2+1);
+ d_xformed_taps = gri_fft_malloc_complex(d_fftsize/2+1);
}
}
@@ -139,7 +140,7 @@ gri_fft_filter_fff_generic::filter (int nitems, const float *input, float *outpu
d_fwdfft->execute(); // compute fwd xform
gr_complex *a = d_fwdfft->get_outbuf();
- gr_complex *b = &d_xformed_taps[0];
+ gr_complex *b = d_xformed_taps;
gr_complex *c = d_invfft->get_inbuf();
volk_32fc_x2_multiply_32fc_a(c, a, b, d_fftsize/2+1);
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
index be31068aa..6ac30cef5 100644
--- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
+++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h
@@ -41,8 +41,8 @@ class GR_CORE_API gri_fft_filter_fff_generic
gri_fft_real_rev *d_invfft; // inverse "plan"
int d_nthreads; // number of FFTW threads to use
std::vector<float> d_tail; // state carried between blocks for overlap-add
- std::vector<gr_complex> d_xformed_taps; // Fourier xformed taps
std::vector<float> d_new_taps;
+ gr_complex *d_xformed_taps; // Fourier xformed taps
void compute_sizes(int ntaps);
diff --git a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
index b2832b3f6..673802dbb 100644
--- a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
+++ b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator.h
@@ -38,6 +38,10 @@ class gr_fir_fff;
* Although mu, the fractional delay, is specified as a float, it is actually
* quantized. 0.0 <= mu <= 1.0. That is, mu is quantized in the interpolate
* method to 32nd's of a sample.
+ *
+ * For more information, in the GNU Radio source code, see:
+ * \li gnuradio-core/src/gen_interpolator_taps/README
+ * \li gnuradio-core/src/gen_interpolator_taps/praxis.txt
*/
class GR_CORE_API gri_mmse_fir_interpolator {
diff --git a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h
index 2feef114b..5b04600b3 100644
--- a/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h
+++ b/gnuradio-core/src/lib/filter/gri_mmse_fir_interpolator_cc.h
@@ -39,6 +39,10 @@ class gr_fir_ccf;
* Although mu, the fractional delay, is specified as a float, it is actually
* quantized. 0.0 <= mu <= 1.0. That is, mu is quantized in the interpolate
* method to 32nd's of a sample.
+ *
+ * For more information, in the GNU Radio source code, see:
+ * \li gnuradio-core/src/gen_interpolator_taps/README
+ * \li gnuradio-core/src/gen_interpolator_taps/praxis.txt
*/
class GR_CORE_API gri_mmse_fir_interpolator_cc {
diff --git a/gnuradio-core/src/lib/general/CMakeLists.txt b/gnuradio-core/src/lib/general/CMakeLists.txt
index 2bc639cd3..ee6e4c4e6 100644
--- a/gnuradio-core/src/lib/general/CMakeLists.txt
+++ b/gnuradio-core/src/lib/general/CMakeLists.txt
@@ -252,7 +252,6 @@ set(gr_core_general_triple_threats
gr_probe_avg_mag_sqrd_c
gr_probe_avg_mag_sqrd_cf
gr_probe_avg_mag_sqrd_f
- gr_probe_signal_f
gr_pwr_squelch_cc
gr_pwr_squelch_ff
gr_quadrature_demod_cf
diff --git a/gnuradio-core/src/lib/general/Makefile.am b/gnuradio-core/src/lib/general/Makefile.am
index 5b4a702e1..ba1f686ab 100644
--- a/gnuradio-core/src/lib/general/Makefile.am
+++ b/gnuradio-core/src/lib/general/Makefile.am
@@ -117,7 +117,6 @@ libgeneral_la_SOURCES = \
gr_probe_avg_mag_sqrd_c.cc \
gr_probe_avg_mag_sqrd_cf.cc \
gr_probe_avg_mag_sqrd_f.cc \
- gr_probe_signal_f.cc \
gr_pwr_squelch_cc.cc \
gr_pwr_squelch_ff.cc \
gr_quadrature_demod_cf.cc \
@@ -279,7 +278,6 @@ grinclude_HEADERS = \
gr_probe_avg_mag_sqrd_c.h \
gr_probe_avg_mag_sqrd_cf.h \
gr_probe_avg_mag_sqrd_f.h \
- gr_probe_signal_f.h \
gr_pwr_squelch_cc.h \
gr_pwr_squelch_ff.h \
gr_quadrature_demod_cf.h \
@@ -443,7 +441,6 @@ swiginclude_HEADERS = \
gr_probe_avg_mag_sqrd_c.i \
gr_probe_avg_mag_sqrd_cf.i \
gr_probe_avg_mag_sqrd_f.i \
- gr_probe_signal_f.i \
gr_pwr_squelch_cc.i \
gr_pwr_squelch_ff.i \
gr_quadrature_demod_cf.i \
diff --git a/gnuradio-core/src/lib/general/general.i b/gnuradio-core/src/lib/general/general.i
index 89738b01a..fcf60c927 100644
--- a/gnuradio-core/src/lib/general/general.i
+++ b/gnuradio-core/src/lib/general/general.i
@@ -92,7 +92,6 @@
#include <gr_probe_avg_mag_sqrd_c.h>
#include <gr_probe_avg_mag_sqrd_cf.h>
#include <gr_probe_avg_mag_sqrd_f.h>
-#include <gr_probe_signal_f.h>
#include <gr_regenerate_bb.h>
#include <gr_pa_2x2_phase_combiner.h>
#include <gr_kludge_copy.h>
@@ -214,7 +213,6 @@
%include "gr_probe_avg_mag_sqrd_c.i"
%include "gr_probe_avg_mag_sqrd_cf.i"
%include "gr_probe_avg_mag_sqrd_f.i"
-%include "gr_probe_signal_f.i"
%include "gr_regenerate_bb.i"
%include "gr_pa_2x2_phase_combiner.i"
%include "gr_kludge_copy.i"
diff --git a/gnuradio-core/src/lib/general/general_generated.i b/gnuradio-core/src/lib/general/general_generated.i
index e12f2b0ec..89b7e1776 100644
--- a/gnuradio-core/src/lib/general/general_generated.i
+++ b/gnuradio-core/src/lib/general/general_generated.i
@@ -51,6 +51,16 @@
#include <gr_packed_to_unpacked_bb.h>
#include <gr_packed_to_unpacked_ii.h>
#include <gr_packed_to_unpacked_ss.h>
+#include <gr_probe_signal_b.h>
+#include <gr_probe_signal_s.h>
+#include <gr_probe_signal_i.h>
+#include <gr_probe_signal_f.h>
+#include <gr_probe_signal_c.h>
+#include <gr_probe_signal_vb.h>
+#include <gr_probe_signal_vs.h>
+#include <gr_probe_signal_vi.h>
+#include <gr_probe_signal_vf.h>
+#include <gr_probe_signal_vc.h>
#include <gr_sig_source_c.h>
#include <gr_sig_source_f.h>
#include <gr_sig_source_i.h>
@@ -123,6 +133,16 @@
%include <gr_packed_to_unpacked_bb.i>
%include <gr_packed_to_unpacked_ii.i>
%include <gr_packed_to_unpacked_ss.i>
+%include <gr_probe_signal_b.i>
+%include <gr_probe_signal_s.i>
+%include <gr_probe_signal_i.i>
+%include <gr_probe_signal_f.i>
+%include <gr_probe_signal_c.i>
+%include <gr_probe_signal_vb.i>
+%include <gr_probe_signal_vs.i>
+%include <gr_probe_signal_vi.i>
+%include <gr_probe_signal_vf.i>
+%include <gr_probe_signal_vc.i>
%include <gr_sig_source_c.i>
%include <gr_sig_source_f.i>
%include <gr_sig_source_i.i>
diff --git a/gnuradio-core/src/lib/general/gr_char_to_float.h b/gnuradio-core/src/lib/general/gr_char_to_float.h
index 4ad8e59a8..1ab53a087 100644
--- a/gnuradio-core/src/lib/general/gr_char_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_char_to_float.h
@@ -35,6 +35,9 @@ gr_make_char_to_float (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of chars to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar divider to change the output signal scale.
*/
class GR_CORE_API gr_char_to_float : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_char_to_float : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar divider value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar divider value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_char_to_short.h b/gnuradio-core/src/lib/general/gr_char_to_short.h
index 58f9a62b0..e93c15b12 100644
--- a/gnuradio-core/src/lib/general/gr_char_to_short.h
+++ b/gnuradio-core/src/lib/general/gr_char_to_short.h
@@ -35,6 +35,8 @@ gr_make_char_to_short (size_t vlen=1);
/*!
* \brief Convert stream of chars to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
*/
class GR_CORE_API gr_char_to_short : public gr_sync_block
diff --git a/gnuradio-core/src/lib/general/gr_float_to_char.h b/gnuradio-core/src/lib/general/gr_float_to_char.h
index c88645a18..00e83d465 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_char.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_char.h
@@ -35,6 +35,9 @@ gr_make_float_to_char (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of float to a stream of char
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar multiplier to change the output signal scale.
*/
class GR_CORE_API gr_float_to_char : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_float_to_char : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar multiplier value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar multiplier value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_float_to_int.h b/gnuradio-core/src/lib/general/gr_float_to_int.h
index 0b42c0aab..ef1987a76 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_int.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_int.h
@@ -35,6 +35,9 @@ gr_make_float_to_int (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of float to a stream of short
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar multiplier to change the output signal scale.
*/
class GR_CORE_API gr_float_to_int : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_float_to_int : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar multiplier value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar multiplier value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_float_to_short.h b/gnuradio-core/src/lib/general/gr_float_to_short.h
index 93e441f41..beb95486f 100644
--- a/gnuradio-core/src/lib/general/gr_float_to_short.h
+++ b/gnuradio-core/src/lib/general/gr_float_to_short.h
@@ -35,6 +35,9 @@ gr_make_float_to_short (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of float to a stream of short
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar multiplier to change the output signal scale.
*/
class GR_CORE_API gr_float_to_short : public gr_sync_block
@@ -47,7 +50,14 @@ class GR_CORE_API gr_float_to_short : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar multiplier value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar multiplier value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_fxpt.h b/gnuradio-core/src/lib/general/gr_fxpt.h
index 6f088769a..431102569 100644
--- a/gnuradio-core/src/lib/general/gr_fxpt.h
+++ b/gnuradio-core/src/lib/general/gr_fxpt.h
@@ -26,7 +26,7 @@
#include <gr_types.h>
/*!
- * \brief fixed point sine and cosine and friend GR_CORE_APIs.
+ * \brief fixed point sine and cosine and friends.
* \ingroup misc
*
* fixed pt radians
@@ -48,6 +48,10 @@ public:
static gr_int32
float_to_fixed (float x)
{
+ // Fold x into -PI to PI.
+ int d = (int)floor(x/2/PI+0.5);
+ x -= d*2*PI;
+ // And convert to an integer.
return (gr_int32) ((float) x * TWO_TO_THE_31 / PI);
}
diff --git a/gnuradio-core/src/lib/general/gr_int_to_float.h b/gnuradio-core/src/lib/general/gr_int_to_float.h
index af6488a50..7c55e3b3c 100644
--- a/gnuradio-core/src/lib/general/gr_int_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_int_to_float.h
@@ -35,6 +35,9 @@ gr_make_int_to_float (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of int to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar divider to change the output signal scale.
*/
class GR_CORE_API gr_int_to_float : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_int_to_float : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar divider value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar divider value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gr_short_to_char.h b/gnuradio-core/src/lib/general/gr_short_to_char.h
index 9682d86ec..f6b3b41ca 100644
--- a/gnuradio-core/src/lib/general/gr_short_to_char.h
+++ b/gnuradio-core/src/lib/general/gr_short_to_char.h
@@ -35,6 +35,8 @@ gr_make_short_to_char (size_t vlen=1);
/*!
* \brief Convert stream of short to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
*/
class GR_CORE_API gr_short_to_char : public gr_sync_block
diff --git a/gnuradio-core/src/lib/general/gr_short_to_float.h b/gnuradio-core/src/lib/general/gr_short_to_float.h
index efdc81ecd..e45d0b14b 100644
--- a/gnuradio-core/src/lib/general/gr_short_to_float.h
+++ b/gnuradio-core/src/lib/general/gr_short_to_float.h
@@ -35,6 +35,9 @@ gr_make_short_to_float (size_t vlen=1, float scale=1);
/*!
* \brief Convert stream of short to a stream of float
* \ingroup converter_blk
+ *
+ * \param vlen vector length of data streams.
+ * \param scale a scalar divider to change the output signal scale.
*/
class GR_CORE_API gr_short_to_float : public gr_sync_block
@@ -48,7 +51,14 @@ class GR_CORE_API gr_short_to_float : public gr_sync_block
float d_scale;
public:
+ /*!
+ * Get the scalar divider value.
+ */
float scale() const;
+
+ /*!
+ * Set the scalar divider value.
+ */
void set_scale(float scale);
virtual int work (int noutput_items,
diff --git a/gnuradio-core/src/lib/general/gri_fft.cc b/gnuradio-core/src/lib/general/gri_fft.cc
index 63e307776..2edb5f5aa 100644
--- a/gnuradio-core/src/lib/general/gri_fft.cc
+++ b/gnuradio-core/src/lib/general/gri_fft.cc
@@ -47,6 +47,24 @@ static int my_fftw_read_char(void *f) { return fgetc((FILE *) f); }
#include <boost/filesystem/path.hpp>
namespace fs = boost::filesystem;
+gr_complex *
+gri_fft_malloc_complex(int size)
+{
+ return (gr_complex*)fftwf_malloc(sizeof(gr_complex)*size);
+}
+
+float *
+gri_fft_malloc_float(int size)
+{
+ return (float*)fftwf_malloc(sizeof(float)*size);
+}
+
+void
+gri_fft_free(void *b)
+{
+ fftwf_free(b);
+}
+
boost::mutex &
gri_fft_planner::mutex()
{
diff --git a/gnuradio-core/src/lib/general/gri_fft.h b/gnuradio-core/src/lib/general/gri_fft.h
index ed80badf1..f77a18e52 100644
--- a/gnuradio-core/src/lib/general/gri_fft.h
+++ b/gnuradio-core/src/lib/general/gri_fft.h
@@ -30,6 +30,19 @@
#include <gr_complex.h>
#include <boost/thread.hpp>
+/*! \brief Helper function for allocating complex fft buffers
+ */
+gr_complex* gri_fft_malloc_complex(int size);
+
+/*! \brief Helper function for allocating float fft buffers
+ */
+float* gri_fft_malloc_float(int size);
+
+/*! \brief Helper function for freeing fft buffers
+ */
+void gri_fft_free(void *b);
+
+
/*!
* \brief Export reference to planner mutex for those apps that
* want to use FFTW w/o using the gri_fftw* classes.
diff --git a/gnuradio-core/src/lib/gengen/.gitignore b/gnuradio-core/src/lib/gengen/.gitignore
index b91d2f197..2f53eba9a 100644
--- a/gnuradio-core/src/lib/gengen/.gitignore
+++ b/gnuradio-core/src/lib/gengen/.gitignore
@@ -293,6 +293,36 @@
/gr_peak_detector_ss.h
/gr_peak_detector_ss.i
/gr_prefix.cc
+/gr_probe_signal_b.cc
+/gr_probe_signal_b.h
+/gr_probe_signal_b.i
+/gr_probe_signal_s.cc
+/gr_probe_signal_s.h
+/gr_probe_signal_s.i
+/gr_probe_signal_i.cc
+/gr_probe_signal_i.h
+/gr_probe_signal_i.i
+/gr_probe_signal_f.cc
+/gr_probe_signal_f.h
+/gr_probe_signal_f.i
+/gr_probe_signal_c.cc
+/gr_probe_signal_c.h
+/gr_probe_signal_c.i
+/gr_probe_signal_vb.cc
+/gr_probe_signal_vb.h
+/gr_probe_signal_vb.i
+/gr_probe_signal_vs.cc
+/gr_probe_signal_vs.h
+/gr_probe_signal_vs.i
+/gr_probe_signal_vi.cc
+/gr_probe_signal_vi.h
+/gr_probe_signal_vi.i
+/gr_probe_signal_vf.cc
+/gr_probe_signal_vf.h
+/gr_probe_signal_vf.i
+/gr_probe_signal_vc.cc
+/gr_probe_signal_vc.h
+/gr_probe_signal_vc.i
/gr_sample_and_hold_bb.cc
/gr_sample_and_hold_bb.h
/gr_sample_and_hold_bb.i
diff --git a/gnuradio-core/src/lib/gengen/CMakeLists.txt b/gnuradio-core/src/lib/gengen/CMakeLists.txt
index 98b149e97..8a43a8880 100644
--- a/gnuradio-core/src/lib/gengen/CMakeLists.txt
+++ b/gnuradio-core/src/lib/gengen/CMakeLists.txt
@@ -84,6 +84,8 @@ expand_h_cc_i(gr_vector_source_X b s i f c)
expand_h_cc_i(gr_vector_sink_X b s i f c)
expand_h_cc_i(gr_noise_source_X s i f c)
expand_h_cc_i(gr_sig_source_X s i f c)
+expand_h_cc_i(gr_probe_signal_X b s i f c)
+expand_h_cc_i(gr_probe_signal_vX b s i f c)
expand_h_cc_i(gr_add_const_XX ss ii ff cc sf)
expand_h_cc_i(gr_multiply_const_XX ss ii)
diff --git a/gnuradio-core/src/lib/gengen/Makefile.am b/gnuradio-core/src/lib/gengen/Makefile.am
index 5fbb6f52c..e2f65c5da 100644
--- a/gnuradio-core/src/lib/gengen/Makefile.am
+++ b/gnuradio-core/src/lib/gengen/Makefile.am
@@ -77,6 +77,12 @@ core_generator = \
gr_peak_detector_XX.cc.t \
gr_peak_detector_XX.h.t \
gr_peak_detector_XX.i.t \
+ gr_probe_signal_X.cc.t \
+ gr_probe_signal_X.h.t \
+ gr_probe_signal_X.i.t \
+ gr_probe_signal_vX.cc.t \
+ gr_probe_signal_vX.h.t \
+ gr_probe_signal_vX.i.t \
gr_sample_and_hold_XX.cc.t \
gr_sample_and_hold_XX.h.t \
gr_sample_and_hold_XX.i.t \
diff --git a/gnuradio-core/src/lib/gengen/Makefile.gen b/gnuradio-core/src/lib/gengen/Makefile.gen
index db260585f..b4a255dc0 100644
--- a/gnuradio-core/src/lib/gengen/Makefile.gen
+++ b/gnuradio-core/src/lib/gengen/Makefile.gen
@@ -72,6 +72,16 @@ GENERATED_H = \
gr_peak_detector_fb.h \
gr_peak_detector_ib.h \
gr_peak_detector_sb.h \
+ gr_probe_signal_b.h \
+ gr_probe_signal_s.h \
+ gr_probe_signal_i.h \
+ gr_probe_signal_f.h \
+ gr_probe_signal_c.h \
+ gr_probe_signal_vb.h \
+ gr_probe_signal_vs.h \
+ gr_probe_signal_vi.h \
+ gr_probe_signal_vf.h \
+ gr_probe_signal_vc.h \
gr_sample_and_hold_bb.h \
gr_sample_and_hold_ff.h \
gr_sample_and_hold_ii.h \
@@ -172,6 +182,16 @@ GENERATED_I = \
gr_peak_detector_fb.i \
gr_peak_detector_ib.i \
gr_peak_detector_sb.i \
+ gr_probe_signal_b.i \
+ gr_probe_signal_s.i \
+ gr_probe_signal_i.i \
+ gr_probe_signal_f.i \
+ gr_probe_signal_c.i \
+ gr_probe_signal_vb.i \
+ gr_probe_signal_vs.i \
+ gr_probe_signal_vi.i \
+ gr_probe_signal_vf.i \
+ gr_probe_signal_vc.i \
gr_sample_and_hold_bb.i \
gr_sample_and_hold_ff.i \
gr_sample_and_hold_ii.i \
@@ -272,6 +292,16 @@ GENERATED_CC = \
gr_peak_detector_fb.cc \
gr_peak_detector_ib.cc \
gr_peak_detector_sb.cc \
+ gr_probe_signal_b.cc \
+ gr_probe_signal_s.cc \
+ gr_probe_signal_i.cc \
+ gr_probe_signal_f.cc \
+ gr_probe_signal_c.cc \
+ gr_probe_signal_vb.cc \
+ gr_probe_signal_vs.cc \
+ gr_probe_signal_vi.cc \
+ gr_probe_signal_vf.cc \
+ gr_probe_signal_vc.cc \
gr_sample_and_hold_bb.cc \
gr_sample_and_hold_ff.cc \
gr_sample_and_hold_ii.cc \
diff --git a/gnuradio-core/src/lib/gengen/generate_common.py b/gnuradio-core/src/lib/gengen/generate_common.py
index 6da2044e0..70f805711 100755
--- a/gnuradio-core/src/lib/gengen/generate_common.py
+++ b/gnuradio-core/src/lib/gengen/generate_common.py
@@ -33,7 +33,9 @@ ss_roots = [
'gr_vector_source_X',
'gr_vector_sink_X',
'gr_noise_source_X',
- 'gr_sig_source_X'
+ 'gr_sig_source_X',
+ 'gr_probe_signal_X',
+ 'gr_probe_signal_vX'
]
# regular blocks
@@ -83,6 +85,8 @@ def generate ():
expand_h_cc_i ('gr_add_const_XX', 'sf') # for MC4020
expand_h_cc_i ('gr_vector_sink_X', 'b')
expand_h_cc_i ('gr_vector_source_X', 'b')
+ expand_h_cc_i ('gr_probe_signal_X', 'b')
+ expand_h_cc_i ('gr_probe_signal_vX', 'b')
for r in ss_roots:
for s in ss_signatures:
expand_h_cc_i (r, s)
diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
index ab5992257..196501c4d 100644
--- a/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
+++ b/gnuradio-core/src/lib/gengen/gr_noise_source_X.h.t
@@ -34,22 +34,38 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
+/*! \brief Make a noise source
+ * \param type the random distribution to use (see gr_noise_type.h)
+ * \param ampl a scaling factor for the output
+ * \param seed seed for random generators. Note that for uniform and
+ * Gaussian distributions, this should be a negative number.
+ */
GR_CORE_API @NAME@_sptr
-gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
/*!
- * \brief random number source
+ * \brief Random number source
* \ingroup source_blk
+ *
+ * \details
+ * Generate random values from different distributions.
+ * Currently, only Gaussian and uniform are enabled.
+ *
+ * \param type the random distribution to use (see gr_noise_type.h)
+ * \param ampl a scaling factor for the output
+ * \param seed seed for random generators. Note that for uniform and
+ * Gaussian distributions, this should be a negative number.
*/
class GR_CORE_API @NAME@ : public gr_sync_block {
friend GR_CORE_API @NAME@_sptr
+
gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed);
gr_noise_type_t d_type;
float d_ampl;
gr_random d_rng;
- @NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+ @NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
public:
void set_type (gr_noise_type_t type) { d_type = type; }
diff --git a/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t b/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t
index 179dc0343..36a51f31a 100644
--- a/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t
+++ b/gnuradio-core/src/lib/gengen/gr_noise_source_X.i.t
@@ -25,11 +25,11 @@
GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@);
@NAME@_sptr
-gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+gr_make_@BASE_NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
class @NAME@ : public gr_block {
private:
- @NAME@ (gr_noise_type_t type, float ampl, long seed = 3021);
+ @NAME@ (gr_noise_type_t type, float ampl, long seed = 0);
public:
void set_type (gr_noise_type_t type) { d_type = type; }
diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.cc b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.cc.t
index ee1a18e89..d60a5126a 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.cc
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.cc.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005,2010 Free Software Foundation, Inc.
+ * Copyright 2005,2010,2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -23,38 +23,37 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include <gr_probe_signal_f.h>
+#include <@NAME@.h>
#include <gr_io_signature.h>
-gr_probe_signal_f_sptr
-gr_make_probe_signal_f()
+@NAME@_sptr
+gr_make_@BASE_NAME@()
{
- return gnuradio::get_initial_sptr(new gr_probe_signal_f());
+ return gnuradio::get_initial_sptr(new @NAME@());
}
-gr_probe_signal_f::gr_probe_signal_f ()
- : gr_sync_block ("probe_signal_f",
- gr_make_io_signature(1, 1, sizeof(float)),
+@NAME@::@NAME@ ()
+: gr_sync_block ("@BASE_NAME@",
+ gr_make_io_signature(1, 1, sizeof(@TYPE@)),
gr_make_io_signature(0, 0, 0)),
d_level(0)
{
}
-gr_probe_signal_f::~gr_probe_signal_f()
+@NAME@::~@NAME@()
{
}
int
-gr_probe_signal_f::work(int noutput_items,
+@NAME@::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
- const float *in = (const float *) input_items[0];
+ const @TYPE@ *in = (const @TYPE@ *) input_items[0];
if (noutput_items > 0)
d_level = in[noutput_items-1];
return noutput_items;
}
-
diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.h b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.h.t
index b99c76976..26a95b9b2 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.h
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.h.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -19,40 +19,40 @@
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
-#ifndef INCLUDED_GR_PROBE_SIGNAL_F_H
-#define INCLUDED_GR_PROBE_SIGNAL_F_H
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
#include <gr_core_api.h>
#include <gr_sync_block.h>
-class gr_probe_signal_f;
-typedef boost::shared_ptr<gr_probe_signal_f> gr_probe_signal_f_sptr;
+class @NAME@;
+typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
-GR_CORE_API gr_probe_signal_f_sptr
-gr_make_probe_signal_f ();
+GR_CORE_API @NAME@_sptr
+gr_make_@BASE_NAME@ ();
/*!
* \brief Sink that allows a sample to be grabbed from Python.
* \ingroup sink_blk
*/
-class GR_CORE_API gr_probe_signal_f : public gr_sync_block
+class GR_CORE_API @NAME@ : public gr_sync_block
{
- float d_level;
+ @TYPE@ d_level;
- friend GR_CORE_API gr_probe_signal_f_sptr
- gr_make_probe_signal_f();
+ friend GR_CORE_API @NAME@_sptr
+ gr_make_@BASE_NAME@();
- gr_probe_signal_f();
+ @NAME@();
public:
- ~gr_probe_signal_f();
+ ~@NAME@();
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
- float level() const { return d_level; }
+ @TYPE@ level() const { return d_level; }
};
-#endif /* INCLUDED_GR_PROBE_SIGNAL_F_H */
+#endif /* @GUARD_NAME@ */
diff --git a/gnuradio-core/src/lib/general/gr_probe_signal_f.i b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.i.t
index 4255e5dfd..3f1ef8ffd 100644
--- a/gnuradio-core/src/lib/general/gr_probe_signal_f.i
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_X.i.t
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -20,13 +20,13 @@
* Boston, MA 02110-1301, USA.
*/
-GR_SWIG_BLOCK_MAGIC(gr,probe_signal_f);
+GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@);
-gr_probe_signal_f_sptr
-gr_make_probe_signal_f ();
+@NAME@_sptr
+gr_make_@BASE_NAME@ ();
-class gr_probe_signal_f : public gr_sync_block
+class @NAME@ : public gr_sync_block
{
public:
- float level () const { return d_level; }
+ @TYPE@ level ();
};
diff --git a/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t
new file mode 100644
index 000000000..712b55b9a
--- /dev/null
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.cc.t
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2005,2010,2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <@NAME@.h>
+#include <gr_io_signature.h>
+#include <iostream>
+
+@NAME@_sptr
+gr_make_@BASE_NAME@(size_t size)
+{
+ return gnuradio::get_initial_sptr(new @NAME@(size));
+}
+
+@NAME@::@NAME@ (size_t size)
+: gr_sync_block ("@BASE_NAME@",
+ gr_make_io_signature(1, 1, size*sizeof(@TYPE@)),
+ gr_make_io_signature(0, 0, 0)),
+ d_level(size, 0), d_size(size)
+{
+}
+
+@NAME@::~@NAME@()
+{
+}
+
+int
+@NAME@::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ const @TYPE@ *in = (const @TYPE@ *) input_items[0];
+
+ for (int i=0; i<d_size; i++)
+ d_level[i] = in[(noutput_items-1)*d_size+i];
+
+ return noutput_items;
+}
diff --git a/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.h.t b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.h.t
new file mode 100644
index 000000000..3a7277b93
--- /dev/null
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.h.t
@@ -0,0 +1,62 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
+
+#include <vector>
+
+#include <gr_core_api.h>
+#include <gr_sync_block.h>
+
+class @NAME@;
+typedef boost::shared_ptr<@NAME@> @NAME@_sptr;
+
+GR_CORE_API @NAME@_sptr
+gr_make_@BASE_NAME@ (size_t size);
+
+/*!
+ * \brief Sink that allows a sample to be grabbed from Python.
+ * \ingroup sink_blk
+ */
+class GR_CORE_API @NAME@ : public gr_sync_block
+{
+ std::vector<@TYPE@> d_level;
+
+ friend GR_CORE_API @NAME@_sptr
+ gr_make_@BASE_NAME@(size_t size);
+
+ @NAME@(size_t size);
+
+ size_t d_size;
+
+public:
+ ~@NAME@();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+
+ std::vector<@TYPE@> level() const { return d_level; }
+
+};
+
+#endif /* @GUARD_NAME@ */
diff --git a/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.i.t b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.i.t
new file mode 100644
index 000000000..20191948a
--- /dev/null
+++ b/gnuradio-core/src/lib/gengen/gr_probe_signal_vX.i.t
@@ -0,0 +1,32 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2005, 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@);
+
+@NAME@_sptr
+gr_make_@BASE_NAME@ (size_t size);
+
+class @NAME@ : public gr_sync_block
+{
+public:
+ std::vector<@TYPE@> level ();
+};
diff --git a/gnuradio-core/src/lib/io/gr_wavfile_sink.h b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
index 5fd3eaadc..348f789ae 100644
--- a/gnuradio-core/src/lib/io/gr_wavfile_sink.h
+++ b/gnuradio-core/src/lib/io/gr_wavfile_sink.h
@@ -44,10 +44,10 @@ gr_make_wavfile_sink (const char *filename,
int bits_per_sample = 16);
/*!
- * \brief Read stream from a Microsoft PCM (.wav) file, output floats
+ * \brief Write stream to a Microsoft PCM (.wav) file.
*
- * Values are within [-1;1].
- * Check gr_make_wavfile_source() for extra info.
+ * Values must be floats within [-1;1].
+ * Check gr_make_wavfile_sink() for extra info.
*
* \ingroup sink_blk
*/
diff --git a/gnuradio-core/src/lib/runtime/gr_buffer.h b/gnuradio-core/src/lib/runtime/gr_buffer.h
index e8e393756..9478e1ce0 100644
--- a/gnuradio-core/src/lib/runtime/gr_buffer.h
+++ b/gnuradio-core/src/lib/runtime/gr_buffer.h
@@ -93,6 +93,7 @@ class GR_CORE_API gr_buffer {
uint64_t nitems_written() { return d_abs_write_offset; }
+ size_t get_sizeof_item() { return d_sizeof_item; }
/*!
* \brief Adds a new tag to the buffer.
@@ -249,6 +250,8 @@ class GR_CORE_API gr_buffer_reader {
uint64_t nitems_read() { return d_abs_read_offset; }
+ size_t get_sizeof_item() { return d_buffer->get_sizeof_item(); }
+
/*!
* \brief Return the block that reads via this reader.
*
diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
index 5d1057e0f..5c9e4bf3f 100644
--- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
+++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.cc
@@ -28,6 +28,7 @@
#include <gr_block_detail.h>
#include <gr_io_signature.h>
#include <gr_buffer.h>
+#include <volk/volk.h>
#include <iostream>
#include <map>
@@ -62,8 +63,14 @@ gr_flat_flowgraph::setup_connections()
cast_to_block_sptr(*p)->set_detail(allocate_block_detail(*p));
// Connect inputs to outputs for each block
- for(gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++)
+ for(gr_basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
connect_block_inputs(*p);
+
+ gr_block_sptr block = cast_to_block_sptr(*p);
+ block->set_unaligned(0);
+ block->set_is_unaligned(false);
+ }
+
}
gr_block_detail_sptr
@@ -243,6 +250,9 @@ gr_flat_flowgraph::merge_connections(gr_flat_flowgraph_sptr old_ffg)
if (GR_FLAT_FLOWGRAPH_DEBUG)
std::cout << "new block" << std::endl;
connect_block_inputs(block);
+
+ // Make sure all buffers are aligned
+ setup_buffer_alignment(block);
}
// Now deal with the fact that the block details might have changed numbers of
@@ -250,6 +260,35 @@ gr_flat_flowgraph::merge_connections(gr_flat_flowgraph_sptr old_ffg)
}
}
+void
+gr_flat_flowgraph::setup_buffer_alignment(gr_block_sptr block)
+{
+ const int alignment = volk_get_alignment();
+ for(int i = 0; i < block->detail()->ninputs(); i++) {
+ void *r = (void*)block->detail()->input(i)->read_pointer();
+ unsigned long int ri = (unsigned long int)r % alignment;
+ //std::cout << "reader: " << r << " alignment: " << ri << std::endl;
+ if(ri != 0) {
+ size_t itemsize = block->detail()->input(i)->get_sizeof_item();
+ block->detail()->input(i)->update_read_pointer(ri/itemsize);
+ }
+ block->set_unaligned(0);
+ block->set_is_unaligned(false);
+ }
+
+ for(int i = 0; i < block->detail()->noutputs(); i++) {
+ void *w = (void*)block->detail()->output(i)->write_pointer();
+ unsigned long int wi = (unsigned long int)w % alignment;
+ size_t itemsize = block->detail()->output(i)->get_sizeof_item();
+ //std::cout << "writer: " << w << " alignment: " << wi << std::endl;
+ if(wi != 0) {
+ block->detail()->output(i)->update_write_pointer(wi/itemsize);
+ }
+ block->set_unaligned(0);
+ block->set_is_unaligned(false);
+ }
+}
+
void gr_flat_flowgraph::dump()
{
for (gr_edge_viter_t e = d_edges.begin(); e != d_edges.end(); e++)
diff --git a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
index 2cc883686..ce863509b 100644
--- a/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
+++ b/gnuradio-core/src/lib/runtime/gr_flat_flowgraph.h
@@ -63,6 +63,15 @@ private:
gr_block_detail_sptr allocate_block_detail(gr_basic_block_sptr block);
gr_buffer_sptr allocate_buffer(gr_basic_block_sptr block, int port);
void connect_block_inputs(gr_basic_block_sptr block);
+
+ /* When reusing a flowgraph's blocks, this call makes sure all of the
+ * buffer's are aligned at the machine's alignment boundary and tells
+ * the blocks that they are aligned.
+ *
+ * Called from both setup_connections and merge_connections for
+ * start and restarts.
+ */
+ void setup_buffer_alignment(gr_block_sptr block);
};
#endif /* INCLUDED_GR_FLAT_FLOWGRAPH_H */
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2.h b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
index 8687b7d99..9652f6bf4 100644
--- a/gnuradio-core/src/lib/runtime/gr_hier_block2.h
+++ b/gnuradio-core/src/lib/runtime/gr_hier_block2.h
@@ -55,6 +55,7 @@ private:
gr_hier_block2_detail *d_detail;
protected:
+ gr_hier_block2 (void){} //allows pure virtual interface sub-classes
gr_hier_block2(const std::string &name,
gr_io_signature_sptr input_signature,
gr_io_signature_sptr output_signature);
diff --git a/gnuradio-core/src/lib/runtime/gr_msg_queue.i b/gnuradio-core/src/lib/runtime/gr_msg_queue.i
index c9214bef3..0a4eda78a 100644
--- a/gnuradio-core/src/lib/runtime/gr_msg_queue.i
+++ b/gnuradio-core/src/lib/runtime/gr_msg_queue.i
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2005,2009,2010 Free Software Foundation, Inc.
+ * Copyright 2005,2009,2010,2011 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -85,16 +85,16 @@ public:
%inline %{
gr_message_sptr gr_py_msg_queue__delete_head(gr_msg_queue_sptr q) {
gr_message_sptr msg;
- Py_BEGIN_ALLOW_THREADS; // release global interpreter lock
- msg = q->delete_head(); // possibly blocking call
- Py_END_ALLOW_THREADS; // acquire global interpreter lock
+ GR_PYTHON_BLOCKING_CODE(
+ msg = q->delete_head();
+ )
return msg;
}
void gr_py_msg_queue__insert_tail(gr_msg_queue_sptr q, gr_message_sptr msg) {
- Py_BEGIN_ALLOW_THREADS; // release global interpreter lock
- q->insert_tail(msg); // possibly blocking call
- Py_END_ALLOW_THREADS; // acquire global interpreter lock
+ GR_PYTHON_BLOCKING_CODE(
+ q->insert_tail(msg);
+ )
}
%}
diff --git a/gnuradio-core/src/lib/swig/gnuradio.i b/gnuradio-core/src/lib/swig/gnuradio.i
index e365aeac7..972d56c84 100644
--- a/gnuradio-core/src/lib/swig/gnuradio.i
+++ b/gnuradio-core/src/lib/swig/gnuradio.i
@@ -25,23 +25,7 @@
// SWIG interface definition
////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////
-// Language independent exception handler
-////////////////////////////////////////////////////////////////////////
-%include exception.i
-
-%exception {
- try {
- $action
- }
- catch(std::exception &e) {
- SWIG_exception(SWIG_RuntimeError, e.what());
- }
- catch(...) {
- SWIG_exception(SWIG_RuntimeError, "Unknown exception");
- }
-
-}
+%include <gruel_common.i>
////////////////////////////////////////////////////////////////////////
// Headers