commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r5992 - grc/trunk/src/SignalBlockDefs


From: jblum
Subject: [Commit-gnuradio] r5992 - grc/trunk/src/SignalBlockDefs
Date: Mon, 16 Jul 2007 16:41:45 -0600 (MDT)

Author: jblum
Date: 2007-07-16 16:41:44 -0600 (Mon, 16 Jul 2007)
New Revision: 5992

Modified:
   grc/trunk/src/SignalBlockDefs/Sources.py
   grc/trunk/src/SignalBlockDefs/USRP.py
Log:
usrp blocks with flex rf support

Modified: grc/trunk/src/SignalBlockDefs/Sources.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/Sources.py    2007-07-16 20:24:01 UTC (rev 
5991)
+++ grc/trunk/src/SignalBlockDefs/Sources.py    2007-07-16 22:41:44 UTC (rev 
5992)
@@ -43,19 +43,20 @@
                ('Int', (gr.sig_source_i, Int())), 
                ('Short', (gr.sig_source_s, Short())),
        ], 1)
-       wfm_types = [('Constant', gr.GR_CONST_WAVE), 
-                                       ('Cosine', gr.GR_COS_WAVE), 
-                                       ('Sine', gr.GR_SIN_WAVE),]
-       try: wfm_types = wfm_types + [('Square', gr.GR_SQR_WAVE),
-                                                                               
        ('Triangle', gr.GR_TRI_WAVE),
-                                                                               
        ('Saw Tooth', gr.GR_SAW_WAVE),]
-       except: print ">>> sig source missing sqr, tri, saw waveform types"
+       wfm_types = [
+               ('Constant', gr.GR_CONST_WAVE), 
+               ('Cosine', gr.GR_COS_WAVE), 
+               ('Sine', gr.GR_SIN_WAVE),
+               ('Square', gr.GR_SQR_WAVE),
+               ('Triangle', gr.GR_TRI_WAVE),
+               ('Saw Tooth', gr.GR_SAW_WAVE),
+       ]
        sb.add_output_socket('out', Variable(type, index=1))
        sb.add_param('Type', type, False, type=True)
        sb.add_param('Sampling Rate', Float(default_samp_rate), variable=True)
        sb.add_param('Wave Form', Enum(wfm_types, 1))
        sb.add_param('Frequency', Float(1000), variable=True)
-       sb.add_param('Ampliude', Float(1), variable=True)
+       sb.add_param('Amplitude', Float(1), variable=True)
        sb.add_param('Offset', Variable(type, index=1), variable=True)
        def make(fg, type, samp_freq, waveform, freq, amplitude, offset):
                block = type.parse()[0](samp_freq.parse(), waveform.parse(), 
freq.parse(), amplitude.parse(), offset.parse())           

Modified: grc/trunk/src/SignalBlockDefs/USRP.py
===================================================================
--- grc/trunk/src/SignalBlockDefs/USRP.py       2007-07-16 20:24:01 UTC (rev 
5991)
+++ grc/trunk/src/SignalBlockDefs/USRP.py       2007-07-16 22:41:44 UTC (rev 
5992)
@@ -23,7 +23,70 @@
 from DataTypes import *
 from gnuradio import gr
 
