summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
Diffstat (limited to 'grc')
-rw-r--r--grc/data/platforms/python/blocks/usrp_dual_sink_x.xml24
-rw-r--r--grc/data/platforms/python/blocks/usrp_dual_source_x.xml22
-rw-r--r--grc/data/platforms/python/blocks/usrp_simple_sink_x.xml22
-rw-r--r--grc/data/platforms/python/blocks/usrp_simple_source_x.xml22
-rw-r--r--grc/src/grc_gnuradio/usrp/common.py45
-rw-r--r--grc/src/grc_gnuradio/usrp/dual_usrp.py44
-rw-r--r--grc/src/grc_gnuradio/usrp/simple_usrp.py26
7 files changed, 145 insertions, 60 deletions
diff --git a/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml b/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml
index 3e665c0f8..91c42adfe 100644
--- a/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml
+++ b/grc/data/platforms/python/blocks/usrp_dual_sink_x.xml
@@ -9,6 +9,9 @@
<key>usrp_dual_sink_x</key>
<import>from grc_gnuradio import usrp as grc_usrp</import>
<make>grc_usrp.dual_sink_$(type.fcn)(number=$number)
+#if $format.eval
+self.$(id).set_format(width=$format.width, shift=$format.shift)
+#end if
self.$(id).set_interp_rate($interpolation)
self.$(id).set_frequency_a($frequency_a, verbose=True)
self.$(id).set_frequency_b($frequency_b, verbose=True)
@@ -45,11 +48,32 @@ self.$(id).set_auto_tr_b($auto_tr_b)
<name>Complex</name>
<key>complex</key>
<opt>fcn:c</opt>
+ <opt>bits8:</opt>
</option>
<option>
<name>Short</name>
<key>short</key>
<opt>fcn:s</opt>
+ <opt>bits8:</opt>
+ </option>
+ </param>
+ <param>
+ <name>Format</name>
+ <key>format</key>
+ <value></value>
+ <type>enum</type>
+ <hide>#if $format.eval then '' else 'part'#</hide>
+ <option>
+ <name>16 Bits (Default)</name>
+ <key></key>
+ <opt>width:16</opt>
+ <opt>shift:0</opt>
+ </option>
+ <option>
+ <name>8 Bits, Shift 8</name>
+ <key>w8_s8</key>
+ <opt>width:8</opt>
+ <opt>shift:8</opt>
</option>
</param>
<param>
diff --git a/grc/data/platforms/python/blocks/usrp_dual_source_x.xml b/grc/data/platforms/python/blocks/usrp_dual_source_x.xml
index 29ff7c8a0..ff355b510 100644
--- a/grc/data/platforms/python/blocks/usrp_dual_source_x.xml
+++ b/grc/data/platforms/python/blocks/usrp_dual_source_x.xml
@@ -9,6 +9,9 @@
<key>usrp_dual_source_x</key>
<import>from grc_gnuradio import usrp as grc_usrp</import>
<make>grc_usrp.dual_source_$(type.fcn)(number=$number, side_a='$rx_ant_a.side', rx_ant_a='$rx_ant_a.rx_ant', side_b='$rx_ant_b.side', rx_ant_b='$rx_ant_b.rx_ant')
+#if $format.eval
+self.$(id).set_format(width=$format.width, shift=$format.shift)
+#end if
self.$(id).set_decim_rate($decimation)
self.$(id).set_frequency_a($frequency_a, verbose=True)
self.$(id).set_frequency_b($frequency_b, verbose=True)
@@ -47,6 +50,25 @@ self.$(id).set_auto_tr_b($auto_tr_b)
</option>
</param>
<param>
+ <name>Format</name>
+ <key>format</key>
+ <value></value>
+ <type>enum</type>
+ <hide>#if $format.eval then '' else 'part'#</hide>
+ <option>
+ <name>16 Bits (Default)</name>
+ <key></key>
+ <opt>width:16</opt>
+ <opt>shift:0</opt>
+ </option>
+ <option>
+ <name>8 Bits, Shift 8</name>
+ <key>w8_s8</key>
+ <opt>width:8</opt>
+ <opt>shift:8</opt>
+ </option>
+ </param>
+ <param>
<name>Unit Number</name>
<key>number</key>
<value>0</value>
diff --git a/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml b/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml
index 885aec852..dc76199e8 100644
--- a/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml
+++ b/grc/data/platforms/python/blocks/usrp_simple_sink_x.xml
@@ -9,6 +9,9 @@
<key>usrp_simple_sink_x</key>
<import>from grc_gnuradio import usrp as grc_usrp</import>
<make>grc_usrp.simple_sink_$(type.fcn)(number=$number, side='$side')
+#if $format.eval
+self.$(id).set_format(width=$format.width, shift=$format.shift)
+#end if
self.$(id).set_interp_rate($interpolation)
self.$(id).set_frequency($frequency, verbose=True)
self.$(id).set_gain($gain)
@@ -37,6 +40,25 @@ self.$(id).set_auto_tr($auto_tr)
</option>
</param>
<param>
+ <name>Format</name>
+ <key>format</key>
+ <value></value>
+ <type>enum</type>
+ <hide>#if $format.eval then '' else 'part'#</hide>
+ <option>
+ <name>16 Bits (Default)</name>
+ <key></key>
+ <opt>width:16</opt>
+ <opt>shift:0</opt>
+ </option>
+ <option>
+ <name>8 Bits, Shift 8</name>
+ <key>w8_s8</key>
+ <opt>width:8</opt>
+ <opt>shift:8</opt>
+ </option>
+ </param>
+ <param>
<name>Unit Number</name>
<key>number</key>
<value>0</value>
diff --git a/grc/data/platforms/python/blocks/usrp_simple_source_x.xml b/grc/data/platforms/python/blocks/usrp_simple_source_x.xml
index e1c43238a..f7f24898a 100644
--- a/grc/data/platforms/python/blocks/usrp_simple_source_x.xml
+++ b/grc/data/platforms/python/blocks/usrp_simple_source_x.xml
@@ -9,6 +9,9 @@
<key>usrp_simple_source_x</key>
<import>from grc_gnuradio import usrp as grc_usrp</import>
<make>grc_usrp.simple_source_$(type.fcn)(number=$number, side='$side', rx_ant='$rx_ant')
+#if $format.eval
+self.$(id).set_format(width=$format.width, shift=$format.shift)
+#end if
self.$(id).set_decim_rate($decimation)
self.$(id).set_frequency($frequency, verbose=True)
self.$(id).set_gain($gain)
@@ -34,6 +37,25 @@ self.$(id).set_auto_tr($auto_tr)
</option>
</param>
<param>
+ <name>Format</name>
+ <key>format</key>
+ <value></value>
+ <type>enum</type>
+ <hide>#if $format.eval then '' else 'part'#</hide>
+ <option>
+ <name>16 Bits (Default)</name>
+ <key></key>
+ <opt>width:16</opt>
+ <opt>shift:0</opt>
+ </option>
+ <option>
+ <name>8 Bits, Shift 8</name>
+ <key>w8_s8</key>
+ <opt>width:8</opt>
+ <opt>shift:8</opt>
+ </option>
+ </param>
+ <param>
<name>Unit Number</name>
<key>number</key>
<value>0</value>
diff --git a/grc/src/grc_gnuradio/usrp/common.py b/grc/src/grc_gnuradio/usrp/common.py
index 7c45c2604..423e35816 100644
--- a/grc/src/grc_gnuradio/usrp/common.py
+++ b/grc/src/grc_gnuradio/usrp/common.py
@@ -22,39 +22,40 @@ import sys
from gnuradio import usrp, gr
##################################################
-# Set frequency function w/ verbose option
+# USRP base class with common methods
##################################################
-def set_frequency(u, which, subdev, frequency, verbose=False):
- """
- Set the carrier frequency for the given subdevice.
- @param u the usrp source/sink
- @param which specifies the DDC/DUC number
- @param frequency the carrier frequency in Hz
- @param verbose if true, print usrp tuning information
- """
- r = u.tune(which, subdev, frequency)
- if not verbose: return
- print subdev.side_and_name()
- if r:
- print "\tr.baseband_frequency =", r.baseband_freq
- print "\tr.dxc_frequency =", r.dxc_freq
- print "\tr.residual_frequency =", r.residual_freq
- print "\tr.inverted =", r.inverted, "\n"
- else: print >> sys.stderr, 'Error calling tune on subdevice.'
+class usrp_helper(object):
+ def _make_usrp(self, *args, **kwargs): self._u = self._usrp_args[0](*args, **kwargs)
+ def _get_u(self): return self._u
+ def _get_io_size(self): return self._usrp_args[1]
+ def _set_frequency(self, which, subdev, frequency, verbose=False):
+ """
+ Set the carrier frequency for the given subdevice.
+ @param which specifies the DDC/DUC number
+ @param frequency the carrier frequency in Hz
+ @param verbose if true, print usrp tuning information
+ """
+ r = self._get_u().tune(which, subdev, frequency)
+ if not verbose: return
+ print subdev.side_and_name()
+ if r:
+ print "\tr.baseband_frequency =", r.baseband_freq
+ print "\tr.dxc_frequency =", r.dxc_freq
+ print "\tr.residual_frequency =", r.residual_freq
+ print "\tr.inverted =", r.inverted, "\n"
+ else: print >> sys.stderr, 'Error calling tune on subdevice.'
+ def set_format(self, width, shift): self._get_u().set_format(self._get_u().make_format(width, shift))
##################################################
# Classes to associate usrp constructor w/ io size
##################################################
-class usrp_helper(object):
- def _get_usrp_constructor(self): return self._usrp_args[0]
- def _get_io_size(self): return self._usrp_args[1]
class usrp_source_c(usrp_helper): _usrp_args = (usrp.source_c, gr.sizeof_gr_complex)
class usrp_source_s(usrp_helper): _usrp_args = (usrp.source_s, gr.sizeof_short)
class usrp_sink_c(usrp_helper): _usrp_args = (usrp.sink_c, gr.sizeof_gr_complex)
class usrp_sink_s(usrp_helper): _usrp_args = (usrp.sink_s, gr.sizeof_short)
##################################################
-# RX antenna definitions and helpers
+# Side spec and antenna spec functions
##################################################
def is_flex(rx_ant): return rx_ant.upper() in ('TX/RX', 'RX2')
def to_spec(side, rx_ant='RXA'):
diff --git a/grc/src/grc_gnuradio/usrp/dual_usrp.py b/grc/src/grc_gnuradio/usrp/dual_usrp.py
index d23e60cf9..fac3ab74b 100644
--- a/grc/src/grc_gnuradio/usrp/dual_usrp.py
+++ b/grc/src/grc_gnuradio/usrp/dual_usrp.py
@@ -43,34 +43,32 @@ class _dual_source(gr.hier_block2):
gr.io_signature(2, 2, self._get_io_size()),
)
#create usrp object
- self._u = self._get_usrp_constructor()(number, nchan=2)
+ self._make_usrp(number, nchan=2)
#get the mux for output A
subdev_spec_a = common.to_spec(side_a, rx_ant_a)
- self._subdev_a = usrp.selected_subdev(self._u, subdev_spec_a)
- mux_a = usrp.determine_rx_mux_value(self._u, subdev_spec_a)
+ self._subdev_a = usrp.selected_subdev(self._get_u(), subdev_spec_a)
+ mux_a = usrp.determine_rx_mux_value(self._get_u(), subdev_spec_a)
#get the mux for output B
subdev_spec_b = common.to_spec(side_b, rx_ant_b)
- self._subdev_b = usrp.selected_subdev(self._u, subdev_spec_b)
- mux_b = usrp.determine_rx_mux_value(self._u, subdev_spec_b)
+ self._subdev_b = usrp.selected_subdev(self._get_u(), subdev_spec_b)
+ mux_b = usrp.determine_rx_mux_value(self._get_u(), subdev_spec_b)
#move the lower byte of the mux b into the second byte of the mux a
- self._u.set_mux(((mux_b & 0xff) << 8) | (mux_a - (mux_a & 0xff00)))
+ self._get_u().set_mux(((mux_b & 0xff) << 8) | (mux_a - (mux_a & 0xff00)))
#connect
deinter = gr.deinterleave(self._get_io_size())
- self.connect(self._u, deinter)
+ self.connect(self._get_u(), deinter)
for i in range(2): self.connect((deinter, i), (self, i))
- def set_decim_rate(self, decim): self._u.set_decim_rate(int(decim))
+ def set_decim_rate(self, decim): self._get_u().set_decim_rate(int(decim))
def set_frequency_a(self, frequency, verbose=False):
- common.set_frequency(
- u=self._u,
+ self._set_frequency(
which=0, #ddc0
subdev=self._subdev_a,
frequency=frequency,
verbose=verbose,
)
def set_frequency_b(self, frequency, verbose=False):
- common.set_frequency(
- u=self._u,
+ self._set_frequency(
which=1, #ddc1
subdev=self._subdev_b,
frequency=frequency,
@@ -102,34 +100,32 @@ class _dual_sink(gr.hier_block2):
gr.io_signature(0, 0, 0),
)
#create usrp object
- self._u = self._get_usrp_constructor()(number, nchan=2)
+ self._make_usrp(number, nchan=2)
#get the mux for side A
subdev_spec_a = common.to_spec('A')
- self._subdev_a = usrp.selected_subdev(self._u, subdev_spec_a)
- mux_a = usrp.determine_tx_mux_value(self._u, subdev_spec_a)
+ self._subdev_a = usrp.selected_subdev(self._get_u(), subdev_spec_a)
+ mux_a = usrp.determine_tx_mux_value(self._get_u(), subdev_spec_a)
#get the mux for side B
subdev_spec_b = common.to_spec('B')
- self._subdev_b = usrp.selected_subdev(self._u, subdev_spec_b)
- mux_b = usrp.determine_tx_mux_value(self._u, subdev_spec_b)
+ self._subdev_b = usrp.selected_subdev(self._get_u(), subdev_spec_b)
+ mux_b = usrp.determine_tx_mux_value(self._get_u(), subdev_spec_b)
#set the mux
- self._u.set_mux(mux_a | mux_b)
+ self._get_u().set_mux(mux_a | mux_b)
#connect
inter = gr.interleave(self._get_io_size())
- self.connect(inter, self._u)
+ self.connect(inter, self._get_u())
for i in range(2): self.connect((self, i), (inter, i))
- def set_interp_rate(self, interp): self._u.set_interp_rate(int(interp))
+ def set_interp_rate(self, interp): self._get_u().set_interp_rate(int(interp))
def set_frequency_a(self, frequency, verbose=False):
- common.set_frequency(
- u=self._u,
+ self._set_frequency(
which=self._subdev_a.which(),
subdev=self._subdev_a,
frequency=frequency,
verbose=verbose,
)
def set_frequency_b(self, frequency, verbose=False):
- common.set_frequency(
- u=self._u,
+ self._set_frequency(
which=self._subdev_b.which(),
subdev=self._subdev_b,
frequency=frequency,
diff --git a/grc/src/grc_gnuradio/usrp/simple_usrp.py b/grc/src/grc_gnuradio/usrp/simple_usrp.py
index 2420c7571..1a2cf8f44 100644
--- a/grc/src/grc_gnuradio/usrp/simple_usrp.py
+++ b/grc/src/grc_gnuradio/usrp/simple_usrp.py
@@ -41,18 +41,17 @@ class _simple_source(gr.hier_block2):
gr.io_signature(1, 1, self._get_io_size()),
)
#create usrp object
- self._u = self._get_usrp_constructor()(number, nchan=1)
+ self._make_usrp(number, nchan=1)
subdev_spec = common.to_spec(side, rx_ant)
- self._u.set_mux(usrp.determine_rx_mux_value(self._u, subdev_spec))
- self._subdev = usrp.selected_subdev(self._u, subdev_spec)
+ self._get_u().set_mux(usrp.determine_rx_mux_value(self._get_u(), subdev_spec))
+ self._subdev = usrp.selected_subdev(self._get_u(), subdev_spec)
if common.is_flex(rx_ant): self._subdev.select_rx_antenna(rx_ant)
#connect
- self.connect(self._u, self)
+ self.connect(self._get_u(), self)
- def set_decim_rate(self, decim): self._u.set_decim_rate(int(decim))
+ def set_decim_rate(self, decim): self._get_u().set_decim_rate(int(decim))
def set_frequency(self, frequency, verbose=False):
- common.set_frequency(
- u=self._u,
+ self._set_frequency(
which=0, #ddc0
subdev=self._subdev,
frequency=frequency,
@@ -83,17 +82,16 @@ class _simple_sink(gr.hier_block2):
gr.io_signature(0, 0, 0),
)
#create usrp object
- self._u = self._get_usrp_constructor()(number, nchan=1)
+ self._make_usrp(number, nchan=1)
subdev_spec = common.to_spec(side)
- self._u.set_mux(usrp.determine_tx_mux_value(self._u, subdev_spec))
- self._subdev = usrp.selected_subdev(self._u, subdev_spec)
+ self._get_u().set_mux(usrp.determine_tx_mux_value(self._get_u(), subdev_spec))
+ self._subdev = usrp.selected_subdev(self._get_u(), subdev_spec)
#connect
- self.connect(self, self._u)
+ self.connect(self, self._get_u())
- def set_interp_rate(self, interp): self._u.set_interp_rate(int(interp))
+ def set_interp_rate(self, interp): self._get_u().set_interp_rate(int(interp))
def set_frequency(self, frequency, verbose=False):
- common.set_frequency(
- u=self._u,
+ self._set_frequency(
which=self._subdev.which(),
subdev=self._subdev,
frequency=frequency,