# # Copyright 2009 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. # _parser_to_groups_dict = dict() class _parser_groups(object): def __init__(self, parser): self.usrpx_grp = parser.add_option_group("General USRP Options") self.usrp1_grp = parser.add_option_group("USRP1 Specific Options") self.usrp1exp_grp = parser.add_option_group("USRP1 Expert Options") self.usrp2_grp = parser.add_option_group("USRP2 Specific Options") self.usrp2exp_grp = parser.add_option_group("USRP2 Expert Options") self.usrp_e_grp = parser.add_option_group("USRP_e100 Specific Options") from gnuradio import uhd from gnuradio import eng_notation def _add_options(parser): """ Add options to manually choose between usrp, usrp2 or usrp-e Add options for usb. Add options common to source and sink. @param parser: instance of OptionParser @return the parser group """ #cache groups so they dont get added twice on tranceiver apps if not _parser_to_groups_dict.has_key(parser): _parser_to_groups_dict[parser] = _parser_groups(parser) pg = _parser_to_groups_dict[parser] #pick usrp1, usrp2, or usrp-e pg.usrpx_grp.add_option("-t", "--devtype", type="string", default=None, help="specify which usrp model: usrp1 for USRP, usrp2 for USRP2 or usrp-e for USRP_e100 [default=auto]") pg.usrpx_grp.add_option("-n", "--name", type="string", default='', help="select USRP board by name [default=%default]") #fast usb options pg.usrp1exp_grp.add_option("-B", "--fusb-block-size", type="int", default=0, help="specify fast usb block size [default=%default]") pg.usrp1exp_grp.add_option("-N", "--fusb-nblocks", type="int", default=0, help="specify number of fast usb blocks [default=%default]") #lo offset pg.usrpx_grp.add_option("--lo-offset", type="eng_float", default=None, help="set LO Offset in Hz [default=automatic].") #usrp options pg.usrp1_grp.add_option("-s", "--serial", type="string", default=None, help="select USRP1 board by serial number[default=%default]") #usrp2 options pg.usrp2_grp.add_option("-a", "--ip-address", type="string", default=None, help="Use USRP2 at specified Ethernet interface [default=%default]") pg.usrp2exp_grp.add_option("", "--recv-buff-size", type="string", default=None, help="Specify the desired socket receiver buffer size in bytes") pg.usrp2exp_grp.add_option("", "--send-buff-size", type="string", default=None, help="Specify the desired socket send buffer size in bytes") return pg def add_rx_options(parser): """ Add receive specific usrp options. @param parser: instance of OptionParsergnuradio_core_runtime.p """ pg = _add_options(parser) pg.usrp1_grp.add_option("-R", "--rx-subdev-spec", type="subdev", default=None, help="select USRP Rx side A or B") pg.usrpx_grp.add_option("--rx-gain", type="eng_float", default=10, metavar="GAIN", help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range") pg.usrpx_grp.add_option("--show-rx-gain-range", action="store_true", default=False, help="print min and max Rx gain available on selected daughterboard") pg.usrpx_grp.add_option("-F", "--samprate", type="eng_float", default=None, help="set samplerate rate to SAMPLERATE [default=%default]") pg.usrpx_grp.add_option( "--rx2", action="store_true", default=False) def create_usrp_source(options): hint = '' if options.devtype == 'usrp1': hint = 'type=usrp1' if options.name != '' : hint += (', name=' + options.name) if options.serial : hint += (', serial=' + options.serial) if options.devtype == 'usrp2': hint = 'type=usrp2' if options.name != '': hint += (', name=' + options.name) if options.ip_address : hint += (', addr=' + options.ip_address) if options.recv_buff_size: hint += (', recv_buff_size=' + options.recv_buff_size) if options.devtype == 'usrp-e': hint = 'type=usrp-e' print "receiver:", hint u = uhd.single_usrp_source(hint, io_type=uhd.io_type_t.COMPLEX_FLOAT32, num_channels=1,) if options.rx2: u.set_antenna("RX2", 0) else: u.set_antenna("TX/RX", 0) print "RX antenna:", u.get_antenna() #print "RX IF bandwidth:", u.get_rx_bandwidth() u.set_gain(options.rx_gain) if options.show_rx_gain_range: #print "Rx Gain Range: minimum = %g, maximum = %g, step size = %g"%tuple(u.get_gain_range()) #FIXME print "Rx Gain Range:",u.get_gain_range() print "Current Rx Gain:", u.get_gain() return u def add_tx_options(parser): """ Add transmit specific usrp options. @param parser: instance of OptionParser """ pg = _add_options(parser) pg.usrp1_grp.add_option("-T", "--tx-subdev-spec", type="subdev", default=None, help="select USRP Rx side A or B") pg.usrpx_grp.add_option("--tx-gain", type="eng_float", default=10, metavar="GAIN", help="set transmitter gain in dB [default=midpoint]. See also --show-tx-gain-range") pg.usrpx_grp.add_option("--show-tx-gain-range", action="store_true", default=False, help="print min and max Tx gain available on selected daughterboard") pg.usrpx_grp.add_option("-F", "--samprate", type="eng_float", default=None, help="set samplerate rate to SAMPLERATE [default=%default]") print("test") def create_usrp_sink(options): hint = '' if options.devtype == 'usrp1': hint = 'type=usrp1' if options.name != '' : hint += (', name=' + options.name) if options.serial : hint += (', serial=' + options.serial) if options.devtype == 'usrp2': hint = 'type=usrp2' if options.name != '': hint += (', name=' + options.name) if options.ip_address : hint += (', addr=' + options.ip_address) if options.send_buff_size: hint += (', send_buff_size=' + options.send_buff_size) if options.recv_buff_size: hint += (', recv_buff_size=' + options.recv_buff_size) if options.devtype == 'usrp-e': hint = 'type=usrp-e' print "sender:", hint u = uhd.single_usrp_sink(hint, io_type=uhd.io_type_t.COMPLEX_FLOAT32, num_channels=1) print "TX antenna:", u.get_antenna() #print "RX IF bandwidth:", u.get_bandwidth() u.set_gain(options.tx_gain) if options.show_tx_gain_range: print "Tx Gain Range:",u.get_gain_range() #print tx_gain_range print "Current TX gain",u.get_gain() #print "Tx Gain Range: minimum = %g, maximum = %g, step size = %g"%tuple(tx_gain_range) return u