-def set_freq(u, which, subdev, freq, verbose=False):
+####################################################################
+#      Constants
+####################################################################
+
+##default interpolation for a new sink
+DEFAULT_INTERP = 512
+
+##default decimation for a new source
+DEFAULT_DECIM = 256
+
+##auto tr options
+_auto_tr_options = [
+       ('Ignore', None),
+       ('Enable', True),
+       ('Disable', False),
+]
+
+##transmit enable options
+_tx_enb_options = [
+       ('Ignore', None),
+       ('Enable', True),
+       ('Disable', False),
+]
+
+##receive antenna options
+_rx_ant_options = [
+       ('Ignore', None),
+       ('TX/RX', 'TX/RX'),
+       ('RX2', 'RX2'),
+]
+
+##helpful usrp source message
+_usrp_source_msg = '''
+The USRP source outputs 64 Megasamples per second / decimation.
+
+--- Flex RF specific ---
+The "Auto TR" and "RX Antenna" settings are flex rf specific and should be 
left at "Ignore" unless this is a flex rf board.
+
+If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
+By default, "Auto TR" is disabled.
+
+The "Receive Antenna Setting" selects one of the SMA connectors as the data 
source. \
+By default, 'TX/RX' is selected.
+'''
+
+##helpful usrp sink message
+_usrp_sink_msg = '''
+The USRP sink inputs 128 Megasamples per second / interpolation.
+
+--- Flex RF specific ---
+The "Auto TR" and "TX Enable" settings are flex rf specific and should be left 
at "Ignore" unless this is a flex rf board.
+
+If enabled, "Auto Transmit/Receive Switching" handles the preference for 
transmit packets vs receive packets. \
+By default, "Auto TR" is disabled.
+
+The "Transmit Enable" configures the transmitter to be on or off. \
+Do not leave this unconfigured.
+'''
+
+####################################################################
+#      Helper Functions
+####################################################################
+
+def _set_freq(u, which, subdev, freq, verbose=False):
        """!
        Set the carrier frequency for the given subdevice.      
        @param u the usrp source/sink
@@ -40,7 +103,56 @@
                        print "  r.residual_freq =", r.residual_freq
                        print "  r.inverted      =", r.inverted
                else: print "  Failed!" 
+               
+def _setup_rx_subdev(fg, u, subdev_spec, ddc, gain, freq, auto_tr=None, 
rx_ant=None):
+       """
+       Setup a usrp receive subdevice by setting gain and freq.
+       Add the gain and freq callbacks to the flow graph.
+       FlexRF: Handle auto transmit/receive and set the receive antenna. 
+       @param fg the flow graph
+       @param u the usrp object
+       @param subdev the sub-device specification
+       @param ddc which ddc to use: 0 or 1
+       @param gain the gain DataType
+       @param freq the freq DataType
+       @param auto_tr auto transmit/receive True, False, or None
+       @param rx_ant the receive antenna: 'TX/RX', 'RX2', or None
+       """
+       from gnuradio import usrp
+       subdev = usrp.selected_subdev(u, subdev_spec)#get the subdev
+       subdev.set_gain(gain.parse())   
+       _set_freq(u, ddc, subdev, freq.parse(), verbose=True)
+       fg.add_callback(lambda f: _set_freq(u, ddc, subdev, f), freq)
+       fg.add_callback(subdev.set_gain, gain) #callback for gain setting 
+       if auto_tr != None: subdev.set_auto_tr(auto_tr)
+       if rx_ant != None: subdev.select_rx_antenna(rx_ant)
 
+def _setup_tx_subdev(fg, u, subdev_spec, gain, freq, auto_tr=None, 
tx_enb=None):
+       """
+       Setup a usrp receive subdevice by setting gain and freq.
+       Add the gain and freq callbacks to the flow graph.
+       FlexRF: Handle auto transmit/receive and enable the transmitter. 
+       @param fg the flow graph
+       @param u the usrp object
+       @param subdev the sub-device specification
+       @param gain the gain DataType
+       @param freq the freq DataType
+       @param auto_tr auto transmit/receive True, False, or None
+       @param tr_enb the transmit enable: True, False, or None
+       """
+       from gnuradio import usrp
+       subdev = usrp.selected_subdev(u, subdev_spec)#get the subdev
+       subdev.set_gain(gain.parse())   
+       _set_freq(u, subdev._which, subdev, freq.parse(), verbose=True)
+       fg.add_callback(lambda f: _set_freq(u, subdev._which, subdev, f), freq)
+       fg.add_callback(subdev.set_gain, gain) #callback for gain setting 
+       if auto_tr != None: subdev.set_auto_tr(auto_tr)
+       if tx_enb != None: subdev.set_enable(tx_enb)
+               
+####################################################################
+#      Reguar USRP Source
+####################################################################
+
 def USRPSource(sb):
        from gnuradio import usrp
        type = Enum([('Complex', (usrp.source_c, Complex())), ('IShort', 
(usrp.source_s, Short()))])
@@ -55,31 +167,73 @@
                ('Side B:1', (1, 1)),
        ]))
        sb.add_param('Frequency', Float(), variable=True)
-       sb.add_param('Decimation', Int(200, min=1))
-       sb.add_param('Gain', Float(100), variable=True)
+       sb.add_param('Decimation', Int(DEFAULT_DECIM, min=1))
+       sb.add_param('Gain', Float(0), variable=True)
        sb.add_param('Mux', Hex())
+       sb.add_param('Auto T/R', Enum(_auto_tr_options))
+       sb.add_param('RX Antenna', Enum(_rx_ant_options))
        sb.set_docs('''\
-The USRP source outputs 64 Megasamples per second / decimation.
 If left at 0, the Mux value will be automatically determined. \
-Otherwise, the Mux value must be in hexidecimal format.''')
-       def make(fg, type, number, subdev_spec, frequency, decimation, gain, 
mux):
+Otherwise, the Mux value must be in hexidecimal format.
+''' + _usrp_source_msg)
+       def make(fg, type, number, subdev_spec, freq, decim, gain, mux, 
auto_tr, rx_ant):
                number = number.parse()
                subdev_spec = subdev_spec.parse()       
                u = type.parse()[0](number, nchan=1)
                if subdev_spec == None: subdev_spec = usrp.pick_rx_subdevice(u)
-               u.set_decim_rate(decimation.parse())
+               u.set_decim_rate(decim.parse())
                if mux.parse() == 0: mux = usrp.determine_rx_mux_value(u, 
subdev_spec)
                else: mux = mux.parse()
-               u.set_mux(mux)
-               subdev = usrp.selected_subdev(u, subdev_spec)#get the subdev
-               subdev.set_auto_tr(True)
-               subdev.set_gain(gain.parse())   
-               set_freq(u, 0, subdev, frequency.parse(), verbose=True) #use 
DDC0
-               fg.add_callback(lambda f: set_freq(u, 0, subdev, f), frequency)
-               fg.add_callback(subdev.set_gain, gain) #callback for gain 
setting
+               u.set_mux(mux)                  
+               _setup_rx_subdev(fg, u, subdev_spec, 0, gain, freq, 
auto_tr.parse(), rx_ant.parse())                    
                return u
        return sb, make
+       
+####################################################################
+#      Dual USRP Source
+####################################################################   
+       
+def USRPDualSource(sb):
+       from gnuradio import usrp
+       default_mux = '0x3210'
+       type = Enum([('Complex', (usrp.source_c, Complex())), ('IShort', 
(usrp.source_s, Short()))])
+       sb.add_output_socket('outA', Variable(type, index=1))
+       sb.add_output_socket('outB', Variable(type, index=1))
+       sb.add_param('Output Type', type, False, type=True)
+       sb.add_param('Unit Number', Int(0, min=0))      
+       sb.add_param('FrequencyA', Float(), variable=True)
+       sb.add_param('FrequencyB', Float(), variable=True)
+       sb.add_param('Decimation', Int(DEFAULT_DECIM, min=1))
+       sb.add_param('GainA', Float(0), variable=True)  
+       sb.add_param('GainB', Float(0), variable=True)
+       sb.add_param('Mux', Hex(default_mux))           
+       sb.add_param('Auto T/R', Enum(_auto_tr_options))
+       sb.add_param('RX AntennaA', Enum(_rx_ant_options))
+       sb.add_param('RX AntennaB', Enum(_rx_ant_options))
+       sb.set_docs('''\
+Default mux is %s.
+Channel A (I & Q) will get ADC0 and ADC1
+Channel B (I & Q) will get ADC2 and ADC3
+'''%default_mux + _usrp_source_msg)
+       def make(fg, type, number, freq_a, freq_b, decim, gain_a, gain_b, mux, 
auto_tr, rx_ant_a, rx_ant_b):
+               number = number.parse()
+               u = type.parse()[0](number, nchan=2)            
+               u.set_decim_rate(decim.parse())
+               u.set_mux(mux.parse())
+               # setup A       #               
+               _setup_rx_subdev(fg, u, (0, 0), 0, gain_a, freq_a, 
auto_tr.parse(), rx_ant_a.parse())                           
+               #       setup B #
+               _setup_rx_subdev(fg, u, (1, 0), 1, gain_b, freq_b, 
auto_tr.parse(), rx_ant_b.parse())   
+               ###     Create an interleaver for the 2 data streams    ###
+               deinter = gr.deinterleave(type.parse()[1].get_num_bytes())
+               fg.connect(u, deinter)
+               return deinter
+       return sb, make 
 
+####################################################################
+#      Reguar USRP Sink
+####################################################################
+
 def USRPSink(sb):
        from gnuradio import usrp
        type = Enum([('Complex', (usrp.sink_c, Complex())), ('IShort', 
(usrp.sink_s, Short()))])
@@ -92,14 +246,16 @@
                ('Side B', (1, 0)),
        ]))
        sb.add_param('Frequency', Float(), variable=True)
-       sb.add_param('Interpolation', Int(400, min=1))
+       sb.add_param('Interpolation', Int(DEFAULT_INTERP, min=1))
        sb.add_param('Gain', Float(0), variable=True)   
        sb.add_param('Mux', Hex())
+       sb.add_param('Auto T/R', Enum(_auto_tr_options))
+       sb.add_param('TX Enable', Enum(_tx_enb_options))
        sb.set_docs('''\
-The USRP sink inputs 128 Megasamples per second / interpolation.
 If left at 0, the Mux value will be automatically determined. \
-Otherwise, the Mux value must be in hexidecimal format.''')
-       def make(fg, type, number, subdev_spec, frequency, interp, gain, mux):
+Otherwise, the Mux value must be in hexidecimal format.
+''' + _usrp_sink_msg)
+       def make(fg, type, number, subdev_spec, freq, interp, gain, mux, 
auto_tr, tx_enb):
                number = number.parse()
                subdev_spec = subdev_spec.parse()       
                u = type.parse()[0](number, nchan=1)
@@ -108,15 +264,14 @@
                if mux.parse() == 0: mux = usrp.determine_tx_mux_value(u, 
subdev_spec)
                else: mux = mux.parse()
                u.set_mux(mux)
-               subdev = usrp.selected_subdev(u, subdev_spec)#get the subdev
-               subdev.set_auto_tr(True)
-               subdev.set_gain(gain.parse())
-               set_freq(u, subdev._which, subdev, frequency.parse(), 
verbose=True)
-               fg.add_callback(lambda f: set_freq(u, subdev._which, subdev, 
f), frequency)
-               fg.add_callback(subdev.set_gain, gain) #callback for gain 
setting
+               _setup_tx_subdev(fg, u, subdev_spec, gain, freq, 
auto_tr.parse(), tx_enb.parse())
                return u
        return sb, make
        
+####################################################################
+#      Dual USRP Sink
+####################################################################   
+       
 def USRPDualSink(sb):
        from gnuradio import usrp
        default_mux = '0xba98'
@@ -127,95 +282,32 @@
        sb.add_param('Unit Number', Int(0, min=0))
        sb.add_param('FrequencyA', Float(), variable=True)
        sb.add_param('FrequencyB', Float(), variable=True)
-       sb.add_param('Interpolation', Int(400, min=1))
+       sb.add_param('Interpolation', Int(DEFAULT_INTERP, min=1))
        sb.add_param('GainA', Float(0), variable=True)  
        sb.add_param('GainB', Float(0), variable=True)
        sb.add_param('Mux', Hex(default_mux))   
+       sb.add_param('Auto T/R', Enum(_auto_tr_options))
+       sb.add_param('TX EnableA', Enum(_tx_enb_options))
+       sb.add_param('TX EnableB', Enum(_tx_enb_options))
        sb.set_docs('''\
-The USRP sink inputs 128 Megasamples per second / interpolation. \
 Default mux is %s. 
 This will use all 4 DACs: 
 DAC0 and DAC1 will get channel A (I & Q).
-DAC3 and DAC2 will get channel B (I & Q).'''%default_mux)
-       def make(fg, type, number, frequency_a, frequency_b, interp, gain_a, 
gain_b, mux):
+DAC3 and DAC2 will get channel B (I & Q).
+'''%default_mux + _usrp_sink_msg)
+       def make(fg, type, number, freq_a, freq_b, interp, gain_a, gain_b, mux, 
auto_tr, tx_enb_a, tx_enb_b):
                number = number.parse()
                u = type.parse()[0](number, nchan=2)            
                u.set_interp_rate(interp.parse())
                u.set_mux(mux.parse())
-               # setup side A  #               
-               subdev_a = usrp.selected_subdev(u, (0,0))#get the subdev
-               subdev_a.set_auto_tr(True)
-               subdev_a.set_gain(gain_a.parse())
-               set_freq(u, subdev_a._which, subdev_a, frequency_a.parse(), 
verbose=True)
-               fg.add_callback(lambda f: set_freq(u, subdev_a._which, 
subdev_a, f), frequency_a)
-               fg.add_callback(subdev_a.set_gain, gain_a) #callback for gain 
setting
+               # setup side A  #       
+               _setup_tx_subdev(fg, u, (0, 0), gain_a, freq_a, 
auto_tr.parse(), tx_enb_a.parse())              
                #       setup side B    #
-               subdev_b = usrp.selected_subdev(u, (1,0))#get the subdev
-               subdev_b.set_auto_tr(True)
-               subdev_b.set_gain(gain_b.parse())
-               set_freq(u, subdev_b._which, subdev_b, frequency_b.parse(), 
verbose=True)
-               fg.add_callback(lambda f: set_freq(u, subdev_b._which, 
subdev_b, f), frequency_b)
-               fg.add_callback(subdev_b.set_gain, gain_b) #callback for gain 
setting
+               _setup_tx_subdev(fg, u, (1, 0), gain_b, freq_b, 
auto_tr.parse(), tx_enb_b.parse())      
                ###     Create an interleaver for the 2 data streams    ###
                inter = gr.interleave(type.parse()[1].get_num_bytes())
                fg.connect(inter, u)
                return inter
        return sb, make
-
-def USRPDualSource(sb):
-       from gnuradio import usrp
-       default_mux = '0x3210'
-       type = Enum([('Complex', (usrp.source_c, Complex())), ('IShort', 
(usrp.source_s, Short()))])
-       sb.add_output_socket('out0', Variable(type, index=1))
-       sb.add_output_socket('out1', Variable(type, index=1))
-       sb.add_param('Output Type', type, False, type=True)
-       sb.add_param('Unit Number', Int(0, min=0))
-       sb.add_param('Ch0: Side:Subdevice', Enum([
-               ('Side A:0', (0, 0)), 
-               ('Side B:0', (1, 0)),
-               ('Side A:1', (0, 1)), 
-               ('Side B:1', (1, 1)),
-       ]))
-       sb.add_param('Ch1: Side:Subdevice', Enum([
-               ('Side A:0', (0, 0)), 
-               ('Side B:0', (1, 0)),
-               ('Side A:1', (0, 1)), 
-               ('Side B:1', (1, 1)),
-       ]))
-       sb.add_param('Frequency0', Float(), variable=True)
-       sb.add_param('Frequency1', Float(), variable=True)
-       sb.add_param('Decimation', Int(200, min=1))
-       sb.add_param('Gain0', Float(0), variable=True)  
-       sb.add_param('Gain1', Float(0), variable=True)
-       sb.add_param('Mux', Hex(default_mux))   
-       sb.set_docs('''\
-The USRP source outputs 64 Megasamples per second / decimation. \
-Default mux is %s.
-Channel 0 (I & Q) will get ADC0 and ADC1
-Channel 1 (I & Q) will get ADC2 and ADC3'''%default_mux)
-       def make(fg, type, number, subdev_spec_0, subdev_spec_1, frequency_0, 
frequency_1, decim, gain_0, gain_1, mux):
-               number = number.parse()
-               u = type.parse()[0](number, nchan=2)            
-               u.set_decim_rate(decim.parse())
-               u.set_mux(mux.parse())
-               # setup 0       #               
-               subdev_0 = usrp.selected_subdev(u, subdev_spec_0.parse())#get 
the subdev
-               subdev_0.set_auto_tr(True)
-               subdev_0.set_gain(gain_0.parse())
-               set_freq(u, 0, subdev_0, frequency_0.parse(), verbose=True)     
#use DDC0
-               fg.add_callback(lambda f: set_freq(u, 0, subdev_0, f), 
frequency_0)
-               fg.add_callback(subdev_0.set_gain, gain_0) #callback for gain 
setting
-               #       setup 1 #
-               subdev_1 = usrp.selected_subdev(u, subdev_spec_1.parse())#get 
the subdev
-               subdev_1.set_auto_tr(True)
-               subdev_1.set_gain(gain_1.parse())
-               set_freq(u, 1, subdev_1, frequency_1.parse(), verbose=True)     
#use DDC1
-               fg.add_callback(lambda f: set_freq(u, 1, subdev_1, f), 
frequency_1)
-               fg.add_callback(subdev_1.set_gain, gain_1) #callback for gain 
setting
-               ###     Create an interleaver for the 2 data streams    ###
-               deinter = gr.deinterleave(type.parse()[1].get_num_bytes())
-               fg.connect(u, deinter)
-               return deinter
-       return sb, make 
        
        
\ No newline at end of file





reply via email to

[Prev in Thread] Current Thread [Next in Thread]