Removed special-case for BASIC_RX
[debian/gnuradio] / gr-radio-astronomy / src / python / usrp_ra_receiver.py
index c0edbe0e91d765b7065c1262d53ab301c7714ebc..c37355d28a5eb87ac151580557bba87c9856ac24 100755 (executable)
@@ -81,9 +81,15 @@ class app_flow_graph(stdgui2.std_top_block):
                parser.add_option("-I", "--interferometer", action="store_true", default=False, help="Interferometer mode")
                parser.add_option("-D", "--switch_mode", action="store_true", default=False, help="Dicke Switching mode")
                parser.add_option("-P", "--reference_divisor", type="eng_float", default=1.0, help="Reference Divisor")
-               parser.add_option("-U", "--ref_fifo", default="@@@@")
+               parser.add_option("-U", "--ref_fifo", default=None)
+               parser.add_option("-k", "--notch_taps", type="int", default=64, help="Number of notch taps")
                parser.add_option("-n", "--notches", action="store_true", 
                    default=False, help="Notch frequencies after all other args")
+               parser.add_option("-Y", "--interface", default=None)
+               parser.add_option("-H", "--mac_addr", default=None)
+
+               # Added this documentation
+               
                (options, args) = parser.parse_args()
 
                self.setimode = options.setimode
@@ -94,8 +100,16 @@ class app_flow_graph(stdgui2.std_top_block):
                self.switch_state = 0
                self.reference_divisor = options.reference_divisor
                self.ref_fifo = options.ref_fifo
+               self.usrp2 = False
+               self.decim = options.decim
+               self.rx_subdev_spec = options.rx_subdev_spec
+               
+               if (options.interface != None and options.mac_addr != None):
+                       self.mac_addr = options.mac_addr
+                       self.interface = options.interface
+                       self.usrp2 = True
                
-               self.NOTCH_TAPS = 128
+               self.NOTCH_TAPS = options.notch_taps
                self.notches = Numeric.zeros(self.NOTCH_TAPS,Numeric.Float64)
                # Get notch locations
                j = 0
@@ -105,8 +119,8 @@ class app_flow_graph(stdgui2.std_top_block):
                
                self.use_notches = options.notches
                
-               if (self.ref_fifo != "@@@@"):
-                       self.ref_fifo_file = open (self.ref_fifo, "w")
+               if (self.ref_fifo != None):
+                       self.ref_fifo_file = open (self.ref_fifo, "r")
                
                modecount = 0
                for modes in (self.dual_mode, self.interferometer):
@@ -226,32 +240,12 @@ class app_flow_graph(stdgui2.std_top_block):
                #
                if (self.setimode):
                        options.decim = 256
-
-               if (self.dual_mode == False and self.interferometer == False):
-                       self.u = usrp.source_c(decim_rate=options.decim,fusb_block_size=8192)
-                       self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec))
-                       # determine the daughterboard subdevice we're using
-                       self.subdev[0] = usrp.selected_subdev(self.u, options.rx_subdev_spec)
-                       self.subdev[1] = self.subdev[0]
-                       self.cardtype = self.subdev[0].dbid()
-               else:
-                       self.u=usrp.source_c(decim_rate=options.decim, nchan=2,fusb_block_size=8192)
-                       self.subdev[0] = usrp.selected_subdev(self.u, (0, 0))
-                       self.subdev[1] = usrp.selected_subdev(self.u, (1, 0))
-                       self.cardtype = self.subdev[0].dbid()
-                       self.u.set_mux(0x32103210)
-                       c1 = self.subdev[0].name()
-                       c2 = self.subdev[1].name()
-                       if (c1 != c2):
-                               print "Must have identical cardtypes for --dual_mode or --interferometer"
-                               sys.exit(1)
-               #
-               # Set 8-bit mode
-               #
-               width = 8
-               shift = 8
-               format = self.u.make_format(width, shift)
-               r = self.u.set_format(format)
+               
+               if (self.dual_mode == True and self.decim <= 4):
+                       print "Cannot use decim <= 4 with dual_mode"
+                       sys.exit(1)
+               
+               self.setup_usrp()
                
                # Set initial declination
                self.decln = options.decln
@@ -362,13 +356,13 @@ class app_flow_graph(stdgui2.std_top_block):
                #
                
                if (self.dual_mode == True):
-                       self.setup_dual (self.setimode,self.use_notches)
+                       self.setup_dual (self.setimode)
                        
                if (self.interferometer == True):
-                       self.setup_interferometer(self.setimode,self.use_notches)
+                       self.setup_interferometer(self.setimode)
                                
                if (self.normal_mode == True):
-                       self.setup_normal(self.setimode,self.use_notches)
+                       self.setup_normal(self.setimode)
                        
                if (self.setimode == True):
                        self.setup_seti()
