summaryrefslogtreecommitdiff
path: root/gr-blocks
diff options
context:
space:
mode:
authorBalint Seeber <balint@ettus.com>2014-06-04 13:20:17 -0700
committerJohnathan Corgan <johnathan@corganlabs.com>2014-06-13 14:48:03 -0700
commitd2b51d8ff34380dbb8f5caefaa62483f13f10d26 (patch)
treea6170d886a515af0c8fb4d29b9d0d5d0cf8491ce /gr-blocks
parent229fd982c66df1755f439ae7835ad56a8cccd346 (diff)
blocks: added I/Q swap option to interleaved_short_to_complex
Diffstat (limited to 'gr-blocks')
-rw-r--r--gr-blocks/grc/blocks_interleaved_short_to_complex.xml18
-rw-r--r--gr-blocks/include/gnuradio/blocks/interleaved_short_to_complex.h4
-rw-r--r--gr-blocks/lib/interleaved_short_to_complex_impl.cc22
-rw-r--r--gr-blocks/lib/interleaved_short_to_complex_impl.h5
4 files changed, 42 insertions, 7 deletions
diff --git a/gr-blocks/grc/blocks_interleaved_short_to_complex.xml b/gr-blocks/grc/blocks_interleaved_short_to_complex.xml
index 712ba3a7ad..2c4e153854 100644
--- a/gr-blocks/grc/blocks_interleaved_short_to_complex.xml
+++ b/gr-blocks/grc/blocks_interleaved_short_to_complex.xml
@@ -8,7 +8,8 @@
<name>IShort To Complex</name>
<key>blocks_interleaved_short_to_complex</key>
<import>from gnuradio import blocks</import>
- <make>blocks.interleaved_short_to_complex($vector_input)</make>
+ <make>blocks.interleaved_short_to_complex($vector_input, $swap)</make>
+ <callback>set_swap($swap)</callback>
<param>
<name>Vector Input</name>
<key>vector_input</key>
@@ -25,6 +26,21 @@
<opt>vlen:2</opt>
</option>
</param>
+ <param>
+ <name>Swap</name>
+ <key>swap</key>
+ <value>False</value>
+ <type>enum</type>
+ <hide>part</hide>
+ <option>
+ <name>Yes</name>
+ <key>True</key>
+ </option>
+ <option>
+ <name>No</name>
+ <key>False</key>
+ </option>
+ </param>
<sink>
<name>in</name>
<type>short</type>
diff --git a/gr-blocks/include/gnuradio/blocks/interleaved_short_to_complex.h b/gr-blocks/include/gnuradio/blocks/interleaved_short_to_complex.h
index 4f89e4d05c..39304e8088 100644
--- a/gr-blocks/include/gnuradio/blocks/interleaved_short_to_complex.h
+++ b/gr-blocks/include/gnuradio/blocks/interleaved_short_to_complex.h
@@ -42,7 +42,9 @@ namespace gr {
/*!
* Build an interleaved short to complex block.
*/
- static sptr make(bool vector_input=false);
+ static sptr make(bool vector_input=false, bool swap=false);
+
+ virtual void set_swap(bool swap)=0;
};
} /* namespace blocks */
diff --git a/gr-blocks/lib/interleaved_short_to_complex_impl.cc b/gr-blocks/lib/interleaved_short_to_complex_impl.cc
index 962b29b37c..bb1e229bf1 100644
--- a/gr-blocks/lib/interleaved_short_to_complex_impl.cc
+++ b/gr-blocks/lib/interleaved_short_to_complex_impl.cc
@@ -31,19 +31,24 @@
namespace gr {
namespace blocks {
- interleaved_short_to_complex::sptr interleaved_short_to_complex::make(bool vector_input)
+ interleaved_short_to_complex::sptr interleaved_short_to_complex::make(bool vector_input, bool swap)
{
- return gnuradio::get_initial_sptr(new interleaved_short_to_complex_impl(vector_input));
+ return gnuradio::get_initial_sptr(new interleaved_short_to_complex_impl(vector_input, swap));
}
- interleaved_short_to_complex_impl::interleaved_short_to_complex_impl(bool vector_input)
+ interleaved_short_to_complex_impl::interleaved_short_to_complex_impl(bool vector_input, bool swap)
: sync_decimator("interleaved_short_to_complex",
gr::io_signature::make (1, 1, (vector_input?2:1)*sizeof(short)),
gr::io_signature::make (1, 1, sizeof(gr_complex)),
vector_input?1:2),
- d_vector_input(vector_input)
+ d_vector_input(vector_input), d_swap(swap)
{
}
+
+ void interleaved_short_to_complex_impl::set_swap(bool swap)
+ {
+ d_swap = swap;
+ }
int
interleaved_short_to_complex_impl::work(int noutput_items,
@@ -55,6 +60,15 @@ namespace gr {
interleaved_short_array_to_complex (in, out, 2 * noutput_items);
+ if (d_swap) {
+ float* p = (float*)output_items[0];
+ for (int i = 0; i < noutput_items; ++i) {
+ float f = p[2*i+1];
+ p[2*i+1] = p[2*i+0];
+ p[2*i+0] = f;
+ }
+ }
+
return noutput_items;
}
diff --git a/gr-blocks/lib/interleaved_short_to_complex_impl.h b/gr-blocks/lib/interleaved_short_to_complex_impl.h
index 3280f894fd..c7669f1896 100644
--- a/gr-blocks/lib/interleaved_short_to_complex_impl.h
+++ b/gr-blocks/lib/interleaved_short_to_complex_impl.h
@@ -32,8 +32,11 @@ namespace gr {
{
private:
bool d_vector_input;
+ bool d_swap;
public:
- interleaved_short_to_complex_impl(bool vector_input=false);
+ interleaved_short_to_complex_impl(bool vector_input=false, bool swap=false);
+
+ void set_swap(bool swap);
int work(int noutput_items,
gr_vector_const_void_star &input_items,