From 7787d1fc1aecc7b59e476c31865b4f32348cb729 Mon Sep 17 00:00:00 2001
From: Josh Blum
Date: Thu, 10 Feb 2011 00:56:55 -0800
Subject: uhd: replaced multi/single usrp stuff with just one usrp wrapper
---
gr-uhd/grc/gen_uhd_usrp_blocks.py | 307 ++++++++++++++++++++++++++++++++++++++
1 file changed, 307 insertions(+)
create mode 100644 gr-uhd/grc/gen_uhd_usrp_blocks.py
(limited to 'gr-uhd/grc/gen_uhd_usrp_blocks.py')
diff --git a/gr-uhd/grc/gen_uhd_usrp_blocks.py b/gr-uhd/grc/gen_uhd_usrp_blocks.py
new file mode 100644
index 000000000..ec4633427
--- /dev/null
+++ b/gr-uhd/grc/gen_uhd_usrp_blocks.py
@@ -0,0 +1,307 @@
+"""
+Copyright 2010-2011 Free Software Foundation, Inc.
+
+This file is part of GNU Radio
+
+GNU Radio Companion 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 2
+of the License, or (at your option) any later version.
+
+GNU Radio Companion 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 this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+"""
+
+MAIN_TMPL = """\
+
+
+ UHD: USRP $sourk.title()
+ uhd_usrp_$(sourk)
+ from gnuradio import uhd
+ uhd.usrp_$(sourk)(
+ device_addr=\$dev_addr,
+ io_type=uhd.io_type.\$type.type,
+ num_channels=\$nchan,
+)
+\#if \$ref_clk()
+self.\$(id).set_clock_config(uhd.clock_config.external(), uhd.ALL_MBOARDS);
+\#end if
+\#if \$sync()
+self.\$(id).set_time_unknown_pps(uhd.time_spec())
+\#end if
+#for $m in range($max_mboards)
+\#if \$num_mboards() > $m and \$sd_spec$(m)()
+self.\$(id).set_subdev_spec(\$sd_spec$(m), $m)
+\#end if
+#end for
+self.\$(id).set_samp_rate(\$samp_rate)
+#for $n in range($max_nchan)
+\#if \$nchan() > $n
+self.\$(id).set_center_freq(\$center_freq$(n), $n)
+self.\$(id).set_gain(\$gain$(n), $n)
+ \#if \$ant$(n)()
+self.\$(id).set_antenna(\$ant$(n), $n)
+ \#end if
+ \#if \$bw$(n)()
+self.\$(id).set_bandwidth(\$bw$(n), $n)
+ \#end if
+\#end if
+#end for
+
+ set_samp_rate(\$samp_rate)
+ #for $n in range($max_nchan)
+ set_center_freq(\$center_freq$(n), $n)
+ set_gain(\$gain$(n), $n)
+ set_antenna(\$ant$(n), $n)
+ set_bandwidth(\$bw$(n), $n)
+ #end for
+
+ Input Type
+ type
+ enum
+
+
+
+
+ Device Addr
+ dev_addr
+
+ string
+
+ \#if \$dev_addr()
+ none
+ \#else
+ part
+ \#end if
+
+
+
+ Ref Clock
+ ref_clk
+
+ enum
+ \#if \$ref_clk() then 'none' else 'part'#
+
+
+
+
+ Sync
+ sync
+ sync
+ enum
+ \#if \$sync() then 'none' else 'part'#
+
+
+
+
+ Num Mboards
+ num_mboards
+ 1
+ int
+ #for $m in range(1, $max_mboards+1)
+
+ #end for
+
+ #for $m in range($max_mboards)
+
+ Mb$(m): Subdev Spec
+ sd_spec$(m)
+
+ string
+
+ \#if not \$num_mboards() > $m
+ all
+ \#elif \$sd_spec$(m)()
+ none
+ \#else
+ part
+ \#end if
+
+
+ #end for
+
+ Num Channels
+ nchan
+ 2
+ int
+ #for $n in range(1, $max_nchan+1)
+
+ #end for
+
+
+ Samp Rate (Sps)
+ samp_rate
+ samp_rate
+ real
+
+ $params
+ $max_nchan >= \$nchan
+ \$nchan > 0
+ $max_mboards >= \$num_mboards
+ \$num_mboards > 0
+ \$nchan >= \$num_mboards
+ <$sourk>
+ $direction
+ \$type
+ \$type.vlen
+ \$nchan
+ $sourk>
+
+The UHD USRP $sourk.title() Block:
+
+Device Address:
+The device address is a delimited string used to locate UHD devices on your system. \\
+If left blank, the first UHD device found will be used. \\
+Use the device address to specify a specific device or list of devices.
+USRP1 Example: serial=12345678
+USRP2 Example: addr=192.168.10.2
+USRP2 Example: addr0=192.168.10.2, addr1=192.168.10.3
+
+Num Motherboards:
+Selects the number of USRP motherboards in this device configuration.
+
+Subdevice specification:
+Each motherboard should have its own subdevice specification \\
+and all subdevice specifications should be the same length. \\
+Select the subdevice or subdevices for each channel using a markup string. \\
+The markup string consists of a list of dboard_slot:subdev_name pairs (one pair per channel). \\
+If left blank, the UHD will try to select the first subdevice on your system. \\
+See the application notes for further details.
+Single channel example: :AB
+Dual channel example: :A :B
+
+Num Channels:
+Selects the total number of channels in this multi-USRP configuration.
+Ex: 4 motherboards with 2 channels per board = 8 channels total
+
+Sample rate:
+The sample rate is the number of samples per second input by this block. \\
+The UHD device driver will try its best to match the requested sample rate. \\
+If the requested rate is not possible, the UHD block will print an error at runtime.
+
+Center frequency:
+The center frequency is the overall frequency of the RF chain. \\
+For greater control of how the UHD tunes elements in the RF chain, \\
+pass a tune_request object rather than a simple target frequency.
+Tuning with an LO offset example: uhd.tune_request(freq, lo_off)
+
+Antenna:
+For subdevices with only one antenna, this may be left blank. \\
+Otherwise, the user should specify one of the possible antenna choices. \\
+See the daughterboard application notes for the possible antenna choices.
+
+Bandwidth:
+To use the default bandwidth filter setting, this should be zero. \\
+Only certain subdevices have configurable bandwidth filters. \\
+See the daughterboard application notes for possible configurations.
+
+
+"""
+
+PARAMS_TMPL = """
+
+ Ch$(n): Center Freq (Hz)
+ center_freq$(n)
+ 0
+ real
+ \#if \$nchan() > $n then 'none' else 'all'#
+
+
+ Ch$(n): Gain (dB)
+ gain$(n)
+ 0
+ real
+ \#if \$nchan() > $n then 'none' else 'all'#
+
+
+ Ch$(n): Antenna
+ ant$(n)
+
+ string
+
+ \#if not \$nchan() > $n
+ all
+ \#elif \$ant$(n)()
+ none
+ \#else
+ part
+ \#end if
+
+
+
+ Ch$(n): Bandwidth (Hz)
+ bw$(n)
+ 0
+ real
+
+ \#if not \$nchan() > $n
+ all
+ \#elif \$bw$(n)()
+ none
+ \#else
+ part
+ \#end if
+
+
+"""
+
+def parse_tmpl(_tmpl, **kwargs):
+ from Cheetah import Template
+ return str(Template.Template(_tmpl, kwargs))
+
+max_num_mboards = 4
+max_num_channels = max_num_mboards*4
+
+if __name__ == '__main__':
+ import sys
+ for file in sys.argv[1:]:
+ if 'source' in file:
+ sourk = 'source'
+ direction = 'out'
+ elif 'sink' in file:
+ sourk = 'sink'
+ direction = 'in'
+ else: raise Exception, 'is %s a source or sink?'%file
+
+ params = ''.join([parse_tmpl(PARAMS_TMPL, n=n) for n in range(max_num_channels)])
+ open(file, 'w').write(parse_tmpl(MAIN_TMPL,
+ max_nchan=max_num_channels,
+ max_mboards=max_num_mboards,
+ params=params,
+ sourk=sourk,
+ direction=direction,
+ ))
--
cgit