@@ -432,7 +426,7 @@ class app_flow_graph(stdgui2.std_top_block):
                        self.myform['dbname'].set_value(self.subdev[0].name())
 
                # Set analog baseband filtering, if DBS_RX
-               if self.cardtype in (usrp_dbid.DBS_RX, usrp_dbid.DBS_RX_REV_2_1):
+               if self.cardtype == usrp_dbid.DBS_RX:
                        lbw = (self.u.adc_freq() / self.u.decim_rate()) / 2
                        if lbw < 1.0e6:
                                lbw = 1.0e6
@@ -605,24 +599,12 @@ class app_flow_graph(stdgui2.std_top_block):
                Set the center frequency we're interested in.
 
                @param target_freq: frequency in Hz
-               @rypte: bool
 
-               Tuning is a two step process.  First we ask the front-end to
-               tune as close to the desired frequency as it can.  Then we use
-               the result of that operation and our target_frequency to
-               determine the value for the digital down converter.
                """
                #
-               # Everything except BASIC_RX should support usrp.tune()
                #
-               if not (self.cardtype == usrp_dbid.BASIC_RX):
-                       r = usrp.tune(self.u, self.subdev[0].which(), self.subdev[0], target_freq)
-                       r = usrp.tune(self.u, self.subdev[1].which(), self.subdev[1], target_freq)
-               else:
-                       r = self.u.set_rx_freq(0, target_freq)
-                       f = self.u.rx_freq(0)
-                       if abs(f-target_freq) > 2.0e3:
-                               r = 0
+               r = usrp.tune(self.u, self.subdev[0].which(), self.subdev[0], target_freq)
+               r = usrp.tune(self.u, self.subdev[1].which(), self.subdev[1], target_freq)
                if r:
                        self.myform['freq'].set_value(target_freq)         # update displayed value
                        #
@@ -634,7 +616,6 @@ class app_flow_graph(stdgui2.std_top_block):
                        self.centerfreq = target_freq
                        self.observing -= delta
                        self.scope.set_baseband_freq (self.observing)
-
                        self.myform['baseband'].set_value(r.baseband_freq)
                        self.myform['ddc'].set_value(r.dxc_freq)
                        
@@ -1243,7 +1224,7 @@ class app_flow_graph(stdgui2.std_top_block):
        #
        # Setup dual-channel (two antenna, usual orthogonal polarity probes in the same waveguide)
        #
-       def setup_dual(self, setimode,notches):
+       def setup_dual(self, setimode):
                
                self.setup_radiometer_common(2)
                
@@ -1354,8 +1335,46 @@ class app_flow_graph(stdgui2.std_top_block):
        def setup_seti(self):
                self.connect (self.shead, self.fft_bandpass, self.scope)
                return
-
+       
+       def setup_usrp(self):
                
+               if (self.usrp2 == False):
+                       if (self.dual_mode == False and self.interferometer == False):
+                               if (self.decim > 4):
+                                       self.u = usrp.source_c(decim_rate=self.decim,fusb_block_size=8192)
+                               else:
+                                       self.u = usrp.source_c(decim_rate=self.decim,fusb_block_size=8192, fpga_filename="std_4rx_0tx.rbf")
+                               self.u.set_mux(usrp.determine_rx_mux_value(self.u, self.rx_subdev_spec))
+                               # determine the daughterboard subdevice we're using
+                               self.subdev[0] = usrp.selected_subdev(self.u, self.rx_subdev_spec)
+                               self.subdev[1] = self.subdev[0]
+                               self.cardtype = self.subdev[0].dbid()
+                       else:
+                               self.u=usrp.source_c(decim_rate=self.decim, nchan=2,fusb_block_size=8192)
+                               self.subdev[0] = usrp.selected_subdev(self.u, (0, 0))
+                               self.subdev[1] = usrp.selected_subdev(self.u, (1, 0))
+                               self.cardtype = self.subdev[0].dbid()
+                               self.u.set_mux(0x32103210)
+                               c1 = self.subdev[0].name()
+                               c2 = self.subdev[1].name()
+                               if (c1 != c2):
+                                       print "Must have identical cardtypes for --dual_mode or --interferometer"
+                                       sys.exit(1)
+                               #
+                               # Set 8-bit mode
+                               #
+                               
+                               width = 8
+                               shift = 8
+                               format = self.u.make_format(width, shift)
+                               r = self.u.set_format(format)
+               else:
+                       if (self.dual_mode == True or self.interferometer == True):
+                               print "Cannot use dual_mode or interferometer with single USRP2"
+                               sys.exit(1)
+                       self.u = usrp2.source_32fc(self.interface, self.mac_addr)
+                       self.u.set_decim (self.decim)
+                       self.cardtype = self.u.daughterboard_id()
 
 def main ():
        app = stdgui2.stdapp(app_flow_graph, "RADIO ASTRONOMY SPECTRAL/CONTINUUM RECEIVER: $Revision$", nstatus=1)