Sorry, the first diff included wrong number of channels :-( I now hardcoded it for 2 and 4 channels with counters since adding more USRPs will need changes in code to usrp_multi.py, scope_window.py and a clever way to distribute the clock signal and sync signals.
Moritz
Index: gr-usrp/src/usrp_multi.py
===================================================================
--- gr-usrp/src/usrp_multi.py (revision 11561)
+++ gr-usrp/src/usrp_multi.py (working copy)
@@ -1,5 +1,5 @@
#
-# Copyright 2005,2008 Free Software Foundation, Inc.
+# Copyright 2005 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -21,16 +21,14 @@
import math
from gnuradio import gr, gru
-from gnuradio.gr import hier_block2
from gnuradio import usrp
+from gnuradio import blks2
from usrpm import usrp_prims
import sys
class multi_source_align(object):
- def __init__(self, fg, master_serialno, decim, nchan=2, pga_gain=0.0,
- cordic_freq=0.0, mux=None, align_interval=-1,
- fpga_filename="multi_2rxhb_2tx.rbf"):
+ def __init__(self, fg, master_serialno,decim,nchan=2,pga_gain=0.0,cordic_freq=0.0,mux=None,align_interval=-1):
"""
Align multiple sources (usrps) using samplenumbers in the first channel.
@@ -59,8 +57,8 @@
if mux is None:
mux=self.get_default_mux() #Note that all channels have shifted left because of the added 32 bit counter channel
- u1 = usrp.source_s (1, decim, nchan, gru.hexint(mux), mode,fpga_filename=fpga_filename )
- u0 = usrp.source_s (0, decim, nchan, gru.hexint(mux), mode,fpga_filename=fpga_filename )
+ u1 = usrp.source_s (1, decim, nchan, gru.hexint(mux), mode,fpga_filename="multi_2rxhb_2tx.rbf" )
+ u0 = usrp.source_s (0, decim, nchan, gru.hexint(mux), mode,fpga_filename="multi_2rxhb_2tx.rbf" )
print 'usrp[0] serial',u0.serial_number()
print 'usrp[1] serial',u1.serial_number()
#default, choose the second found usrp as master (which is usually the usrp which was first plugged in)
@@ -82,10 +80,10 @@
print errorstring
raise ValueError, errorstring
else: #default, just choose the first found usrp as master
- um_index=1
- um=u1
- us_index=0
- us=u0
+ um_index=0
+ um=u0
+ us_index=1
+ us=u1
self.usrp_master=um
self.usrp_slave=us
@@ -166,31 +164,31 @@
#SLAVE
#disable master, enable slave and set sync pulse to zero
reg_mask = usrp_prims.bmFR_RX_SYNC_SLAVE | usrp_prims.bmFR_RX_SYNC_MASTER | usrp_prims.bmFR_RX_SYNC
- self.usrp_slave._u._write_fpga_reg_masked(usrp_prims.FR_RX_MASTER_SLAVE, usrp_prims.bmFR_RX_SYNC_SLAVE,reg_mask)
+ self.usrp_slave._write_fpga_reg_masked(usrp_prims.FR_RX_MASTER_SLAVE, usrp_prims.bmFR_RX_SYNC_SLAVE,reg_mask)
#set SYNC slave iopin on daughterboards RXA as input
oe = 0 # set rx_a_io[bitnoFR_RX_SYNC_INPUT_IOPIN] as input
oe_mask = usrp_prims.bmFR_RX_SYNC_INPUT_IOPIN
- self.usrp_slave._u._write_oe(0,oe,oe_mask)
+ self.usrp_slave._write_oe(0,oe,oe_mask)
#Now it is save to enable the master
#MASTER
#enable master, disable slave and set sync pulse to zero
reg_mask = usrp_prims.bmFR_RX_SYNC_SLAVE | usrp_prims.bmFR_RX_SYNC_MASTER | usrp_prims.bmFR_RX_SYNC
- self.usrp_master._u._write_fpga_reg_masked(usrp_prims.FR_RX_MASTER_SLAVE,usrp_prims.bmFR_RX_SYNC_MASTER,reg_mask)
+ self.usrp_master._write_fpga_reg_masked(usrp_prims.FR_RX_MASTER_SLAVE,usrp_prims.bmFR_RX_SYNC_MASTER,reg_mask)
#set SYNC master iopin on daughterboards RXA as output
oe = usrp_prims.bmFR_RX_SYNC_OUTPUT_IOPIN # set rx_a_io[bitnoFR_RX_SYNC_OUTPUT_IOPIN] as output
oe_mask = usrp_prims.bmFR_RX_SYNC_OUTPUT_IOPIN
- self.usrp_master._u._write_oe(0,oe,oe_mask)
+ self.usrp_master._write_oe(0,oe,oe_mask)
def sync_usrps(self, evt):
self.sync()
def sync(self):
result=False
- result = self.usrp_master._u._write_fpga_reg_masked (usrp_prims.FR_RX_MASTER_SLAVE, usrp_prims.bmFR_RX_SYNC, usrp_prims.bmFR_RX_SYNC )
+ result = self.usrp_master._write_fpga_reg_masked (usrp_prims.FR_RX_MASTER_SLAVE, usrp_prims.bmFR_RX_SYNC, usrp_prims.bmFR_RX_SYNC )
#There should be a small delay here, but the time it takes to get the sync to the usrp is long enough
#turn sync pulse off
- result = result & self.usrp_master._u._write_fpga_reg_masked (usrp_prims.FR_RX_MASTER_SLAVE,0 ,usrp_prims.bmFR_RX_SYNC);
+ result = result & self.usrp_master._write_fpga_reg_masked (usrp_prims.FR_RX_MASTER_SLAVE,0 ,usrp_prims.bmFR_RX_SYNC);
return result;
def nullsink_counters(self):
Index: gr-usrp/src/Makefile.am
===================================================================
--- gr-usrp/src/Makefile.am (revision 11561)
+++ gr-usrp/src/Makefile.am (working copy)
@@ -91,7 +91,8 @@
# additional Python files to be installed along with the SWIG-generated one
usrp_swig_python = \
- __init__.py
+ __init__.py \
+ usrp_multi.py
# additional SWIG files to be installed
usrp_swig_swiginclude_headers = \
Index: gr-wxgui/src/python/scope_window.py
===================================================================
--- gr-wxgui/src/python/scope_window.py (revision 11561)
+++ gr-wxgui/src/python/scope_window.py (working copy)
@@ -55,6 +55,8 @@
(0.0, 0.8, 0.0),
(1.0, 0.0, 0.0),
(0.8, 0.0, 0.8),
+ (0.5, 1.0, 0.8),
+ (0.0, 0.0, 0.8),
)
TRIGGER_COLOR_SPEC = (1.0, 0.4, 0.0)
AUTORANGE_UPDATE_RATE = 0.5 #sec
Index: gnuradio-examples/python/multi_usrp/multi_usrp_oscope.py
===================================================================
--- gnuradio-examples/python/multi_usrp/multi_usrp_oscope.py (revision 11561)
+++ gnuradio-examples/python/multi_usrp/multi_usrp_oscope.py (working copy)
@@ -24,17 +24,16 @@
from gnuradio import gr, gru
from gnuradio import usrp
+from gnuradio.usrp import usrp_multi
from gnuradio import eng_notation
from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import stdgui, fftsink, waterfallsink, scopesink, form, slider
+from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider
from optparse import OptionParser
import wx
import sys
import time
-from gnuradio import usrp_multi
-
def pick_subdevice(u):
"""
The user didn't specify a subdevice on the command line.
@@ -49,9 +48,9 @@
return (0, 0)
-class app_flow_graph(stdgui.gui_flow_graph):
+class app_flow_graph(stdgui2.std_top_block):
def __init__(self, frame, panel, vbox, argv):
- stdgui.gui_flow_graph.__init__(self)
+ stdgui2.std_top_block.__init__(self,frame,panel,vbox,argv)
self.frame = frame
self.panel = panel
@@ -97,7 +96,7 @@
# build the graph
- #self.u = usrp.source_c(which=options.which_usrp,decim_rate=options.decim)
+ #self.u = usrp.source_c(which=0,decim_rate=options.decim)
if (options.mux is None) | (4==options.nchan):
init_mux=None #use default mux which is 0x10321032
else:
@@ -106,7 +105,6 @@
init_gain=0.0
init_freq=0.0
init_align_interval=-1
-
self.multi=usrp_multi.multi_source_align( self, options.master_serialno, options.decim,
options.nchan, init_gain, init_freq, init_mux, init_align_interval)
self.um=self.multi.get_master_usrp()
@@ -133,11 +131,17 @@
self.subdevs = usrp.selected_subdev(self.us, options.rx_subdev_spec)
input_rate = self.um.adc_freq() / self.um.decim_rate()
+ # determine the needed inputs for scopesink (one counter per USRP)
+ no_chans = options.nchan
+ if options.show_counters and 4 == options.nchan:
+ no_chans = 6
+ if options.show_counters and 2 == options.nchan:
+ no_chans = 4
- self.scope = scopesink.scope_sink_f(self, panel, sample_rate=input_rate,
+ self.scope = scopesink2.scope_sink_f(panel, sample_rate=input_rate,
frame_decim=options.frame_decim,
v_scale=options.v_scale,
- t_scale=options.t_scale)
+ t_scale=options.t_scale,num_inputs=no_chans)
self.sink_count=0
self.add_to_scope((self.multi.get_master_source_c(),1),options.show_q)
self.add_to_scope((self.multi.get_slave_source_c(),1),options.show_q)
@@ -185,8 +189,8 @@
self.connect((c2f,0), (self.scope,self.sink_count))
self.sink_count=self.sink_count+1
if show_q:
- self.connect((c2f,1), (self.scope,self.sink_count))
- self.sink_count=self.sink_count+1
+ self.connect((c2f,1), (self.scope,self.sink_count))
+ self.sink_count=self.sink_count+1
def _set_status_msg(self, msg):
@@ -336,7 +340,7 @@
self.multi.sync()
def main ():
- app = stdgui.stdapp(app_flow_graph, "MULTI_USRP O'scope", nstatus=1)
+ app = stdgui2.stdapp(app_flow_graph, "MULTI_USRP O'scope", nstatus=1)
app.MainLoop()
if __name__ == '__main__':
Index: gnuradio-examples/python/multi_usrp/multi_usrp_rx_cfile.py
===================================================================
--- gnuradio-examples/python/multi_usrp/multi_usrp_rx_cfile.py (revision 11561)
+++ gnuradio-examples/python/multi_usrp/multi_usrp_rx_cfile.py (working copy)
@@ -15,7 +15,7 @@
import sys
import time
-from gnuradio import usrp_multi
+from gnuradio.usrp import usrp_multi
class my_top_block(gr.top_block):
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Patch-gnuradio mailing list [email protected] http://lists.gnu.org/mailman/listinfo/patch-gnuradio
