summaryrefslogtreecommitdiff
path: root/gr-uhd
diff options
context:
space:
mode:
Diffstat (limited to 'gr-uhd')
-rw-r--r--gr-uhd/Makefile.am2
-rw-r--r--gr-uhd/doc/.gitignore2
-rw-r--r--gr-uhd/doc/Makefile.am (renamed from gr-uhd/examples/multi-antenna/Makefile.am)10
-rw-r--r--gr-uhd/doc/README.uhd14
-rw-r--r--gr-uhd/doc/uhd.dox35
-rw-r--r--gr-uhd/examples/Makefile.am2
-rwxr-xr-xgr-uhd/examples/fm_tx4.py7
-rwxr-xr-xgr-uhd/examples/fm_tx_2_daughterboards.py9
-rwxr-xr-xgr-uhd/examples/max_power.py19
-rw-r--r--gr-uhd/examples/multi-antenna/.gitignore11
-rwxr-xr-xgr-uhd/examples/multi-antenna/multi_fft.py152
-rwxr-xr-xgr-uhd/examples/multi-antenna/multi_file.py134
-rwxr-xr-xgr-uhd/examples/multi-antenna/multi_scope.py139
-rwxr-xr-xgr-uhd/examples/usrp_am_mw_rcv.py7
-rwxr-xr-xgr-uhd/examples/usrp_nbfm_ptt.py19
-rwxr-xr-xgr-uhd/examples/usrp_nbfm_rcv.py11
-rwxr-xr-xgr-uhd/examples/usrp_spectrum_sense.py7
-rwxr-xr-xgr-uhd/examples/usrp_tv_rcv.py7
-rwxr-xr-xgr-uhd/examples/usrp_tv_rcv_nogui.py7
-rwxr-xr-xgr-uhd/examples/usrp_wfm_rcv.py7
-rwxr-xr-xgr-uhd/examples/usrp_wfm_rcv2_nogui.py7
-rwxr-xr-xgr-uhd/examples/usrp_wfm_rcv_fmdet.py11
-rwxr-xr-xgr-uhd/examples/usrp_wfm_rcv_nogui.py7
-rwxr-xr-xgr-uhd/examples/usrp_wfm_rcv_pll.py7
-rwxr-xr-xgr-uhd/examples/usrp_wfm_rcv_sca.py7
-rwxr-xr-xgr-uhd/examples/usrp_wxapt_rcv.py7
-rw-r--r--gr-uhd/include/gr_uhd_amsg_source.h4
-rw-r--r--gr-uhd/include/gr_uhd_usrp_sink.h1
-rw-r--r--gr-uhd/include/gr_uhd_usrp_source.h1
-rw-r--r--gr-uhd/swig/__init__.py15
-rw-r--r--gr-uhd/swig/uhd_swig.i11
31 files changed, 152 insertions, 527 deletions
diff --git a/gr-uhd/Makefile.am b/gr-uhd/Makefile.am
index c81a1a049..56829e9c4 100644
--- a/gr-uhd/Makefile.am
+++ b/gr-uhd/Makefile.am
@@ -21,7 +21,7 @@
include $(top_srcdir)/Makefile.common
-SUBDIRS = include lib apps examples
+SUBDIRS = include lib apps examples doc
if PYTHON
SUBDIRS += swig grc
diff --git a/gr-uhd/doc/.gitignore b/gr-uhd/doc/.gitignore
new file mode 100644
index 000000000..b336cc7ce
--- /dev/null
+++ b/gr-uhd/doc/.gitignore
@@ -0,0 +1,2 @@
+/Makefile
+/Makefile.in
diff --git a/gr-uhd/examples/multi-antenna/Makefile.am b/gr-uhd/doc/Makefile.am
index 0cb944589..eee3ebcf6 100644
--- a/gr-uhd/examples/multi-antenna/Makefile.am
+++ b/gr-uhd/doc/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2006,2009 Free Software Foundation, Inc.
+# Copyright 2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -21,9 +21,7 @@
include $(top_srcdir)/Makefile.common
-ourdatadir = $(exampledir)/multi-antenna
+SUBDIRS =
-dist_ourdata_SCRIPTS = \
- multi_fft.py \
- multi_file.py \
- multi_scope.py
+dist_gr_doc_DATA = \
+ README.uhd
diff --git a/gr-uhd/doc/README.uhd b/gr-uhd/doc/README.uhd
new file mode 100644
index 000000000..ec8024c09
--- /dev/null
+++ b/gr-uhd/doc/README.uhd
@@ -0,0 +1,14 @@
+This is the GNU Radio UHD package. It is the interface to the UHD
+library to connect to and send and receive data between the Ettus
+Research, LLC product line. To use the UHD blocks, the Python
+namespaces is in gnuradio.uhd, which would be normally imported
+as:
+
+ from gnuradio import uhd
+
+See the Doxygen documentation for details about the blocks available
+in this package. A quick listing of the details can be found in Python
+after importing by using:
+
+ help(uhd)
+
diff --git a/gr-uhd/doc/uhd.dox b/gr-uhd/doc/uhd.dox
new file mode 100644
index 000000000..f08fe2f06
--- /dev/null
+++ b/gr-uhd/doc/uhd.dox
@@ -0,0 +1,35 @@
+/*! \page page_uhd UHD Interface
+
+\section Introduction
+This is the GNU Radio UHD package. It is the interface to the UHD
+library to connect to and send and receive data between the Ettus
+Research, LLC product line. To use the UHD blocks, the Python
+namespaces is in gnuradio.uhd, which would be normally imported
+as:
+
+\code
+ from gnuradio import uhd
+\endcode
+
+The relevant blocks are listed in the \ref uhd_blk group.
+
+A quick listing of the details can be found in Python after importing
+by using:
+
+\code
+ help(uhd)
+\endcode
+
+
+\section External Documentation
+
+Ettus Research keeps the comprehensive documentation to the underlying UHD driver, which can be found:
+
+ http://files.ettus.com/uhd_docs/manual/html/
+
+The UHD Doxygen page is located:
+
+ http://files.ettus.com/uhd_docs/doxygen/html/index.html
+
+
+*/
diff --git a/gr-uhd/examples/Makefile.am b/gr-uhd/examples/Makefile.am
index b10b48928..a5dc177c4 100644
--- a/gr-uhd/examples/Makefile.am
+++ b/gr-uhd/examples/Makefile.am
@@ -21,7 +21,7 @@
include $(top_srcdir)/Makefile.common
-SUBDIRS = multi-antenna
+SUBDIRS =
ourdatadir = $(exampledir)/uhd
diff --git a/gr-uhd/examples/fm_tx4.py b/gr-uhd/examples/fm_tx4.py
index 9b39752c1..7b04ebd73 100755
--- a/gr-uhd/examples/fm_tx4.py
+++ b/gr-uhd/examples/fm_tx4.py
@@ -83,9 +83,8 @@ class fm_tx_block(stdgui2.std_top_block):
stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
parser = OptionParser (option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-s", "--samp-rate", type="eng_float", default=400e3,
@@ -116,7 +115,7 @@ class fm_tx_block(stdgui2.std_top_block):
# ----------------------------------------------------------------
# Set up constants and parameters
- self.u = uhd.usrp_sink(device_addr=options.address,
+ self.u = uhd.usrp_sink(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/fm_tx_2_daughterboards.py b/gr-uhd/examples/fm_tx_2_daughterboards.py
index 36d237616..25325bd19 100755
--- a/gr-uhd/examples/fm_tx_2_daughterboards.py
+++ b/gr-uhd/examples/fm_tx_2_daughterboards.py
@@ -88,9 +88,8 @@ class my_top_block(gr.top_block):
usage="%prog: [options] tx-freq0 tx-freq1"
parser = OptionParser (option_class=eng_option, usage=usage)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-s", "--samp-rate", type="eng_float", default=320e3,
@@ -109,10 +108,10 @@ class my_top_block(gr.top_block):
# ----------------------------------------------------------------
# Set up USRP to transmit on both daughterboards
- d = uhd.device_find(uhd.device_addr(options.address))
+ d = uhd.find_devices(uhd.device_addr(options.args))
uhd_type = d[0].get('type')
- self.u = uhd.usrp_sink(device_addr=options.address,
+ self.u = uhd.usrp_sink(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=2)
diff --git a/gr-uhd/examples/max_power.py b/gr-uhd/examples/max_power.py
index 44d3beeee..53e1b413c 100755
--- a/gr-uhd/examples/max_power.py
+++ b/gr-uhd/examples/max_power.py
@@ -39,14 +39,14 @@ n2s = eng_notation.num_to_str
MAX_RATE = 1000e6
class build_block(gr.top_block):
- def __init__(self, address, tx_enable, rx_enable):
+ def __init__(self, args, tx_enable, rx_enable):
gr.top_block.__init__(self)
- d = uhd.device_find(uhd.device_addr(address))
+ d = uhd.find_devices(uhd.device_addr(args))
uhd_type = d[0].get('type')
- print "\nFound '%s' at address '%s'" % \
- (uhd_type, address)
+ print "\nFound '%s' at args '%s'" % \
+ (uhd_type, args)
# Test the type of USRP; if it's a USRP (v1), it has
# 2 channels; otherwise, it has 1 channel
@@ -59,7 +59,7 @@ class build_block(gr.top_block):
if tx_enable:
print "\nTRANSMIT CHAIN"
- self.u_tx = uhd.usrp_sink(device_addr=address,
+ self.u_tx = uhd.usrp_sink(device_addr=args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=tx_nchan)
self.u_tx.set_samp_rate(MAX_RATE)
@@ -92,7 +92,7 @@ class build_block(gr.top_block):
if rx_enable:
print "\nRECEIVE CHAIN"
- self.u_rx = uhd.usrp_source(device_addr=address,
+ self.u_rx = uhd.usrp_source(device_addr=args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=rx_nchan)
self.rx_dst0 = gr.null_sink (gr.sizeof_gr_complex)
@@ -123,16 +123,15 @@ class build_block(gr.top_block):
def main ():
parser = OptionParser (option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-t", action="store_true", dest="tx_enable",
default=False, help="enable Tx path")
parser.add_option("-r", action="store_true", dest="rx_enable",
default=False, help="enable Rx path")
(options, args) = parser.parse_args ()
- tb = build_block (options.address, options.tx_enable, options.rx_enable)
+ tb = build_block (options.args, options.tx_enable, options.rx_enable)
tb.start ()
raw_input ('Press Enter to quit: ')
diff --git a/gr-uhd/examples/multi-antenna/.gitignore b/gr-uhd/examples/multi-antenna/.gitignore
deleted file mode 100644
index ff40c06f3..000000000
--- a/gr-uhd/examples/multi-antenna/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-/Makefile
-/Makefile.in
-/.la
-/.lo
-/.deps
-/.libs
-/*.la
-/*.lo
-/*.pyc
-/*.pyo
-/*.dat
diff --git a/gr-uhd/examples/multi-antenna/multi_fft.py b/gr-uhd/examples/multi-antenna/multi_fft.py
deleted file mode 100755
index d4c878c84..000000000
--- a/gr-uhd/examples/multi-antenna/multi_fft.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2011 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.
-#
-
-from gnuradio import gr, eng_notation
-from gnuradio import uhd
-from gnuradio.eng_option import eng_option
-from gnuradio import eng_notation
-from gnuradio import optfir
-from optparse import OptionParser
-from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2
-from gnuradio.wxgui import scopesink2, form, slider
-import wx
-import time
-import os.path
-import sys
-
-# required FPGA that can do 4 rx channels.
-
-class my_graph(stdgui2.std_top_block):
-
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.panel = panel
-
- parser = OptionParser (option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
- parser.add_option("-A", "--antenna", type="string", default=None,
- help="select Rx Antenna where appropriate")
- parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
- help="set sample rate (bandwidth) [default=%default]")
- parser.add_option("-f", "--freq", type="eng_float", default=None,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-F", "--filter", action="store_true", default=True,
- help="Enable channel filter")
- parser.add_option("-N", "--nchans", type="int", default=1,
- help="set number of channels (default=%default)")
- (options, args) = parser.parse_args()
-
- if len(args) != 0:
- parser.print_help()
- raise SystemExit
-
- self.nchans = options.nchans
-
- if options.filter:
- sw_decim = 4
- else:
- sw_decim = 1
-
- self.u = uhd.usrp_source(device_addr=options.address,
- io_type=uhd.io_type.COMPLEX_FLOAT32,
- num_channels=self.nchans)
- self.u.set_samp_rate(options.samp_rate)
- input_rate = self.u.get_samp_rate()
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.u.get_gain_range()
- options.gain = float(g.start()+g.stop())/2
-
- if options.freq is None:
- # if no freq was specified, use the mid-point
- r = self.u.get_freq_range()
- options.freq = float(r.start()+r.stop())/2
-
- self.set_gain(options.gain)
- self.set_freq(options.freq)
-
- #if self.u.nddcs() < nchan:
- # sys.stderr.write('This code requires an FPGA build with %d DDCs. This FPGA has only %d.\n' % (
- # nchan, self.u.nddcs()))
- # raise SystemExit
-
- #if (len (self.subdev) < 4 or
- # self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX or
- # self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX):
- # sys.stderr.write('This code requires a Basic Rx board on Sides A & B\n')
- # sys.exit(1)
-
- # deinterleave four channels from FPGA
- di = gr.deinterleave(gr.sizeof_gr_complex)
-
- self.connect(self.u, di)
-
- # taps for channel filter
- chan_filt_coeffs = optfir.low_pass (1, # gain
- input_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- #print len(chan_filt_coeffs)
-
- for i in range(self.nchans):
- scope = fftsink2.fft_sink_c(panel, sample_rate=input_rate/sw_decim,
- title="Input %d" % (i,),
- ref_level=80, y_per_div=20)
- vbox.Add(scope.win, 10, wx.EXPAND)
-
- if options.filter:
- chan_filt = gr.fir_filter_ccf(sw_decim, chan_filt_coeffs)
- self.connect((di, i), chan_filt, scope)
- else:
- self.connect((di, i), scope)
-
- def set_gain(self, gain):
- for i in range(self.nchans):
- self.u.set_gain(gain, i)
-
-
- def set_freq(self, target_freq):
- for i in range(self.nchans):
- r = self.u.set_center_freq(target_freq, 0)
-
- if r:
- return True
- else:
- print "set_freq: failed to set subdev[%d] freq to %f" % \
- (i, target_freq)
- return False
-
-def main ():
- app = stdgui2.stdapp(my_graph, "Multi Scope", nstatus=1)
- app.MainLoop()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-uhd/examples/multi-antenna/multi_file.py b/gr-uhd/examples/multi-antenna/multi_file.py
deleted file mode 100755
index 87d9085e3..000000000
--- a/gr-uhd/examples/multi-antenna/multi_file.py
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr, gru, eng_notation
-from gnuradio import usrp
-from gnuradio.eng_option import eng_option
-from gnuradio import eng_notation
-from gnuradio import optfir
-from optparse import OptionParser
-from usrpm import usrp_dbid
-import time
-import os.path
-import sys
-
-# required FPGA that can do 4 rx channels.
-
-
-class my_graph(gr.top_block):
-
- def __init__(self):
- gr.top_block.__init__(self)
-
- parser = OptionParser (option_class=eng_option)
- #parser.add_option("-S", "--subdev", type="subdev", default=(0, None),
- # help="select USRP Rx side A or B (default=A)")
- parser.add_option("-d", "--decim", type="int", default=128,
- help="set fgpa decimation rate to DECIM [default=%default]")
- parser.add_option("-f", "--freq", type="eng_float", default=146.585e6,
- help="set frequency to FREQ [default=%default])", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=20,
- help="set gain in dB [default=%default]")
- parser.add_option("-F", "--filter", action="store_true", default=True,
- help="Enable channel filter")
- parser.add_option("-o", "--output", type="string", default=None,
- help="set output basename")
- (options, args) = parser.parse_args()
-
- if len(args) != 0:
- parser.print_help()
- raise SystemExit
-
- if options.output is None:
- parser.print_help()
- sys.stderr.write("You must provide an output filename base with -o OUTPUT\n")
- raise SystemExit
- else:
- basename = options.output
-
- nchan = 4
- nsecs = 4.0
-
- if options.filter:
- sw_decim = 4
- else:
- sw_decim = 1
-
- self.u = usrp.source_c(0, options.decim, fpga_filename="std_4rx_0tx.rbf")
- if self.u.nddcs() < nchan:
- sys.stderr.write('This code requires an FPGA build with %d DDCs. This FPGA has only %d.\n' % (
- nchan, self.u.nddcs()))
- raise SystemExit
-
- if not self.u.set_nchannels(nchan):
- sys.stderr.write('set_nchannels(%d) failed\n' % (nchan,))
- raise SystemExit
-
- input_rate = self.u.adc_freq() / self.u.decim_rate()
- print "USB data rate = %s" % (eng_notation.num_to_str(input_rate),)
- sink_data_rate = input_rate/sw_decim
- print "Scope data rate = %s" % (eng_notation.num_to_str(sink_data_rate),)
-
- self.subdev = self.u.db(0) + self.u.db(1)
-
- if (len(self.subdev) < 4 or
- self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX or
- self.u.db(1, 0).dbid() != usrp_dbid.BASIC_RX):
- sys.stderr.write('This code requires a Basic Rx board on Sides A & B\n')
- sys.exit(1)
-
- self.u.set_mux(gru.hexint(0xf3f2f1f0))
-
- # collect 1 second worth of data
- limit = int(nsecs * input_rate * nchan)
- print "limit = ", limit
- head = gr.head(gr.sizeof_gr_complex, limit)
-
- # deinterleave four channels from FPGA
- di = gr.deinterleave(gr.sizeof_gr_complex)
-
- self.connect(self.u, head, di)
-
- # taps for channel filter
- chan_filt_coeffs = optfir.low_pass (1, # gain
- input_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- #print len(chan_filt_coeffs)
-
- for i in range(nchan):
-
- sink = gr.file_sink(gr.sizeof_gr_complex,
- basename + ("-%s-%d.dat" % (eng_notation.num_to_str(sink_data_rate), i)))
- if options.filter:
- chan_filt = gr.fir_filter_ccf(sw_decim, chan_filt_coeffs)
- self.connect((di, i), chan_filt, sink)
- else:
- self.connect((di, i), sink)
-
-
- self.set_gain(options.gain)
- self.set_freq(options.freq)
-
- def set_gain(self, gain):
- for i in range(len(self.subdev)):
- self.subdev[i].set_gain(gain)
-
- def set_freq(self, target_freq):
- ok = True
- for i in range(len(self.subdev)):
- r = usrp.tune(self.u, i, self.subdev[i], target_freq)
- if not r:
- ok = False
- print "set_freq: failed to set subdev[%d] freq to %f" % (
- i, target_freq)
-
- return ok
-
-
-def main ():
- my_graph().run()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-uhd/examples/multi-antenna/multi_scope.py b/gr-uhd/examples/multi-antenna/multi_scope.py
deleted file mode 100755
index d1e28ad18..000000000
--- a/gr-uhd/examples/multi-antenna/multi_scope.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr, gru, eng_notation
-from gnuradio import usrp
-from gnuradio.eng_option import eng_option
-from gnuradio import eng_notation
-from gnuradio import optfir
-from optparse import OptionParser
-from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider
-import wx
-from usrpm import usrp_dbid
-import time
-import os.path
-import sys
-
-# required FPGA that can do 4 rx channels.
-
-
-class my_top_block(stdgui2.std_top_block):
-
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.panel = panel
-
- parser = OptionParser (option_class=eng_option)
- #parser.add_option("-S", "--subdev", type="subdev", default=(0, None),
- # help="select USRP Rx side A or B (default=A)")
- parser.add_option("-d", "--decim", type="int", default=128,
- help="set fgpa decimation rate to DECIM [default=%default]")
- parser.add_option("-f", "--freq", type="eng_float", default=146.585e6,
- help="set frequency to FREQ [default=%default])", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=20,
- help="set gain in dB [default=%default]")
- parser.add_option("-F", "--filter", action="store_true", default=True,
- help="Enable channel filter")
- (options, args) = parser.parse_args()
-
- if len(args) != 0:
- parser.print_help()
- raise SystemExit
-
- nchan = 4
-
- if options.filter:
- sw_decim = 4
- else:
- sw_decim = 1
-
- self.u = usrp.source_c(0, options.decim, fpga_filename="std_4rx_0tx.rbf")
- if self.u.nddcs() < nchan:
- sys.stderr.write('This code requires an FPGA build with %d DDCs. This FPGA has only %d.\n' % (
- nchan, self.u.nddcs()))
- raise SystemExit
-
- if not self.u.set_nchannels(nchan):
- sys.stderr.write('set_nchannels(%d) failed\n' % (nchan,))
- raise SystemExit
-
- input_rate = self.u.adc_freq() / self.u.decim_rate()
- print "USB data rate = %s" % (eng_notation.num_to_str(input_rate),)
- print "Scope data rate = %s" % (eng_notation.num_to_str(input_rate/sw_decim),)
-
- self.subdev = self.u.db(0) + self.u.db(1)
-
- if (len(self.subdev) < 4 or
- self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX or
- self.u.db(0, 0).dbid() != usrp_dbid.BASIC_RX):
- sys.stderr.write('This code requires a Basic Rx board on Sides A & B\n')
- sys.exit(1)
-
- self.u.set_mux(gru.hexint(0xf3f2f1f0))
-
- # deinterleave four channels from FPGA
- di = gr.deinterleave(gr.sizeof_gr_complex)
-
- self.connect(self.u, di)
-
- # our destination (8 float inputs)
- self.scope = scopesink2.scope_sink_f(panel, sample_rate=input_rate/sw_decim,
- num_inputs=2*nchan)
-
- # taps for channel filter
- chan_filt_coeffs = optfir.low_pass (1, # gain
- input_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- #print len(chan_filt_coeffs)
-
- # bust the deinterleaved complex channels into floats
- for i in range(nchan):
-
- if options.filter:
- chan_filt = gr.fir_filter_ccf(sw_decim, chan_filt_coeffs)
- c2f = gr.complex_to_float()
- self.connect((di, i), chan_filt, c2f)
- else:
- c2f = gr.complex_to_float()
- self.connect((di, i), c2f)
-
- self.connect((c2f, 0), (self.scope, 2*i + 0))
- self.connect((c2f, 1), (self.scope, 2*i + 1))
-
-
- self._build_gui(vbox)
-
- self.set_gain(options.gain)
- self.set_freq(options.freq)
-
- def set_gain(self, gain):
- for i in range(len(self.subdev)):
- self.subdev[i].set_gain(gain)
-
- def set_freq(self, target_freq):
- ok = True
- for i in range(len(self.subdev)):
- r = usrp.tune(self.u, i, self.subdev[i], target_freq)
- if not r:
- ok = False
- print "set_freq: failed to set subdev[%d] freq to %f" % (
- i, target_freq)
-
- return ok
-
-
- def _build_gui(self, vbox):
- vbox.Add(self.scope.win, 10, wx.EXPAND)
-
-
-
-def main ():
- app = stdgui2.stdapp(my_top_block, "Multi Scope", nstatus=1)
- app.MainLoop()
-
-if __name__ == '__main__':
- main ()
diff --git a/gr-uhd/examples/usrp_am_mw_rcv.py b/gr-uhd/examples/usrp_am_mw_rcv.py
index 130bdcf56..a4fba9f0e 100755
--- a/gr-uhd/examples/usrp_am_mw_rcv.py
+++ b/gr-uhd/examples/usrp_am_mw_rcv.py
@@ -38,9 +38,8 @@ class wfm_rx_block (stdgui2.std_top_block):
stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
@@ -74,7 +73,7 @@ class wfm_rx_block (stdgui2.std_top_block):
self.freq = 0
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_nbfm_ptt.py b/gr-uhd/examples/usrp_nbfm_ptt.py
index af3b132f4..1f8a72e79 100755
--- a/gr-uhd/examples/usrp_nbfm_ptt.py
+++ b/gr-uhd/examples/usrp_nbfm_ptt.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2005,2007.2011 Free Software Foundation, Inc.
+# Copyright 2005,2007,2011 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -48,9 +48,8 @@ class ptt_block(stdgui2.std_top_block):
self.space_bar_pressed = False
parser = OptionParser (option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option ("-f", "--freq", type="eng_float", default=442.1e6,
@@ -73,9 +72,9 @@ class ptt_block(stdgui2.std_top_block):
if options.freq < 1e6:
options.freq *= 1e6
- self.txpath = transmit_path(options.address, options.tx_gain,
+ self.txpath = transmit_path(options.args, options.tx_gain,
options.audio_input)
- self.rxpath = receive_path(options.address, options.rx_gain,
+ self.rxpath = receive_path(options.args, options.rx_gain,
options.audio_output)
self.connect(self.txpath)
self.connect(self.rxpath)
@@ -273,12 +272,12 @@ class ptt_block(stdgui2.std_top_block):
# ////////////////////////////////////////////////////////////////////////
class transmit_path(gr.hier_block2):
- def __init__(self, address, gain, audio_input):
+ def __init__(self, args, gain, audio_input):
gr.hier_block2.__init__(self, "transmit_path",
gr.io_signature(0, 0, 0), # Input signature
gr.io_signature(0, 0, 0)) # Output signature
- self.u = uhd.usrp_sink(device_addr=address,
+ self.u = uhd.usrp_sink(device_addr=args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
@@ -361,12 +360,12 @@ class transmit_path(gr.hier_block2):
# ////////////////////////////////////////////////////////////////////////
class receive_path(gr.hier_block2):
- def __init__(self, address, gain, audio_output):
+ def __init__(self, args, gain, audio_output):
gr.hier_block2.__init__(self, "receive_path",
gr.io_signature(0, 0, 0), # Input signature
gr.io_signature(0, 0, 0)) # Output signature
- self.u = uhd.usrp_source(device_addr=address,
+ self.u = uhd.usrp_source(device_addr=args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_nbfm_rcv.py b/gr-uhd/examples/usrp_nbfm_rcv.py
index 2dc69423c..829381e7a 100755
--- a/gr-uhd/examples/usrp_nbfm_rcv.py
+++ b/gr-uhd/examples/usrp_nbfm_rcv.py
@@ -38,9 +38,8 @@ class my_top_block (stdgui2.std_top_block):
stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-f", "--freq", type="eng_float", default=146.585e6,
@@ -68,7 +67,7 @@ class my_top_block (stdgui2.std_top_block):
self.freq = 0
self.freq_step = 25e3
- self.rxpath = receive_path(options.address, options.antenna,
+ self.rxpath = receive_path(options.args, options.antenna,
options.gain, options.audio_output)
self.connect(self.rxpath)
@@ -260,12 +259,12 @@ class my_top_block (stdgui2.std_top_block):
USE_SIMPLE_SQUELCH = False
class receive_path(gr.hier_block2):
- def __init__(self, address, antenna, gain, audio_output):
+ def __init__(self, args, antenna, gain, audio_output):
gr.hier_block2.__init__(self, "receive_path",
gr.io_signature(0, 0, 0), # Input signature
gr.io_signature(0, 0, 0)) # Output signature
- self.u = uhd.usrp_source(device_addr=address,
+ self.u = uhd.usrp_source(device_addr=args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_spectrum_sense.py b/gr-uhd/examples/usrp_spectrum_sense.py
index e89745b3b..cf41e7043 100755
--- a/gr-uhd/examples/usrp_spectrum_sense.py
+++ b/gr-uhd/examples/usrp_spectrum_sense.py
@@ -84,9 +84,8 @@ class my_top_block(gr.top_block):
usage = "usage: %prog [options] min_freq max_freq"
parser = OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
@@ -130,7 +129,7 @@ class my_top_block(gr.top_block):
print "Note: failed to enable realtime scheduling"
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_tv_rcv.py b/gr-uhd/examples/usrp_tv_rcv.py
index a68867365..2ad1f2122 100755
--- a/gr-uhd/examples/usrp_tv_rcv.py
+++ b/gr-uhd/examples/usrp_tv_rcv.py
@@ -62,9 +62,8 @@ class tv_rx_block (stdgui2.std_top_block):
usage="%prog: [options] [input_filename]. \n If you don't specify an input filename the usrp will be used as source\n " \
"Make sure your input capture file containes interleaved shorts not complex floats"
parser=OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
@@ -130,7 +129,7 @@ class tv_rx_block (stdgui2.std_top_block):
self.gain=0.0
else: # use a UHD device
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_tv_rcv_nogui.py b/gr-uhd/examples/usrp_tv_rcv_nogui.py
index a44e20d39..3fe426fbc 100755
--- a/gr-uhd/examples/usrp_tv_rcv_nogui.py
+++ b/gr-uhd/examples/usrp_tv_rcv_nogui.py
@@ -59,9 +59,8 @@ class my_top_block(gr.top_block):
"Make sure your input capture file containes interleaved " + \
"shorts not complex floats")
parser = OptionParser(option_class=eng_option, usage=usage)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-s", "--samp-rate", type="eng_float", default=1e6,
@@ -130,7 +129,7 @@ class my_top_block(gr.top_block):
raise SystemExit, 1
# build the graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_wfm_rcv.py b/gr-uhd/examples/usrp_wfm_rcv.py
index 7b35fbbe4..138e5045b 100755
--- a/gr-uhd/examples/usrp_wfm_rcv.py
+++ b/gr-uhd/examples/usrp_wfm_rcv.py
@@ -34,9 +34,8 @@ class wfm_rx_block (stdgui2.std_top_block):
stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
@@ -68,7 +67,7 @@ class wfm_rx_block (stdgui2.std_top_block):
self.fm_freq_max = options.freq_max
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_wfm_rcv2_nogui.py b/gr-uhd/examples/usrp_wfm_rcv2_nogui.py
index 013a6864f..13f89c71c 100755
--- a/gr-uhd/examples/usrp_wfm_rcv2_nogui.py
+++ b/gr-uhd/examples/usrp_wfm_rcv2_nogui.py
@@ -33,9 +33,8 @@ class wfm_rx_block (gr.top_block):
gr.top_block.__init__(self)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("", "--f1", type="eng_float", default=100.7e6,
@@ -69,7 +68,7 @@ class wfm_rx_block (gr.top_block):
self.fm_freq_max = options.freq_max
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=2)
diff --git a/gr-uhd/examples/usrp_wfm_rcv_fmdet.py b/gr-uhd/examples/usrp_wfm_rcv_fmdet.py
index 53ad6edbf..d13ebe829 100755
--- a/gr-uhd/examples/usrp_wfm_rcv_fmdet.py
+++ b/gr-uhd/examples/usrp_wfm_rcv_fmdet.py
@@ -28,18 +28,13 @@ from optparse import OptionParser
import sys
import wx
-import os
-print os.getpid()
-raw_input()
-
class wfm_rx_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
@@ -74,7 +69,7 @@ class wfm_rx_block (stdgui2.std_top_block):
self.fm_freq_max = options.freq_max
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_wfm_rcv_nogui.py b/gr-uhd/examples/usrp_wfm_rcv_nogui.py
index ffeda4493..7c2c6050d 100755
--- a/gr-uhd/examples/usrp_wfm_rcv_nogui.py
+++ b/gr-uhd/examples/usrp_wfm_rcv_nogui.py
@@ -32,9 +32,8 @@ class wfm_rx_block (gr.top_block):
gr.top_block.__init__(self)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
@@ -62,7 +61,7 @@ class wfm_rx_block (gr.top_block):
self.fm_freq_max = options.freq_max
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_wfm_rcv_pll.py b/gr-uhd/examples/usrp_wfm_rcv_pll.py
index 2cb4e4068..78c05e057 100755
--- a/gr-uhd/examples/usrp_wfm_rcv_pll.py
+++ b/gr-uhd/examples/usrp_wfm_rcv_pll.py
@@ -34,9 +34,8 @@ class wfm_rx_block (stdgui2.std_top_block):
stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
@@ -70,7 +69,7 @@ class wfm_rx_block (stdgui2.std_top_block):
self.fm_freq_max = options.freq_max
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_wfm_rcv_sca.py b/gr-uhd/examples/usrp_wfm_rcv_sca.py
index 1c6154871..f0f6aec66 100755
--- a/gr-uhd/examples/usrp_wfm_rcv_sca.py
+++ b/gr-uhd/examples/usrp_wfm_rcv_sca.py
@@ -64,9 +64,8 @@ class wfm_rx_sca_block (stdgui2.std_top_block):
stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-f", "--freq", type="eng_float", default=100.1e6,
@@ -99,7 +98,7 @@ class wfm_rx_sca_block (stdgui2.std_top_block):
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/examples/usrp_wxapt_rcv.py b/gr-uhd/examples/usrp_wxapt_rcv.py
index 5b44398d1..809756d96 100755
--- a/gr-uhd/examples/usrp_wxapt_rcv.py
+++ b/gr-uhd/examples/usrp_wxapt_rcv.py
@@ -34,9 +34,8 @@ class wxapt_rx_block (stdgui2.std_top_block):
stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
- parser.add_option("-a", "--address", type="string",
- default="addr=192.168.10.2",
- help="Address of UHD device, [default=%default]")
+ parser.add_option("-a", "--args", type="string", default="",
+ help="UHD device address args, [default=%default]")
parser.add_option("-A", "--antenna", type="string", default=None,
help="select Rx Antenna where appropriate")
parser.add_option("-f", "--freq", type="eng_float", default=137.5e6,
@@ -68,7 +67,7 @@ class wxapt_rx_block (stdgui2.std_top_block):
self.freq_max = options.freq_max
# build graph
- self.u = uhd.usrp_source(device_addr=options.address,
+ self.u = uhd.usrp_source(device_addr=options.args,
io_type=uhd.io_type.COMPLEX_FLOAT32,
num_channels=1)
diff --git a/gr-uhd/include/gr_uhd_amsg_source.h b/gr-uhd/include/gr_uhd_amsg_source.h
index bc0feb438..accf15ce2 100644
--- a/gr-uhd/include/gr_uhd_amsg_source.h
+++ b/gr-uhd/include/gr_uhd_amsg_source.h
@@ -28,6 +28,10 @@
class uhd_amsg_source;
+/*!
+ * \brief Make a new USRP asynchronous message-based source block.
+ * \ingroup uhd_blk
+ */
GR_UHD_API boost::shared_ptr<uhd_amsg_source> uhd_make_amsg_source(
const uhd::device_addr_t &device_addr,
gr_msg_queue_sptr msgq
diff --git a/gr-uhd/include/gr_uhd_usrp_sink.h b/gr-uhd/include/gr_uhd_usrp_sink.h
index c1fc3b09e..f11d00063 100644
--- a/gr-uhd/include/gr_uhd_usrp_sink.h
+++ b/gr-uhd/include/gr_uhd_usrp_sink.h
@@ -30,6 +30,7 @@ class uhd_usrp_sink;
/*!
* \brief Make a new USRP sink block.
+ * \ingroup uhd_blk
*
* The USRP sink block reads a stream and transmits the samples.
* The sink block also provides API calls for transmitter settings.
diff --git a/gr-uhd/include/gr_uhd_usrp_source.h b/gr-uhd/include/gr_uhd_usrp_source.h
index f8ac9361e..fecc6e94d 100644
--- a/gr-uhd/include/gr_uhd_usrp_source.h
+++ b/gr-uhd/include/gr_uhd_usrp_source.h
@@ -30,6 +30,7 @@ class uhd_usrp_source;
/*!
* \brief Make a new USRP source block.
+ * \ingroup uhd_blk
*
* The USRP source block receives samples and writes to a stream.
* The source block also provides API calls for receiver settings.
diff --git a/gr-uhd/swig/__init__.py b/gr-uhd/swig/__init__.py
index 1f82b4a26..7745b4b79 100644
--- a/gr-uhd/swig/__init__.py
+++ b/gr-uhd/swig/__init__.py
@@ -19,6 +19,12 @@
# Boston, MA 02110-1301, USA.
#
+'''
+This is the GNU Radio UHD package. It is the interface to the UHD
+library to connect to and send and receive data between the Ettus
+Research, LLC product line.
+'''
+
########################################################################
# Prepare uhd swig module to make it more pythonic
########################################################################
@@ -63,6 +69,15 @@ def _prepare_uhd_swig():
if hasattr(myobj, 'to_real'): myobj.__float__ = lambda o: o.to_real()
if attr.endswith('_t'): setattr(uhd_swig, attr[:-2], myobj)
+ #make a new find devices that casts everything with the pythonized device_addr_t which has __str__
+ def find_devices(*args, **kwargs):
+ def to_pythonized_dev_addr(dev_addr):
+ new_dev_addr = uhd_swig.device_addr_t()
+ for key in dev_addr.keys(): new_dev_addr[key] = dev_addr.get(key)
+ return new_dev_addr
+ return map(to_pythonized_dev_addr, uhd_swig.find_devices_raw(*args, **kwargs))
+ setattr(uhd_swig, 'find_devices', find_devices)
+
#Cast constructor args (FIXME swig handle overloads?)
for attr in ('usrp_source', 'usrp_sink', 'amsg_source'):
def constructor_factory(old_constructor):
diff --git a/gr-uhd/swig/uhd_swig.i b/gr-uhd/swig/uhd_swig.i
index f8381ae64..7e612907c 100644
--- a/gr-uhd/swig/uhd_swig.i
+++ b/gr-uhd/swig/uhd_swig.i
@@ -102,6 +102,17 @@ GR_SWIG_BLOCK_MAGIC(uhd,amsg_source)
%include <gr_uhd_amsg_source.h>
////////////////////////////////////////////////////////////////////////
+// device discovery (no need to %include device.hpp)
+////////////////////////////////////////////////////////////////////////
+%{
+static uhd::device_addrs_t find_devices_raw(const uhd::device_addr_t &dev_addr = uhd::device_addr_t()){
+ return uhd::device::find(dev_addr);
+}
+%}
+
+static uhd::device_addrs_t find_devices_raw(const uhd::device_addr_t &dev_addr = uhd::device_addr_t());
+
+////////////////////////////////////////////////////////////////////////
// helpful constants
////////////////////////////////////////////////////////////////////////
%{