summaryrefslogtreecommitdiff
path: root/gnuradio-examples/python
diff options
context:
space:
mode:
authorjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>2007-09-18 18:59:00 +0000
committerjcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>2007-09-18 18:59:00 +0000
commite692e71305ecd71d3681fe37f3d76f350d67e276 (patch)
treedc320c9261303aa9a92f4d12bdba85f82720d1bf /gnuradio-examples/python
parent6ad04a094ced626e46c210b9847eae46a1ae8e67 (diff)
Merge r6461:6464 from jcorgan/t162-staging into trunk.
* Final gr.top_block and gr.hier_block2 implementation inside gnuradio-core/src/lib/runtime * Implementation of gr.hier_block2 versions of all the old-style blocks in blks. These live in blks2. * Addition of gr.hier_block2 based versions of gr-wxgui blocks * Conversion of all the example code in gnuradio-examples to use this new code * Conversion of all the gr-utils scripts to use the new code The OFDM examples and related hierarchical blocks have not yet been converted. Code in the rest of the tree that is outside the core and example components has also not yet been converted. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@6466 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gnuradio-examples/python')
-rw-r--r--gnuradio-examples/python/Makefile.am20
-rwxr-xr-xgnuradio-examples/python/apps/hf_explorer/hfx2.py56
-rwxr-xr-xgnuradio-examples/python/audio/audio_copy.py8
-rwxr-xr-xgnuradio-examples/python/audio/audio_fft.py16
-rwxr-xr-xgnuradio-examples/python/audio/audio_play.py8
-rwxr-xr-xgnuradio-examples/python/audio/audio_to_file.py8
-rwxr-xr-xgnuradio-examples/python/audio/dial_tone.py8
-rwxr-xr-xgnuradio-examples/python/audio/mono_tone.py8
-rwxr-xr-xgnuradio-examples/python/audio/multi_tone.py8
-rwxr-xr-xgnuradio-examples/python/audio/noise.py6
-rwxr-xr-xgnuradio-examples/python/audio/spectrum_inversion.py26
-rwxr-xr-xgnuradio-examples/python/audio/test_resampler.py12
-rw-r--r--gnuradio-examples/python/dect/Makefile.am (renamed from gnuradio-examples/python/hier/dect/Makefile.am)5
-rw-r--r--gnuradio-examples/python/dect/README (renamed from gnuradio-examples/python/hier/dect/README)0
-rw-r--r--gnuradio-examples/python/dect/dect_receiver.py (renamed from gnuradio-examples/python/hier/dect/dect_receiver.py)7
-rwxr-xr-xgnuradio-examples/python/dect/usrp_dect.py (renamed from gnuradio-examples/python/hier/dect/usrp_dect.py)0
-rw-r--r--gnuradio-examples/python/dect/usrp_source.py (renamed from gnuradio-examples/python/hier/dect/usrp_source.py)0
-rw-r--r--gnuradio-examples/python/digital/Makefile.am5
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_loopback.py40
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_rx.py19
-rwxr-xr-xgnuradio-examples/python/digital/benchmark_tx.py24
-rw-r--r--gnuradio-examples/python/digital/receive_path.py32
-rw-r--r--gnuradio-examples/python/digital/receive_path_lb.py30
-rwxr-xr-xgnuradio-examples/python/digital/rx_voice.py29
-rw-r--r--gnuradio-examples/python/digital/transmit_path.py25
-rw-r--r--gnuradio-examples/python/digital/transmit_path_lb.py27
-rwxr-xr-xgnuradio-examples/python/digital/tunnel.py52
-rwxr-xr-xgnuradio-examples/python/digital/tx_voice.py37
-rwxr-xr-xgnuradio-examples/python/digital_voice/cvsd_test.py18
-rwxr-xr-xgnuradio-examples/python/digital_voice/encdec.py12
-rw-r--r--gnuradio-examples/python/hier/Makefile.am29
-rw-r--r--gnuradio-examples/python/hier/audio/Makefile.am23
-rwxr-xr-xgnuradio-examples/python/hier/audio/dial_tone2.py68
-rw-r--r--gnuradio-examples/python/hier/dect/gmsk2.py278
-rw-r--r--gnuradio-examples/python/hier/digital/Makefile.am37
-rw-r--r--gnuradio-examples/python/hier/digital/README77
-rwxr-xr-xgnuradio-examples/python/hier/digital/benchmark_loopback.py181
-rwxr-xr-xgnuradio-examples/python/hier/digital/benchmark_rx.py104
-rwxr-xr-xgnuradio-examples/python/hier/digital/benchmark_tx.py114
-rw-r--r--gnuradio-examples/python/hier/digital/fusb_options.py31
-rw-r--r--gnuradio-examples/python/hier/digital/pick_bitrate.py143
-rw-r--r--gnuradio-examples/python/hier/digital/receive_path.py256
-rw-r--r--gnuradio-examples/python/hier/digital/receive_path_lb.py136
-rwxr-xr-xgnuradio-examples/python/hier/digital/rx_voice.py136
-rw-r--r--gnuradio-examples/python/hier/digital/transmit_path.py229
-rw-r--r--gnuradio-examples/python/hier/digital/transmit_path_lb.py118
-rwxr-xr-xgnuradio-examples/python/hier/digital/tunnel.py290
-rwxr-xr-xgnuradio-examples/python/hier/digital/tx_voice.py149
-rw-r--r--gnuradio-examples/python/hier/ofdm/Makefile.am22
-rw-r--r--gnuradio-examples/python/hier/usrp/Makefile.am26
-rwxr-xr-xgnuradio-examples/python/hier/usrp/usrp_fft.py249
-rwxr-xr-xgnuradio-examples/python/hier/usrp/usrp_siggen.py130
-rw-r--r--gnuradio-examples/python/limbo/networking/Makefile.am (renamed from gnuradio-examples/python/networking/Makefile.am)0
-rwxr-xr-xgnuradio-examples/python/limbo/networking/measurement_slave.py (renamed from gnuradio-examples/python/networking/measurement_slave.py)0
-rw-r--r--gnuradio-examples/python/limbo/sounder/Makefile.am (renamed from gnuradio-examples/python/hier/sounder/Makefile.am)0
-rw-r--r--gnuradio-examples/python/limbo/sounder/sounder_rx.py (renamed from gnuradio-examples/python/hier/sounder/sounder_rx.py)0
-rw-r--r--gnuradio-examples/python/limbo/sounder/sounder_tx.py (renamed from gnuradio-examples/python/hier/sounder/sounder_tx.py)0
-rw-r--r--gnuradio-examples/python/limbo/sounder/usrp_sink.py (renamed from gnuradio-examples/python/hier/sounder/usrp_sink.py)0
-rwxr-xr-xgnuradio-examples/python/limbo/sounder/usrp_sounder_rx.py (renamed from gnuradio-examples/python/hier/sounder/usrp_sounder_rx.py)0
-rwxr-xr-xgnuradio-examples/python/limbo/sounder/usrp_sounder_tx.py (renamed from gnuradio-examples/python/hier/sounder/usrp_sounder_tx.py)0
-rw-r--r--gnuradio-examples/python/limbo/sounder/usrp_source.py (renamed from gnuradio-examples/python/hier/sounder/usrp_source.py)0
-rw-r--r--gnuradio-examples/python/network/Makefile.am (renamed from gnuradio-examples/python/hier/networking/Makefile.am)5
-rwxr-xr-xgnuradio-examples/python/network/audio_sink.py (renamed from gnuradio-examples/python/hier/networking/audio_sink.py)0
-rwxr-xr-xgnuradio-examples/python/network/audio_source.py (renamed from gnuradio-examples/python/hier/networking/audio_source.py)0
-rwxr-xr-xgnuradio-examples/python/network/dial_tone_sink.py (renamed from gnuradio-examples/python/hier/networking/dial_tone_sink.py)0
-rwxr-xr-xgnuradio-examples/python/network/dial_tone_source.py (renamed from gnuradio-examples/python/hier/networking/dial_tone_source.py)0
-rwxr-xr-xgnuradio-examples/python/network/vector_sink.py (renamed from gnuradio-examples/python/hier/networking/vector_sink.py)0
-rwxr-xr-xgnuradio-examples/python/network/vector_source.py (renamed from gnuradio-examples/python/hier/networking/vector_source.py)0
-rw-r--r--gnuradio-examples/python/ofdm/Makefile.am7
-rwxr-xr-xgnuradio-examples/python/usrp/fm_tx4.py60
-rwxr-xr-xgnuradio-examples/python/usrp/fm_tx_2_daughterboards.py57
-rwxr-xr-xgnuradio-examples/python/usrp/max_power.py20
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_benchmark_usb.py8
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_nbfm_ptt.py64
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_nbfm_rcv.py65
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_spectrum_sense.py41
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_test_loop_lfsr.py16
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_tv_rcv.py30
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py26
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_wfm_rcv.py38
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py35
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py32
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py56
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py25
-rwxr-xr-xgnuradio-examples/python/usrp/usrp_wxapt_rcv.py38
85 files changed, 728 insertions, 3267 deletions
diff --git a/gnuradio-examples/python/Makefile.am b/gnuradio-examples/python/Makefile.am
index c9db48d6ab..e20bfafd46 100644
--- a/gnuradio-examples/python/Makefile.am
+++ b/gnuradio-examples/python/Makefile.am
@@ -22,16 +22,16 @@
include $(top_srcdir)/Makefile.common
SUBDIRS = \
- apps \
- audio \
- digital_voice \
- digital \
- multi-antenna \
- multi_usrp \
- networking \
- usrp \
- hier \
- ofdm
+ apps \
+ audio \
+ dect \
+ digital \
+ digital_voice \
+ multi-antenna \
+ multi_usrp \
+ network \
+ ofdm \
+ usrp
# Make example scripts with #! executable
install-data-local:
diff --git a/gnuradio-examples/python/apps/hf_explorer/hfx2.py b/gnuradio-examples/python/apps/hf_explorer/hfx2.py
index c46f2e1492..00b1eddfd4 100755
--- a/gnuradio-examples/python/apps/hf_explorer/hfx2.py
+++ b/gnuradio-examples/python/apps/hf_explorer/hfx2.py
@@ -80,7 +80,7 @@ AM_SYNC_DISPLAY = False
import os, wx, sys, math
import wx.lib.evtmgr as em
-from gnuradio.wxgui import powermate, fftsink
+from gnuradio.wxgui import powermate, fftsink2
from gnuradio import gr, audio, eng_notation, usrp, gru
from gnuradio.eng_option import eng_option
from optparse import OptionParser
@@ -209,7 +209,7 @@ class MyFrame(wx.Frame):
self.xdata = []
self.ydata = []
- self.fg = gr.flow_graph()
+ self.tb = gr.top_block()
# radio variables, initial conditions
self.frequency = self.usrp_center
@@ -260,7 +260,7 @@ class MyFrame(wx.Frame):
# save radio data to a file
if SAVE_RADIO_TO_FILE:
file = gr.file_sink(gr.sizeof_short, options.radio_file)
- self.fg.connect (self.src, file)
+ self.tb.connect (self.src, file)
# 2nd DDC
xlate_taps = gr.firdes.low_pass ( \
@@ -273,11 +273,11 @@ class MyFrame(wx.Frame):
s2f1 = gr.short_to_float()
s2f2 = gr.short_to_float()
src_f2c = gr.float_to_complex()
- self.fg.connect(self.src,s2ss)
- self.fg.connect((s2ss,0),s2f1)
- self.fg.connect((s2ss,1),s2f2)
- self.fg.connect(s2f1,(src_f2c,0))
- self.fg.connect(s2f2,(src_f2c,1))
+ self.tb.connect(self.src,s2ss)
+ self.tb.connect((s2ss,0),s2f1)
+ self.tb.connect((s2ss,1),s2f2)
+ self.tb.connect(s2f1,(src_f2c,0))
+ self.tb.connect(s2f2,(src_f2c,1))
# Complex Audio filter
@@ -294,11 +294,11 @@ class MyFrame(wx.Frame):
self.audio_filter = gr.fir_filter_ccc ( 1, audio_coeffs)
# Main +/- 16Khz spectrum display
- self.fft = fftsink.fft_sink_c (self.fg, self.panel_2, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
+ self.fft = fftsink2.fft_sink_c (self.panel_2, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
# AM Sync carrier
if AM_SYNC_DISPLAY:
- self.fft2 = fftsink.fft_sink_c (self.fg, self.panel_9, y_per_div=20, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
+ self.fft2 = fftsink.fft_sink_c (self.tb, self.panel_9, y_per_div=20, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
c2f = gr.complex_to_float()
@@ -342,30 +342,30 @@ class MyFrame(wx.Frame):
self.scale = gr.multiply_const_ff(0.00001)
dst = audio.sink(long(self.af_sample_rate))
- self.fg.connect(src_f2c,self.xlate,self.fft)
- self.fg.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0))
- self.fg.connect(self.sel_am,pll,self.pll_carrier_scale,self.pll_carrier_filter,c2f3)
- self.fg.connect((c2f3,0),phaser1,(f2c,0))
- self.fg.connect((c2f3,1),phaser2,(f2c,1))
- self.fg.connect(f2c,(am_det,1))
- self.fg.connect(am_det,c2f2,(combine,0))
- self.fg.connect(self.audio_filter,c2f,self.sel_sb,(combine,1))
+ self.tb.connect(src_f2c,self.xlate,self.fft)
+ self.tb.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0))
+ self.tb.connect(self.sel_am,pll,self.pll_carrier_scale,self.pll_carrier_filter,c2f3)
+ self.tb.connect((c2f3,0),phaser1,(f2c,0))
+ self.tb.connect((c2f3,1),phaser2,(f2c,1))
+ self.tb.connect(f2c,(am_det,1))
+ self.tb.connect(am_det,c2f2,(combine,0))
+ self.tb.connect(self.audio_filter,c2f,self.sel_sb,(combine,1))
if AM_SYNC_DISPLAY:
- self.fg.connect(self.pll_carrier_filter,self.fft2)
- self.fg.connect(combine,self.scale)
- self.fg.connect(self.scale,(sqr1,0))
- self.fg.connect(self.scale,(sqr1,1))
- self.fg.connect(sqr1, intr, offset, (agc, 1))
- self.fg.connect(self.scale,(agc, 0))
- self.fg.connect(agc,dst)
+ self.tb.connect(self.pll_carrier_filter,self.fft2)
+ self.tb.connect(combine,self.scale)
+ self.tb.connect(self.scale,(sqr1,0))
+ self.tb.connect(self.scale,(sqr1,1))
+ self.tb.connect(sqr1, intr, offset, (agc, 1))
+ self.tb.connect(self.scale,(agc, 0))
+ self.tb.connect(agc,dst)
if SAVE_AUDIO_TO_FILE:
f_out = gr.file_sink(gr.sizeof_short,options.audio_file)
sc1 = gr.multiply_const_ff(64000)
f2s1 = gr.float_to_short()
- self.fg.connect(agc,sc1,f2s1,f_out)
+ self.tb.connect(agc,sc1,f2s1,f_out)
- self.fg.start()
+ self.tb.start()
# for mouse position reporting on fft display
em.eventManager.Register(self.Mouse, wx.EVT_MOTION, self.fft.win)
@@ -482,7 +482,7 @@ class MyFrame(wx.Frame):
# Menu exit
def TimeToQuit(self, event):
- self.fg.stop()
+ self.tb.stop()
self.Close(True)
# Powermate being turned
diff --git a/gnuradio-examples/python/audio/audio_copy.py b/gnuradio-examples/python/audio/audio_copy.py
index 88dd088340..3094c9f7a5 100755
--- a/gnuradio-examples/python/audio/audio_copy.py
+++ b/gnuradio-examples/python/audio/audio_copy.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2005 Free Software Foundation, Inc.
+# Copyright 2004,2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -25,10 +25,10 @@ from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-I", "--audio-input", type="string", default="",
@@ -58,7 +58,7 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/audio_fft.py b/gnuradio-examples/python/audio/audio_fft.py
index 7c54dd55b5..f7f1c2e8c0 100755
--- a/gnuradio-examples/python/audio/audio_fft.py
+++ b/gnuradio-examples/python/audio/audio_fft.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2005 Free Software Foundation, Inc.
+# Copyright 2004,2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -23,14 +23,14 @@
from gnuradio import gr, gru, audio
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
-class app_flow_graph(stdgui.gui_flow_graph):
+class app_top_block(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
@@ -57,11 +57,11 @@ class app_flow_graph(stdgui.gui_flow_graph):
# build the graph
if options.waterfall:
self.scope = \
- waterfallsink.waterfall_sink_f (self, panel, fft_size=1024, sample_rate=sample_rate)
+ waterfallsink2.waterfall_sink_f (panel, fft_size=1024, sample_rate=sample_rate)
elif options.oscilloscope:
- self.scope = scopesink.scope_sink_f(self, panel, sample_rate=sample_rate)
+ self.scope = scopesink2.scope_sink_f(panel, sample_rate=sample_rate)
else:
- self.scope = fftsink.fft_sink_f (self, panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30)
+ self.scope = fftsink2.fft_sink_f (panel, fft_size=1024, sample_rate=sample_rate, fft_rate=30)
self.src = audio.source (sample_rate, options.audio_input)
@@ -130,7 +130,7 @@ class app_flow_graph(stdgui.gui_flow_graph):
def main ():
- app = stdgui.stdapp(app_flow_graph, "Audio FFT", nstatus=1)
+ app = stdgui2.stdapp(app_top_block, "Audio FFT", nstatus=1)
app.MainLoop()
if __name__ == '__main__':
diff --git a/gnuradio-examples/python/audio/audio_play.py b/gnuradio-examples/python/audio/audio_play.py
index 37b2abda10..f9520c7cf9 100755
--- a/gnuradio-examples/python/audio/audio_play.py
+++ b/gnuradio-examples/python/audio/audio_play.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2005 Free Software Foundation, Inc.
+# Copyright 2004,2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -26,10 +26,10 @@ from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-F", "--filename", type="string", default="audio.dat",
@@ -52,6 +52,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/audio_to_file.py b/gnuradio-examples/python/audio/audio_to_file.py
index 7aa49e7f9b..0d54f7bd2f 100755
--- a/gnuradio-examples/python/audio/audio_to_file.py
+++ b/gnuradio-examples/python/audio/audio_to_file.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004 Free Software Foundation, Inc.
+# Copyright 2004,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -25,10 +25,10 @@ from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
usage="%prog: [options] output_filename"
parser = OptionParser(option_class=eng_option, usage=usage)
@@ -58,6 +58,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/dial_tone.py b/gnuradio-examples/python/audio/dial_tone.py
index 1ec1b0003e..65c5e50b22 100755
--- a/gnuradio-examples/python/audio/dial_tone.py
+++ b/gnuradio-examples/python/audio/dial_tone.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2005 Free Software Foundation, Inc.
+# Copyright 2004,2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -25,10 +25,10 @@ from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-O", "--audio-output", type="string", default="",
@@ -52,6 +52,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/mono_tone.py b/gnuradio-examples/python/audio/mono_tone.py
index d5c7e63809..869c2e5ffb 100755
--- a/gnuradio-examples/python/audio/mono_tone.py
+++ b/gnuradio-examples/python/audio/mono_tone.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2005 Free Software Foundation, Inc.
+# Copyright 2004,2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -29,10 +29,10 @@ from optparse import OptionParser
#print os.getpid()
#raw_input('Attach gdb and press Enter: ')
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-O", "--audio-output", type="string", default="",
@@ -61,6 +61,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/multi_tone.py b/gnuradio-examples/python/audio/multi_tone.py
index 4cf9933865..7d47dd5d5a 100755
--- a/gnuradio-examples/python/audio/multi_tone.py
+++ b/gnuradio-examples/python/audio/multi_tone.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2006 Free Software Foundation, Inc.
+# Copyright 2004,2006,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -29,10 +29,10 @@ from optparse import OptionParser
#print os.getpid()
#raw_input('Attach gdb and press Enter: ')
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-O", "--audio-output", type="string", default="",
@@ -85,6 +85,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/noise.py b/gnuradio-examples/python/audio/noise.py
index 6e9b69be77..75f7410829 100755
--- a/gnuradio-examples/python/audio/noise.py
+++ b/gnuradio-examples/python/audio/noise.py
@@ -25,10 +25,10 @@ from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-O", "--audio-output", type="string", default="",
@@ -50,6 +50,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/spectrum_inversion.py b/gnuradio-examples/python/audio/spectrum_inversion.py
index 9bb87aa4b1..021e23f2d7 100755
--- a/gnuradio-examples/python/audio/spectrum_inversion.py
+++ b/gnuradio-examples/python/audio/spectrum_inversion.py
@@ -1,5 +1,25 @@
#!/usr/bin/env python
#
+# Copyright 2004,2005,2007 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.
+
+#
# Gang - Here's a simple script that demonstrates spectrum inversion
# using the multiply by [1,-1] method (mixing with Nyquist frequency).
# Requires nothing but a sound card, and sounds just like listening
@@ -11,10 +31,10 @@ from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-I", "--audio-input", type="string", default="",
@@ -43,6 +63,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/audio/test_resampler.py b/gnuradio-examples/python/audio/test_resampler.py
index 710b0fa6b1..4644c5e2f4 100755
--- a/gnuradio-examples/python/audio/test_resampler.py
+++ b/gnuradio-examples/python/audio/test_resampler.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004,2005 Free Software Foundation, Inc.
+# Copyright 2004,2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -20,16 +20,16 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gru, blks
+from gnuradio import gr, gru, blks2
from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-O", "--audio-output", type="string", default="",
@@ -54,13 +54,13 @@ class my_graph(gr.flow_graph):
ampl = 0.1
src0 = gr.sig_source_f (input_rate, gr.GR_SIN_WAVE, 650, ampl)
- rr = blks.rational_resampler_fff(self, interp, decim)
+ rr = blks2.rational_resampler_fff(interp, decim)
dst = audio.sink (output_rate, options.audio_output)
self.connect (src0, rr, (dst, 0))
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/hier/dect/Makefile.am b/gnuradio-examples/python/dect/Makefile.am
index 5ab1589aea..c65bd4c42d 100644
--- a/gnuradio-examples/python/hier/dect/Makefile.am
+++ b/gnuradio-examples/python/dect/Makefile.am
@@ -19,10 +19,15 @@
# Boston, MA 02110-1301, USA.
#
+include $(top_srcdir)/Makefile.common
+
EXTRA_DIST = \
README \
dect_receiver.py \
usrp_source.py \
usrp_dect.py
+ourdatadir = $(exampledir)/dect
+ourdata_DATA = $(EXTRA_DIST)
+
MOSTLYCLEANFILES = *.pyc *~
diff --git a/gnuradio-examples/python/hier/dect/README b/gnuradio-examples/python/dect/README
index c8853f185b..c8853f185b 100644
--- a/gnuradio-examples/python/hier/dect/README
+++ b/gnuradio-examples/python/dect/README
diff --git a/gnuradio-examples/python/hier/dect/dect_receiver.py b/gnuradio-examples/python/dect/dect_receiver.py
index 80ea93794a..89e60c949e 100644
--- a/gnuradio-examples/python/hier/dect/dect_receiver.py
+++ b/gnuradio-examples/python/dect/dect_receiver.py
@@ -20,9 +20,8 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, optfir
+from gnuradio import gr, optfir, blks2
from usrp_source import usrp_source_c
-from gmsk2 import gmsk2_demod
_dect_symbol_rate = 1.152e6
_dect_occupied_bandwidth = _dect_symbol_rate * 1.03 # BT=0.5
@@ -60,8 +59,8 @@ class dect_receiver(gr.top_block):
0.0, # Offset frequency
if_rate) # Sample rate
- self._demod = gmsk2_demod(samples_per_symbol=if_rate/_dect_symbol_rate,
- verbose=options.verbose)
+ self._demod = blks2.gmsk_demod(samples_per_symbol=if_rate/_dect_symbol_rate,
+ verbose=options.verbose)
self._sink = gr.null_sink(gr.sizeof_char)
self.connect(self._usrp, self._channel_filter, self._demod, self._sink)
diff --git a/gnuradio-examples/python/hier/dect/usrp_dect.py b/gnuradio-examples/python/dect/usrp_dect.py
index 27259d8127..27259d8127 100755
--- a/gnuradio-examples/python/hier/dect/usrp_dect.py
+++ b/gnuradio-examples/python/dect/usrp_dect.py
diff --git a/gnuradio-examples/python/hier/dect/usrp_source.py b/gnuradio-examples/python/dect/usrp_source.py
index 6a779840f2..6a779840f2 100644
--- a/gnuradio-examples/python/hier/dect/usrp_source.py
+++ b/gnuradio-examples/python/dect/usrp_source.py
diff --git a/gnuradio-examples/python/digital/Makefile.am b/gnuradio-examples/python/digital/Makefile.am
index 1db2f8470c..ed941e4f78 100644
--- a/gnuradio-examples/python/digital/Makefile.am
+++ b/gnuradio-examples/python/digital/Makefile.am
@@ -23,17 +23,22 @@ include $(top_srcdir)/Makefile.common
EXTRA_DIST = \
README \
+ benchmark_loopback.py \
benchmark_rx.py \
benchmark_tx.py \
fusb_options.py \
gen_whitener.py \
pick_bitrate.py \
receive_path.py \
+ receive_path_lb.py \
rx_voice.py \
run_length.py \
transmit_path.py \
+ transmit_path_lb.py \
tunnel.py \
tx_voice.py
ourdatadir = $(exampledir)/digital
ourdata_DATA = $(EXTRA_DIST)
+
+MOSTLYCLEANFILES = *.pyc *.pyo *~
diff --git a/gnuradio-examples/python/digital/benchmark_loopback.py b/gnuradio-examples/python/digital/benchmark_loopback.py
index 34d25812e1..7dd36b9868 100755
--- a/gnuradio-examples/python/digital/benchmark_loopback.py
+++ b/gnuradio-examples/python/digital/benchmark_loopback.py
@@ -32,10 +32,13 @@ from transmit_path_lb import transmit_path
from receive_path_lb import receive_path
import fusb_options
-class awgn_channel(gr.hier_block):
- def __init__(self, fg, sample_rate, noise_voltage, frequency_offset, seed=False):
- self.input = gr.add_const_cc(0) # dummy input device
-
+class awgn_channel(gr.hier_block2):
+ def __init__(self, sample_rate, noise_voltage, frequency_offset, seed=False):
+
+ gr.hier_block2.__init__(self, "awgn_channel",
+ gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
+
# Create the Gaussian noise source
if not seed:
self.noise = gr.noise_source_c(gr.GR_GAUSSIAN, noise_voltage)
@@ -51,16 +54,15 @@ class awgn_channel(gr.hier_block):
self.mixer = gr.multiply_cc()
# Connect the components
- fg.connect(self.input, (self.mixer, 0))
- fg.connect(self.offset, (self.mixer, 1))
- fg.connect(self.mixer, (self.adder, 0))
- fg.connect(self.noise, (self.adder, 1))
-
- gr.hier_block.__init__(self, fg, self.input, self.adder)
+ self.connect(self, (self.mixer, 0))
+ self.connect(self.offset, (self.mixer, 1))
+ self.connect(self.mixer, (self.adder, 0))
+ self.connect(self.noise, (self.adder, 1))
+ self.connect(self.adder, self)
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self, mod_class, demod_class, rx_callback, options):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
channelon = True;
@@ -71,12 +73,12 @@ class my_graph(gr.flow_graph):
noise_power = power_in_signal/SNR
noise_voltage = math.sqrt(noise_power)
- self.txpath = transmit_path(self, mod_class, options)
+ self.txpath = transmit_path(mod_class, options)
self.throttle = gr.throttle(gr.sizeof_gr_complex, options.sample_rate)
- self.rxpath = receive_path(self, demod_class, rx_callback, options)
+ self.rxpath = receive_path(demod_class, rx_callback, options)
if channelon:
- self.channel = awgn_channel(self, options.sample_rate, noise_voltage,
+ self.channel = awgn_channel(options.sample_rate, noise_voltage,
frequency_offset, options.seed)
if options.discontinuous:
@@ -121,7 +123,7 @@ def main():
# print payload[2:len(payload)]
def send_pkt(payload='', eof=False):
- return fg.txpath.send_pkt(payload, eof)
+ return tb.txpath.send_pkt(payload, eof)
mods = modulation_utils.type_1_mods()
@@ -171,8 +173,8 @@ def main():
print "Warning: failed to enable realtime scheduling"
# Create an instance of a hierarchical block
- fg = my_graph(mods[options.modulation], demods[options.modulation], rx_callback, options)
- fg.start()
+ tb = my_top_block(mods[options.modulation], demods[options.modulation], rx_callback, options)
+ tb.start()
# generate and send packets
nbytes = int(1e6 * options.megabytes)
@@ -187,7 +189,7 @@ def main():
send_pkt(eof=True)
- fg.wait()
+ tb.wait()
if __name__ == '__main__':
try:
diff --git a/gnuradio-examples/python/digital/benchmark_rx.py b/gnuradio-examples/python/digital/benchmark_rx.py
index e375bc0f5b..be18395773 100755
--- a/gnuradio-examples/python/digital/benchmark_rx.py
+++ b/gnuradio-examples/python/digital/benchmark_rx.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2005,2006 Free Software Foundation, Inc.
+# Copyright 2005,2006,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -38,12 +38,11 @@ import fusb_options
#print os.getpid()
#raw_input('Attach and press enter: ')
-
-class my_graph(gr.flow_graph):
-
- def __init__(self, demod_class, rx_callback, options):
- gr.flow_graph.__init__(self)
- self.rxpath = receive_path(self, demod_class, rx_callback, options)
+class my_top_block(gr.top_block):
+ def __init__(self, demodulator, rx_callback, options):
+ gr.top_block.__init__(self)
+ self.rxpath = receive_path(demodulator, rx_callback, options)
+ self.connect(self.rxpath)
# /////////////////////////////////////////////////////////////////////////////
# main
@@ -98,14 +97,14 @@ def main():
# build the graph
- fg = my_graph(demods[options.modulation], rx_callback, options)
+ tb = my_top_block(demods[options.modulation], rx_callback, options)
r = gr.enable_realtime_scheduling()
if r != gr.RT_OK:
print "Warning: Failed to enable realtime scheduling."
- fg.start() # start flow graph
- fg.wait() # wait for it to finish
+ tb.start() # start flow graph
+ tb.wait() # wait for it to finish
if __name__ == '__main__':
try:
diff --git a/gnuradio-examples/python/digital/benchmark_tx.py b/gnuradio-examples/python/digital/benchmark_tx.py
index d2cba4fd93..a0a10d7830 100755
--- a/gnuradio-examples/python/digital/benchmark_tx.py
+++ b/gnuradio-examples/python/digital/benchmark_tx.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2005, 2006 Free Software Foundation, Inc.
+# Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -36,12 +36,11 @@ import fusb_options
#print os.getpid()
#raw_input('Attach and press enter')
-
-class my_graph(gr.flow_graph):
- def __init__(self, modulator_class, options):
- gr.flow_graph.__init__(self)
- self.txpath = transmit_path(self, modulator_class, options)
-
+class my_top_block(gr.top_block):
+ def __init__(self, modulator, options):
+ gr.top_block.__init__(self)
+ self.txpath = transmit_path(modulator, options)
+ self.connect(self.txpath)
# /////////////////////////////////////////////////////////////////////////////
# main
@@ -50,7 +49,7 @@ class my_graph(gr.flow_graph):
def main():
def send_pkt(payload='', eof=False):
- return fg.txpath.send_pkt(payload, eof)
+ return tb.txpath.send_pkt(payload, eof)
def rx_callback(ok, payload):
print "ok = %r, payload = '%s'" % (ok, payload)
@@ -95,14 +94,14 @@ def main():
source_file = open(options.from_file, 'r')
# build the graph
- fg = my_graph(mods[options.modulation], options)
+ tb = my_top_block(mods[options.modulation], options)
r = gr.enable_realtime_scheduling()
if r != gr.RT_OK:
print "Warning: failed to enable realtime scheduling"
- fg.start() # start flow graph
-
+ tb.start() # start flow graph
+
# generate and send packets
nbytes = int(1e6 * options.megabytes)
n = 0
@@ -126,7 +125,8 @@ def main():
pktno += 1
send_pkt(eof=True)
- fg.wait() # wait for it to finish
+
+ tb.wait() # wait for it to finish
if __name__ == '__main__':
try:
diff --git a/gnuradio-examples/python/digital/receive_path.py b/gnuradio-examples/python/digital/receive_path.py
index 5cf4e59eed..29f1f834dd 100644
--- a/gnuradio-examples/python/digital/receive_path.py
+++ b/gnuradio-examples/python/digital/receive_path.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2005,2006 Free Software Foundation, Inc.
+# Copyright 2005,2006,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gru, blks
+from gnuradio import gr, gru, blks2
from gnuradio import usrp
from gnuradio import eng_notation
import copy
@@ -33,8 +33,12 @@ from pick_bitrate import pick_rx_bitrate
# receive path
# /////////////////////////////////////////////////////////////////////////////
-class receive_path(gr.hier_block):
- def __init__(self, fg, demod_class, rx_callback, options):
+class receive_path(gr.hier_block2):
+ def __init__(self, demod_class, rx_callback, options):
+
+ gr.hier_block2.__init__(self, "receive_path",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
options = copy.copy(options) # make a copy so we can destructively modify
@@ -96,11 +100,10 @@ class receive_path(gr.hier_block):
# receiver
self.packet_receiver = \
- blks.demod_pkts(fg,
- self._demod_class(fg, **demod_kwargs),
- access_code=None,
- callback=self._rx_callback,
- threshold=-1)
+ blks2.demod_pkts(self._demod_class(**demod_kwargs),
+ access_code=None,
+ callback=self._rx_callback,
+ threshold=-1)
# Carrier Sensing Blocks
alpha = 0.001
@@ -109,17 +112,16 @@ class receive_path(gr.hier_block):
if options.log_rx_power == True:
self.probe = gr.probe_avg_mag_sqrd_cf(thresh,alpha)
self.power_sink = gr.file_sink(gr.sizeof_float, "rxpower.dat")
- fg.connect(self.chan_filt, self.probe, self.power_sink)
+ self.connect(self.chan_filt, self.probe, self.power_sink)
else:
self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha)
- fg.connect(self.chan_filt, self.probe)
+ self.connect(self.chan_filt, self.probe)
# Display some information about the setup
if self._verbose:
self._print_verbage()
- fg.connect(self.u, self.chan_filt, self.packet_receiver)
- gr.hier_block.__init__(self, fg, None, None)
+ self.connect(self.u, self.chan_filt, self.packet_receiver)
def _setup_usrp_source(self):
self.u = usrp.source_c (fusb_block_size=self._fusb_block_size,
@@ -246,6 +248,10 @@ class receive_path(gr.hier_block):
print "decim: %3d" % (self._decim)
print "Rx Frequency: %s" % (eng_notation.num_to_str(self._rx_freq))
# print "Rx Frequency: %f" % (self._rx_freq)
+
+ def __del__(self):
+ # Avoid weak reference error
+ del self.subdev
def add_freq_option(parser):
"""
diff --git a/gnuradio-examples/python/digital/receive_path_lb.py b/gnuradio-examples/python/digital/receive_path_lb.py
index 17643c6c01..a6bffeeac4 100644
--- a/gnuradio-examples/python/digital/receive_path_lb.py
+++ b/gnuradio-examples/python/digital/receive_path_lb.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2005,2006 Free Software Foundation, Inc.
+# Copyright 2005,2006,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gru, blks
+from gnuradio import gr, gru, blks2
from gnuradio import eng_notation
import copy
import sys
@@ -29,8 +29,12 @@ import sys
# receive path
# /////////////////////////////////////////////////////////////////////////////
-class receive_path(gr.hier_block):
- def __init__(self, fg, demod_class, rx_callback, options):
+class receive_path(gr.hier_block2):
+ def __init__(self, demod_class, rx_callback, options):
+ gr.hier_block2.__init__(self, "receive_path",
+ gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
+
options = copy.copy(options) # make a copy so we can destructively modify
@@ -55,11 +59,10 @@ class receive_path(gr.hier_block):
# receiver
self.packet_receiver = \
- blks.demod_pkts(fg,
- self._demod_class(fg, **demod_kwargs),
- access_code=None,
- callback=self._rx_callback,
- threshold=-1)
+ blks2.demod_pkts(self._demod_class(**demod_kwargs),
+ access_code=None,
+ callback=self._rx_callback,
+ threshold=-1)
# Carrier Sensing Blocks
alpha = 0.001
@@ -70,13 +73,14 @@ class receive_path(gr.hier_block):
if self._verbose:
self._print_verbage()
+ # connect block input to channel filter
+ self.connect(self, self.channel_filter)
+
# connect the channel input filter to the carrier power detector
- fg.connect(self.channel_filter, self.probe)
+ self.connect(self.channel_filter, self.probe)
# connect channel filter to the packet receiver
- fg.connect(self.channel_filter, self.packet_receiver)
-
- gr.hier_block.__init__(self, fg, self.channel_filter, None)
+ self.connect(self.channel_filter, self.packet_receiver)
def bitrate(self):
return self._bitrate
diff --git a/gnuradio-examples/python/digital/rx_voice.py b/gnuradio-examples/python/digital/rx_voice.py
index c9c33c3d56..b3280d432c 100755
--- a/gnuradio-examples/python/digital/rx_voice.py
+++ b/gnuradio-examples/python/digital/rx_voice.py
@@ -31,6 +31,7 @@ from gnuradio.vocoder import gsm_full_rate
import random
import struct
+import sys
# from current dir
from receive_path import receive_path
@@ -41,27 +42,30 @@ import fusb_options
#raw_input('Attach and press enter')
-class audio_tx(gr.hier_block):
- def __init__(self, fg, audio_output_dev):
+class audio_tx(gr.hier_block2):
+ def __init__(self, audio_output_dev):
+ gr.hier_block2.__init__(self, "audio_tx",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
+
self.packet_src = gr.message_source(33)
voice_decoder = gsm_full_rate.decode_ps()
s2f = gr.short_to_float ()
sink_scale = gr.multiply_const_ff(1.0/32767.)
audio_sink = audio.sink(8000, audio_output_dev)
- fg.connect(self.packet_src, voice_decoder, s2f, sink_scale, audio_sink)
- gr.hier_block.__init__(self, fg, self.packet_src, audio_sink)
+ self.connect(self.packet_src, voice_decoder, s2f, sink_scale, audio_sink)
def msgq(self):
return self.packet_src.msgq()
-class my_graph(gr.flow_graph):
-
+class my_top_block(gr.top_block):
def __init__(self, demod_class, rx_callback, options):
- gr.flow_graph.__init__(self)
- self.rxpath = receive_path(self, demod_class, rx_callback, options)
- self.audio_tx = audio_tx(self, options.audio_output)
-
+ gr.top_block.__init__(self)
+ self.rxpath = receive_path(demod_class, rx_callback, options)
+ self.audio_tx = audio_tx(options.audio_output)
+ self.connect(self.rxpath)
+ self.connect(self.audio_tx)
# /////////////////////////////////////////////////////////////////////////////
# main
@@ -120,14 +124,13 @@ def main():
# build the graph
- fg = my_graph(demods[options.modulation], rx_callback, options)
+ tb = my_top_block(demods[options.modulation], rx_callback, options)
r = gr.enable_realtime_scheduling()
if r != gr.RT_OK:
print "Warning: Failed to enable realtime scheduling."
- fg.start() # start flow graph
- fg.wait() # wait for it to finish
+ tb.run()
if __name__ == '__main__':
try:
diff --git a/gnuradio-examples/python/digital/transmit_path.py b/gnuradio-examples/python/digital/transmit_path.py
index d8bdd0391a..4adf0577d0 100644
--- a/gnuradio-examples/python/digital/transmit_path.py
+++ b/gnuradio-examples/python/digital/transmit_path.py
@@ -1,5 +1,5 @@
#
-# Copyright 2005,2006 Free Software Foundation, Inc.
+# Copyright 2005,2006,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -19,7 +19,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gru, blks
+from gnuradio import gr, gru, blks2
from gnuradio import usrp
from gnuradio import eng_notation
@@ -33,11 +33,14 @@ from pick_bitrate import pick_tx_bitrate
# transmit path
# /////////////////////////////////////////////////////////////////////////////
-class transmit_path(gr.hier_block):
- def __init__(self, fg, modulator_class, options):
+class transmit_path(gr.hier_block2):
+ def __init__(self, modulator_class, options):
'''
See below for what options should hold
'''
+ gr.hier_block2.__init__(self, "transmit_path",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
options = copy.copy(options) # make a copy so we can destructively modify
@@ -77,12 +80,11 @@ class transmit_path(gr.hier_block):
# transmitter
self.packet_transmitter = \
- blks.mod_pkts(fg,
- self._modulator_class(fg, **mod_kwargs),
- access_code=None,
- msgq_limit=4,
- pad_for_usrp=True,
- use_whitener_offset=options.use_whitener_offset)
+ blks2.mod_pkts(self._modulator_class(**mod_kwargs),
+ access_code=None,
+ msgq_limit=4,
+ pad_for_usrp=True,
+ use_whitener_offset=options.use_whitener_offset)
# Set the USRP for maximum transmit gain
@@ -100,8 +102,7 @@ class transmit_path(gr.hier_block):
self._print_verbage()
# Create and setup transmit path flow graph
- fg.connect(self.packet_transmitter, self.amp, self.u)
- gr.hier_block.__init__(self, fg, None, None)
+ self.connect(self.packet_transmitter, self.amp, self.u)
def _setup_usrp_sink(self):
"""
diff --git a/gnuradio-examples/python/digital/transmit_path_lb.py b/gnuradio-examples/python/digital/transmit_path_lb.py
index 322d46af3c..49f53076e6 100644
--- a/gnuradio-examples/python/digital/transmit_path_lb.py
+++ b/gnuradio-examples/python/digital/transmit_path_lb.py
@@ -1,5 +1,5 @@
#
-# Copyright 2005,2006 Free Software Foundation, Inc.
+# Copyright 2005, 2006, 2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -19,7 +19,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gru, blks
+from gnuradio import gr, gru, blks2
from gnuradio import eng_notation
import copy
@@ -29,11 +29,14 @@ import sys
# transmit path
# /////////////////////////////////////////////////////////////////////////////
-class transmit_path(gr.hier_block):
- def __init__(self, fg, modulator_class, options):
+class transmit_path(gr.hier_block2):
+ def __init__(self, modulator_class, options):
'''
See below for what options should hold
'''
+ gr.hier_block2.__init__(self, "transmit_path",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
options = copy.copy(options) # make a copy so we can destructively modify
@@ -48,12 +51,14 @@ class transmit_path(gr.hier_block):
mod_kwargs = self._modulator_class.extract_kwargs_from_options(options)
# transmitter
+ print self._modulator_class
+ print mod_kwargs
+ modulator = self._modulator_class(**mod_kwargs)
self.packet_transmitter = \
- blks.mod_pkts(fg,
- self._modulator_class(fg, **mod_kwargs),
- access_code=None,
- msgq_limit=4,
- pad_for_usrp=True)
+ blks2.mod_pkts(modulator,
+ access_code=None,
+ msgq_limit=4,
+ pad_for_usrp=True)
self.amp = gr.multiply_const_cc(1)
self.set_tx_amplitude(self._tx_amplitude)
@@ -63,9 +68,7 @@ class transmit_path(gr.hier_block):
self._print_verbage()
# Connect components in the flowgraph
- fg.connect(self.packet_transmitter, self.amp)
-
- gr.hier_block.__init__(self, fg, None, self.amp)
+ self.connect(self.packet_transmitter, self.amp, self)
def set_tx_amplitude(self, ampl):
"""
diff --git a/gnuradio-examples/python/digital/tunnel.py b/gnuradio-examples/python/digital/tunnel.py
index 7d17ff958a..111ed0db42 100755
--- a/gnuradio-examples/python/digital/tunnel.py
+++ b/gnuradio-examples/python/digital/tunnel.py
@@ -86,14 +86,14 @@ def open_tun_interface(tun_device_filename):
# the flow graph
# /////////////////////////////////////////////////////////////////////////////
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self, mod_class, demod_class,
rx_callback, options):
- gr.flow_graph.__init__(self)
- self.txpath = transmit_path(self, mod_class, options)
- self.rxpath = receive_path(self, demod_class, rx_callback, options)
+ gr.top_block.__init__(self)
+ self.txpath = transmit_path(mod_class, options)
+ self.rxpath = receive_path(demod_class, rx_callback, options)
def send_pkt(self, payload='', eof=False):
return self.txpath.send_pkt(payload, eof)
@@ -123,10 +123,10 @@ class cs_mac(object):
def __init__(self, tun_fd, verbose=False):
self.tun_fd = tun_fd # file descriptor for TUN/TAP interface
self.verbose = verbose
- self.fg = None # flow graph (access to PHY)
+ self.tb = None # top block (access to PHY)
- def set_flow_graph(self, fg):
- self.fg = fg
+ def set_top_block(self, tb):
+ self.tb = tb
def phy_rx_callback(self, ok, payload):
"""
@@ -152,20 +152,20 @@ class cs_mac(object):
while 1:
payload = os.read(self.tun_fd, 10*1024)
if not payload:
- self.fg.send_pkt(eof=True)
+ self.tb.send_pkt(eof=True)
break
if self.verbose:
print "Tx: len(payload) = %4d" % (len(payload),)
delay = min_delay
- while self.fg.carrier_sensed():
+ while self.tb.carrier_sensed():
sys.stderr.write('B')
time.sleep(delay)
if delay < 0.050:
delay = delay * 2 # exponential back-off
- self.fg.send_pkt(payload)
+ self.tb.send_pkt(payload)
# /////////////////////////////////////////////////////////////////////////////
@@ -243,26 +243,26 @@ def main():
# build the graph (PHY)
- fg = my_graph(mods[options.modulation],
- demods[options.modulation],
- mac.phy_rx_callback,
- options)
+ tb = my_top_block(mods[options.modulation],
+ demods[options.modulation],
+ mac.phy_rx_callback,
+ options)
- mac.set_flow_graph(fg) # give the MAC a handle for the PHY
+ mac.set_top_block(tb) # give the MAC a handle for the PHY
- if fg.txpath.bitrate() != fg.rxpath.bitrate():
+ if tb.txpath.bitrate() != tb.rxpath.bitrate():
print "WARNING: Transmit bitrate = %sb/sec, Receive bitrate = %sb/sec" % (
- eng_notation.num_to_str(fg.txpath.bitrate()),
- eng_notation.num_to_str(fg.rxpath.bitrate()))
+ eng_notation.num_to_str(tb.txpath.bitrate()),
+ eng_notation.num_to_str(tb.rxpath.bitrate()))
print "modulation: %s" % (options.modulation,)
print "freq: %s" % (eng_notation.num_to_str(options.tx_freq))
- print "bitrate: %sb/sec" % (eng_notation.num_to_str(fg.txpath.bitrate()),)
- print "samples/symbol: %3d" % (fg.txpath.samples_per_symbol(),)
- #print "interp: %3d" % (fg.txpath.interp(),)
- #print "decim: %3d" % (fg.rxpath.decim(),)
+ print "bitrate: %sb/sec" % (eng_notation.num_to_str(tb.txpath.bitrate()),)
+ print "samples/symbol: %3d" % (tb.txpath.samples_per_symbol(),)
+ #print "interp: %3d" % (tb.txpath.interp(),)
+ #print "decim: %3d" % (tb.rxpath.decim(),)
- fg.rxpath.set_carrier_threshold(options.carrier_threshold)
+ tb.rxpath.set_carrier_threshold(options.carrier_threshold)
print "Carrier sense threshold:", options.carrier_threshold, "dB"
print
@@ -275,12 +275,12 @@ def main():
print
- fg.start() # Start executing the flow graph (runs in separate threads)
+ tb.start() # Start executing the flow graph (runs in separate threads)
mac.main_loop() # don't expect this to return...
- fg.stop() # but if it does, tell flow graph to stop.
- fg.wait() # wait for it to finish
+ tb.stop() # but if it does, tell flow graph to stop.
+ tb.wait() # wait for it to finish
if __name__ == '__main__':
diff --git a/gnuradio-examples/python/digital/tx_voice.py b/gnuradio-examples/python/digital/tx_voice.py
index 09b1c58470..c97e2f084a 100755
--- a/gnuradio-examples/python/digital/tx_voice.py
+++ b/gnuradio-examples/python/digital/tx_voice.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2005,2006 Free Software Foundation, Inc.
+# Copyright 2005,2006,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -43,8 +43,11 @@ import fusb_options
#raw_input('Attach and press enter')
-class audio_rx(gr.hier_block):
- def __init__(self, fg, audio_input_dev):
+class audio_rx(gr.hier_block2):
+ def __init__(self, audio_input_dev):
+ gr.hier_block2.__init__(self, "audio_rx",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
sample_rate = 8000
src = audio.source(sample_rate, audio_input_dev)
src_scale = gr.multiply_const_ff(32767)
@@ -52,20 +55,20 @@ class audio_rx(gr.hier_block):
voice_coder = gsm_full_rate.encode_sp()
self.packets_from_encoder = gr.msg_queue()
packet_sink = gr.message_sink(33, self.packets_from_encoder, False)
- fg.connect(src, src_scale, f2s, voice_coder, packet_sink)
- gr.hier_block.__init__(self, fg, src, packet_sink)
+ self.connect(src, src_scale, f2s, voice_coder, packet_sink)
def get_encoded_voice_packet(self):
return self.packets_from_encoder.delete_head()
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self, modulator_class, options):
- gr.flow_graph.__init__(self)
- self.txpath = transmit_path(self, modulator_class, options)
- self.audio_rx = audio_rx(self, options.audio_input)
-
+ gr.top_block.__init__(self)
+ self.txpath = transmit_path(modulator_class, options)
+ self.audio_rx = audio_rx(options.audio_input)
+ self.connect(self.txpath)
+ self.connect(self.audio_rx)
# /////////////////////////////////////////////////////////////////////////////
@@ -75,7 +78,7 @@ class my_graph(gr.flow_graph):
def main():
def send_pkt(payload='', eof=False):
- return fg.txpath.send_pkt(payload, eof)
+ return tb.txpath.send_pkt(payload, eof)
def rx_callback(ok, payload):
print "ok = %r, payload = '%s'" % (ok, payload)
@@ -115,14 +118,14 @@ def main():
# build the graph
- fg = my_graph(mods[options.modulation], options)
+ tb = my_top_block(mods[options.modulation], options)
r = gr.enable_realtime_scheduling()
if r != gr.RT_OK:
print "Warning: failed to enable realtime scheduling"
- fg.start() # start flow graph
+ tb.start() # start flow graph
# generate and send packets
nbytes = int(1e6 * options.megabytes)
@@ -130,7 +133,7 @@ def main():
pktno = 0
while nbytes == 0 or n < nbytes:
- packet = fg.audio_rx.get_encoded_voice_packet()
+ packet = tb.audio_rx.get_encoded_voice_packet()
s = packet.to_string()
send_pkt(s)
n += len(s)
@@ -138,12 +141,12 @@ def main():
pktno += 1
send_pkt(eof=True)
- fg.wait() # wait for it to finish
- fg.txpath.set_auto_tr(False)
+ tb.wait() # wait for it to finish
+ tb.txpath.set_auto_tr(False)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
- pass
+ pass \ No newline at end of file
diff --git a/gnuradio-examples/python/digital_voice/cvsd_test.py b/gnuradio-examples/python/digital_voice/cvsd_test.py
index 843201d6e5..f8f1b9cce6 100755
--- a/gnuradio-examples/python/digital_voice/cvsd_test.py
+++ b/gnuradio-examples/python/digital_voice/cvsd_test.py
@@ -20,7 +20,7 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, blks
+from gnuradio import gr, blks2
from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
@@ -41,25 +41,21 @@ def main():
parser.print_help()
raise SystemExit, 1
- fg = gr.flow_graph()
+ tb = gr.top_block()
src = audio.source(int(options.sample_rate), options.audio_input)
- tx = blks.cvsd_encode(fg, options.resample_rate)
+ tx = blks2.cvsd_encode(options.resample_rate)
# todo: add noise
- rx = blks.cvsd_decode(fg, options.resample_rate)
+ rx = blks2.cvsd_decode(options.resample_rate)
dst = audio.sink(int(options.sample_rate), options.audio_output)
- fg.connect(src, tx, rx, dst)
+ tb.connect(src, tx, rx, dst)
+ tb.run()
- fg.start()
-
- raw_input ('Press Enter to exit: ')
- fg.stop()
-
-
if __name__ == '__main__':
+ print "Enter CTRL-C to exit"
try:
main()
except KeyboardInterrupt:
diff --git a/gnuradio-examples/python/digital_voice/encdec.py b/gnuradio-examples/python/digital_voice/encdec.py
index a2e9d1e49f..e87d57e2b9 100755
--- a/gnuradio-examples/python/digital_voice/encdec.py
+++ b/gnuradio-examples/python/digital_voice/encdec.py
@@ -20,15 +20,15 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, blks
+from gnuradio import gr, blks2
from gnuradio import audio
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser = OptionParser(option_class=eng_option)
parser.add_option("-I", "--audio-input", type="string", default="",
@@ -42,10 +42,10 @@ class my_graph(gr.flow_graph):
sample_rate = 8000
src = audio.source(sample_rate, options.audio_input)
- tx = blks.digital_voice_tx(self)
+ tx = blks2.digital_voice_tx(self)
if_gain = gr.multiply_const_cc(10000)
# channel simulator here...
- rx = blks.digital_voice_rx(self)
+ rx = blks2.digital_voice_rx(self)
dst = audio.sink(sample_rate, options.audio_output)
self.connect(src, tx, if_gain, rx, dst)
@@ -53,6 +53,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/hier/Makefile.am b/gnuradio-examples/python/hier/Makefile.am
deleted file mode 100644
index 10bda3b474..0000000000
--- a/gnuradio-examples/python/hier/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-#
-# Copyright 2006 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.
-#
-
-SUBDIRS = \
- audio \
- dect \
- digital \
- ofdm \
- networking \
- sounder \
- usrp
diff --git a/gnuradio-examples/python/hier/audio/Makefile.am b/gnuradio-examples/python/hier/audio/Makefile.am
deleted file mode 100644
index 34538d180f..0000000000
--- a/gnuradio-examples/python/hier/audio/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Copyright 2006 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.
-#
-
-EXTRA_DIST = \
- dial_tone2.py
diff --git a/gnuradio-examples/python/hier/audio/dial_tone2.py b/gnuradio-examples/python/hier/audio/dial_tone2.py
deleted file mode 100755
index 70d1e53d20..0000000000
--- a/gnuradio-examples/python/hier/audio/dial_tone2.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,2006 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.
-#
-
-from gnuradio import gr
-from gnuradio import audio
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-# Top-level block creating a dial tone
-# Derives from new class gr.hier_block2
-class dial_tone(gr.top_block):
- def __init__(self,
- sample_rate, # Audio output sample rate (int)
- audio_output, # Audio output device
- amplitude): # Output volume (0.0-1.0)
-
- gr.top_block.__init__(self, "dial_tone")
-
- src0 = gr.sig_source_f(sample_rate, gr.GR_SIN_WAVE, 350, amplitude)
- src1 = gr.sig_source_f(sample_rate, gr.GR_SIN_WAVE, 440, amplitude)
- dst = audio.sink(sample_rate, audio_output)
-
- self.connect(src0, (dst, 0))
- self.connect(src1, (dst, 1))
-
-if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
- parser.add_option("-r", "--sample-rate", type="eng_float", default=48000,
- help="set sample rate to RATE (48000)")
- parser.add_option("-a", "--amplitude", type="eng_float", default=0.1,
- help="set output volume to AMPLITUDE (0.1)")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- raise SystemExit, 1
-
- # Create an instance of a hierarchical block
- top = dial_tone(int(options.sample_rate),
- options.audio_output,
- options.amplitude)
-
- try:
- # Run forever
- top.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
diff --git a/gnuradio-examples/python/hier/dect/gmsk2.py b/gnuradio-examples/python/hier/dect/gmsk2.py
deleted file mode 100644
index f26c566552..0000000000
--- a/gnuradio-examples/python/hier/dect/gmsk2.py
+++ /dev/null
@@ -1,278 +0,0 @@
-#
-# GMSK modulation and demodulation.
-#
-#
-# Copyright 2005,2006,2007 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.
-#
-
-# See gnuradio-examples/python/digital for examples
-
-from gnuradio import gr
-from gnuradio import modulation_utils
-from math import pi
-import numpy
-from pprint import pprint
-import inspect
-
-# default values (used in __init__ and add_options)
-_def_samples_per_symbol = 2
-_def_bt = 0.35
-_def_verbose = False
-_def_log = False
-
-_def_gain_mu = 0.05
-_def_mu = 0.5
-_def_freq_error = 0.0
-_def_omega_relative_limit = 0.005
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# GMSK modulator
-# /////////////////////////////////////////////////////////////////////////////
-
-class gmsk2_mod(gr.hier_block2):
-
- def __init__(self,
- samples_per_symbol=_def_samples_per_symbol,
- bt=_def_bt,
- verbose=_def_verbose,
- log=_def_log):
- """
- Hierarchical block for Gaussian Minimum Shift Key (GMSK)
- modulation.
-
- The input is a byte stream (unsigned char) and the
- output is the complex modulated signal at baseband.
-
- @param samples_per_symbol: samples per baud >= 2
- @type samples_per_symbol: integer
- @param bt: Gaussian filter bandwidth * symbol time
- @type bt: float
- @param verbose: Print information about modulator?
- @type verbose: bool
- @param debug: Print modualtion data to files?
- @type debug: bool
- """
- gr.hier_block2.__init__(self,
- "gmsk2_mod", # Block typename
- gr.io_signature(1,1,gr.sizeof_char), # Input signature
- gr.io_signature(1,1,gr.sizeof_gr_complex)) # Output signature
-
- self._samples_per_symbol = samples_per_symbol
- self._bt = bt
-
- if not isinstance(samples_per_symbol, int) or samples_per_symbol < 2:
- raise TypeError, ("samples_per_symbol must be an integer >= 2, is %r" % (samples_per_symbol,))
-
- ntaps = 4 * samples_per_symbol # up to 3 bits in filter at once
- sensitivity = (pi / 2) / samples_per_symbol # phase change per bit = pi / 2
-
- # Turn it into NRZ data.
- self.nrz = gr.bytes_to_syms()
-
- # Form Gaussian filter
- # Generate Gaussian response (Needs to be convolved with window below).
- self.gaussian_taps = gr.firdes.gaussian(
- 1, # gain
- samples_per_symbol, # symbol_rate
- bt, # bandwidth * symbol time
- ntaps # number of taps
- )
-
- self.sqwave = (1,) * samples_per_symbol # rectangular window
- self.taps = numpy.convolve(numpy.array(self.gaussian_taps),numpy.array(self.sqwave))
- self.gaussian_filter = gr.interp_fir_filter_fff(samples_per_symbol, self.taps)
-
- # FM modulation
- self.fmmod = gr.frequency_modulator_fc(sensitivity)
-
- if verbose:
- self._print_verbage()
-
- self.connect(self, self.nrz, self.gaussian_filter, self.fmmod, self)
-
- if log:
- self._setup_logging()
-
- def samples_per_symbol(self):
- return self._samples_per_symbol
-
- def bits_per_symbol(self=None): # staticmethod that's also callable on an instance
- return 1
- bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method.
-
- def _print_verbage(self):
- print "bits per symbol = %d" % self.bits_per_symbol()
- print "Gaussian filter bt = %.2f" % self._bt
-
-
- def _setup_logging(self):
- print "Modulation logging turned on."
- self.connect(self.nrz, gr.file_sink(gr.sizeof_float, "nrz.dat"))
- self.connect(self.gaussian_filter, gr.file_sink(gr.sizeof_float, "gaussian_filter.dat"))
- self.connect(self.fmmod, gr.file_sink(gr.sizeof_gr_complex, "fmmod.dat"))
-
- def add_options(parser):
- """
- Adds GMSK modulation-specific options to the standard parser
- """
- parser.add_option("", "--bt", type="float", default=_def_bt,
- help="set bandwidth-time product [default=%default] (GMSK)")
- add_options=staticmethod(add_options)
-
- # FIXME: figure out what has to change for gr.hier_block2 version
- #def extract_kwargs_from_options(options):
- # """
- # Given command line options, create dictionary suitable for passing to __init__
- # """
- # return modulation_utils.extract_kwargs_from_options(gmsk_mod.__init__,
- # ('self', 'fg'), options)
- #extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# GMSK demodulator
-# /////////////////////////////////////////////////////////////////////////////
-
-class gmsk2_demod(gr.hier_block2):
-
- def __init__(self,
- samples_per_symbol=_def_samples_per_symbol,
- gain_mu=_def_gain_mu,
- mu=_def_mu,
- omega_relative_limit=_def_omega_relative_limit,
- freq_error=_def_freq_error,
- verbose=_def_verbose,
- log=_def_log):
- """
- Hierarchical block for Gaussian Minimum Shift Key (GMSK)
- demodulation.
-
- The input is the complex modulated signal at baseband.
- The output is a stream of bits packed 1 bit per byte (the LSB)
-
- @param samples_per_symbol: samples per baud
- @type samples_per_symbol: integer
- @param verbose: Print information about modulator?
- @type verbose: bool
- @param log: Print modualtion data to files?
- @type log: bool
-
- Clock recovery parameters. These all have reasonble defaults.
-
- @param gain_mu: controls rate of mu adjustment
- @type gain_mu: float
- @param mu: fractional delay [0.0, 1.0]
- @type mu: float
- @param omega_relative_limit: sets max variation in omega
- @type omega_relative_limit: float, typically 0.000200 (200 ppm)
- @param freq_error: bit rate error as a fraction
- @param float
- """
-
- gr.hier_block2.__init__(self,
- "gmsk2_demod", # Block typename
- gr.io_signature(1,1,gr.sizeof_gr_complex), # Input signature
- gr.io_signature(1,1,gr.sizeof_char)) # Output signature
-
- self._samples_per_symbol = samples_per_symbol
- self._gain_mu = gain_mu
- self._mu = mu
- self._omega_relative_limit = omega_relative_limit
- self._freq_error = freq_error
-
- if samples_per_symbol < 2:
- raise TypeError, "samples_per_symbol >= 2, is %f" % samples_per_symbol
-
- self._omega = samples_per_symbol*(1+self._freq_error)
-
- self._gain_omega = .25 * self._gain_mu * self._gain_mu # critically damped
-
- # Demodulate FM
- sensitivity = (pi / 2) / samples_per_symbol
- self.fmdemod = gr.quadrature_demod_cf(1.0 / sensitivity)
-
- # the clock recovery block tracks the symbol clock and resamples as needed.
- # the output of the block is a stream of soft symbols (float)
- self.clock_recovery = gr.clock_recovery_mm_ff(self._omega, self._gain_omega,
- self._mu, self._gain_mu,
- self._omega_relative_limit)
-
- # slice the floats at 0, outputting 1 bit (the LSB of the output byte) per sample
- self.slicer = gr.binary_slicer_fb()
-
- if verbose:
- self._print_verbage()
-
- self.connect(self, self.fmdemod, self.clock_recovery, self.slicer, self)
-
- if log:
- self._setup_logging()
-
- def samples_per_symbol(self):
- return self._samples_per_symbol
-
- def bits_per_symbol(self=None): # staticmethod that's also callable on an instance
- return 1
- bits_per_symbol = staticmethod(bits_per_symbol) # make it a static method.
-
- def _print_verbage(self):
- print "bits per symbol = %d" % self.bits_per_symbol()
- print "M&M clock recovery omega = %f" % self._omega
- print "M&M clock recovery gain mu = %f" % self._gain_mu
- print "M&M clock recovery mu = %f" % self._mu
- print "M&M clock recovery omega rel. limit = %f" % self._omega_relative_limit
- print "frequency error = %f" % self._freq_error
-
-
- def _setup_logging(self):
- print "Demodulation logging turned on."
- self.connect(fmdemod, gr.file_sink(gr.sizeof_float, "fmdemod.dat"))
- self.connect(clock_recovery, gr.file_sink(gr.sizeof_float, "clock_recovery.dat"))
- self.connect(slicer, gr.file_sink(gr.sizeof_char, "slicer.dat"))
-
- def add_options(parser):
- """
- Adds GMSK demodulation-specific options to the standard parser
- """
- parser.add_option("", "--gain-mu", type="float", default=_def_gain_mu,
- help="M&M clock recovery gain mu [default=%default] (GMSK/PSK)")
- parser.add_option("", "--mu", type="float", default=_def_mu,
- help="M&M clock recovery mu [default=%default] (GMSK/PSK)")
- parser.add_option("", "--omega-relative-limit", type="float", default=_def_omega_relative_limit,
- help="M&M clock recovery omega relative limit [default=%default] (GMSK/PSK)")
- parser.add_option("", "--freq-error", type="float", default=_def_freq_error,
- help="M&M clock recovery frequency error [default=%default] (GMSK)")
- add_options=staticmethod(add_options)
-
- # FIXME: figure out what this is for gr.hier_block2 version
- #def extract_kwargs_from_options(options):
- # """
- # Given command line options, create dictionary suitable for passing to __init__
- # """
- # return modulation_utils.extract_kwargs_from_options(gmsk_demod.__init__,
- # ('self', 'fg'), options)
- #extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
-
-#
-# Add these to the mod/demod registry
-#
-modulation_utils.add_type_1_mod('gmsk2', gmsk2_mod)
-modulation_utils.add_type_1_demod('gmsk2', gmsk2_demod)
diff --git a/gnuradio-examples/python/hier/digital/Makefile.am b/gnuradio-examples/python/hier/digital/Makefile.am
deleted file mode 100644
index 35824b1361..0000000000
--- a/gnuradio-examples/python/hier/digital/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# Copyright 2004 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.
-#
-
-EXTRA_DIST = \
- README \
- benchmark_loopback.py \
- benchmark_rx.py \
- benchmark_tx.py \
- fusb_options.py \
- pick_bitrate.py \
- receive_path.py \
- receive_path_lb.py \
- rx_voice.py \
- transmit_path.py \
- transmit_path_lb.py \
- tunnel.py \
- tx_voice.py
-
-MOSTLYCLEANFILES = *~ *.pyc *.dat
diff --git a/gnuradio-examples/python/hier/digital/README b/gnuradio-examples/python/hier/digital/README
deleted file mode 100644
index 9d8a404976..0000000000
--- a/gnuradio-examples/python/hier/digital/README
+++ /dev/null
@@ -1,77 +0,0 @@
-Quick overview of what's here:
-
-* benchmark_tx.py: generates packets of the size you
-specify and sends them across the air using the USRP. Known to work
-well using the USRP with the RFX transceiver daughterboards.
-You can specify the bitrate to use with the -r <bitrate> command line
-parameter. The default is 500k. Some machines will do 1M or more.
-You can select the modulation to use with the -m <modulation> command
-line argument. The legal values for <modulation> are gmsk, dbpsk and dqpsk.
-
-* benchmark_rx.py: the receiver half of benchmark_tx.py.
-Command line arguments are pretty much the same as rx. Works well
-with a USRP and RFX transceiver daughterboards. Will also work
-with TVRX daugherboard, but you'll need to fiddle with the gain. See
-below. Prints a summary of each packet received and keeps a running
-total of packets received, and how many of them were error free.
-There are two levels of error reporting going on. If the access code
-(PN code) and header of a packet were properly detected, then you'll
-get an output line. If the CRC32 of the payload was correct you get
-"ok = True", else "ok = False". The "pktno" is extracted from the
-received packet. If there are skipped numbers, you're missing some
-packets. Be sure you've got a suitable antenna connected to the TX/RX
-port on each board. For the RFX-400, "70 cm" / 420 MHz antennas for ham
-handi-talkies work great. These are available at ham radio supplies,
-etc. The boards need to be at least 3m apart. You can also try
-experimenting with the rx gain (-g <gain> command line option).
-
-Generally speaking, I start the rx first on one machine, and then fire
-up the tx on the other machine. The tx also supports a discontinous
-transmission mode where it sends bursts of 5 packets and then waits 1
-second. This is useful for ensuring that all the receiver control
-loops lock up fast enough.
-
-* tunnel.py: This program provides a framework for building your own
-MACs. It creates a "TAP" interface in the kernel, typically gr0,
-and sends and receives ethernet frames through it. See
-/usr/src/linux/Documentation/networking/tuntap.txt and/or Google for
-"universal tun tap". The Linux 2.6 kernel includes the tun module, you
-don't have to build it. You may have to "modprobe tun" if it's not
-loaded by default. If /dev/net/tun doesn't exist, try "modprobe tun".
-
-To run this program you'll need to be root or running with the
-appropriate capability to open the tun interface. You'll need to fire
-up two copies on different machines. Once each is running you'll need
-to ifconfig the gr0 interface to set the IP address.
-
-This will allow two machines to talk, but anything beyond the two
-machines depends on your networking setup. Left as an exercise...
-
-On machine A:
-
- $ su
- # ./tunnel.py --freq 423.0M --bitrate 500k
- # # in another window on A, also as root...
- # ifconfig gr0 192.168.200.1
-
-
-On machine B:
-
- $ su
- # ./tunnel.py --freq 423.0M --bitrate 500k
- # # in another window on B, also as root...
- # ifconfig gr0 192.168.200.2
-
-Now, on machine A you shold be able to ping machine B:
-
- $ ping 192.168.200.2
-
-and you should see some output for each packet in the
-tunnel.py window if you used the -v option.
-
-Likewise, on machine B:
-
- $ ping 192.168.200.1
-
-This now uses a carrier sense MAC, so you should be able to ssh
-between the machines, web browse, etc.
diff --git a/gnuradio-examples/python/hier/digital/benchmark_loopback.py b/gnuradio-examples/python/hier/digital/benchmark_loopback.py
deleted file mode 100755
index 31dfb991ba..0000000000
--- a/gnuradio-examples/python/hier/digital/benchmark_loopback.py
+++ /dev/null
@@ -1,181 +0,0 @@
-#!/usr/bin/env python
-#!/usr/bin/env python
-#
-# Copyright 2005, 2006,2007 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.
-#
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random, time, struct, sys, math
-
-# from current dir
-from transmit_path_lb import transmit_path
-from receive_path_lb import receive_path
-import fusb_options
-
-class awgn_channel(gr.hier_block2):
- def __init__(self, sample_rate, noise_voltage, frequency_offset, seed=False):
- gr.hier_block2.__init__(self, "awgn_channel",
- gr.io_signature(1,1,gr.sizeof_gr_complex), # Input signature
- gr.io_signature(1,1,gr.sizeof_gr_complex)) # Output signature
-
- # Create the Gaussian noise source
- if not seed:
- self.noise = gr.noise_source_c(gr.GR_GAUSSIAN, noise_voltage)
- else:
- rseed = int(time.time())
- self.noise = gr.noise_source_c(gr.GR_GAUSSIAN, noise_voltage, rseed)
- self.adder = gr.add_cc()
-
- # Create the frequency offset
- self.offset = gr.sig_source_c((sample_rate*1.0), gr.GR_SIN_WAVE, frequency_offset, 1.0, 0.0)
- self.mixer = gr.multiply_cc()
-
- # Connect the components
- self.connect(self, (self.mixer, 0))
- self.connect(self.offset, (self.mixer, 1))
- self.connect(self.mixer, (self.adder, 0))
- self.connect(self.noise, (self.adder, 1))
- self.connect(self.adder, self)
-
-
-class my_graph(gr.top_block):
- def __init__(self, mod_class, demod_class, rx_callback, options):
- gr.top_block.__init__(self, "my_graph")
-
- channelon = True;
-
- SNR = 10.0**(options.snr/10.0)
- frequency_offset = options.frequency_offset
-
- power_in_signal = abs(options.tx_amplitude)**2
- noise_power = power_in_signal/SNR
- noise_voltage = math.sqrt(noise_power)
-
- self.txpath = transmit_path(mod_class, options)
- self.throttle = gr.throttle(gr.sizeof_gr_complex, options.sample_rate)
- self.rxpath = receive_path(demod_class, rx_callback, options)
-
- if channelon:
- self.channel = awgn_channel(options.sample_rate, noise_voltage, frequency_offset, options.seed)
- self.connect(self.txpath, self.throttle, self.channel, self.rxpath)
- else:
- self.connect(self.txpath, self.throttle, self.rxpath)
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- global n_rcvd, n_right
-
- n_rcvd = 0
- n_right = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
- def send_pkt(payload='', eof=False):
- return top_block.txpath.send_pkt(payload, eof)
-
-
- mods = modulation_utils.type_1_mods()
- demods = modulation_utils.type_1_demods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
- channel_grp = parser.add_option_group("Channel")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='dbpsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-s", "--size", type="eng_float", default=1500,
- help="set packet size [default=%default]")
- parser.add_option("-M", "--megabytes", type="eng_float", default=1.0,
- help="set megabytes to transmit [default=%default]")
- parser.add_option("","--discontinuous", action="store_true", default=False,
- help="enable discontinous transmission (bursts of 5 packets)")
-
- channel_grp.add_option("", "--sample-rate", type="eng_float", default=1e5,
- help="set speed of channel/simulation rate to RATE [default=%default]")
- channel_grp.add_option("", "--snr", type="eng_float", default=30,
- help="set the SNR of the channel in dB [default=%default]")
- channel_grp.add_option("", "--frequency-offset", type="eng_float", default=0,
- help="set frequency offset introduced by channel [default=%default]")
- channel_grp.add_option("", "--seed", action="store_true", default=False,
- help="use a random seed for AWGN noise [default=%default]")
-
- transmit_path.add_options(parser, expert_grp)
- receive_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
- for demod in demods.values():
- demod.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- # Create an instance of a hierarchical block
- top_block = my_graph(mods[options.modulation], demods[options.modulation], rx_callback, options)
- top_block.start()
-
- # generate and send packets
- nbytes = int(1e6 * options.megabytes)
- n = 0
- pktno = 0
- pkt_size = int(options.size)
-
- while n < nbytes:
- send_pkt(struct.pack('!H', pktno) + (pkt_size - 2) * chr(pktno & 0xff))
- n += pkt_size
- if options.discontinuous and pktno % 5 == 4:
- time.sleep(1)
- pktno += 1
-
- send_pkt(eof=True)
-
- top_block.wait()
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/hier/digital/benchmark_rx.py b/gnuradio-examples/python/hier/digital/benchmark_rx.py
deleted file mode 100755
index c92d487bdc..0000000000
--- a/gnuradio-examples/python/hier/digital/benchmark_rx.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006,2007 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.
-#
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random
-import struct
-import sys
-
-# from current dir
-from receive_path import receive_path
-import fusb_options
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter: ')
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-global n_rcvd, n_right
-
-def main():
- global n_rcvd, n_right
-
- n_rcvd = 0
- n_right = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right
- (pktno,) = struct.unpack('!H', payload[0:2])
- n_rcvd += 1
- if ok:
- n_right += 1
-
- print "ok = %5s pktno = %4d n_rcvd = %4d n_right = %4d" % (
- ok, pktno, n_rcvd, n_right)
-
-
- demods = modulation_utils.type_1_demods()
-
- # Create Options Parser:
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(demods.keys()),))
-
- receive_path.add_options(parser, expert_grp)
-
- for mod in demods.values():
- mod.add_options(expert_grp)
-
- fusb_options.add_options(expert_grp)
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.rx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: Failed to enable realtime scheduling."
-
- # Create an instance of a hierarchical block
- top_block = receive_path(demods[options.modulation], rx_callback, options)
- top_block.run()
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/hier/digital/benchmark_tx.py b/gnuradio-examples/python/hier/digital/benchmark_tx.py
deleted file mode 100755
index 752cdff553..0000000000
--- a/gnuradio-examples/python/hier/digital/benchmark_tx.py
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005, 2006,2007 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.
-#
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random, time, struct, sys
-
-# from current dir
-from transmit_path import transmit_path
-import fusb_options
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter')
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- def send_pkt(payload='', eof=False):
- return top_block.send_pkt(payload, eof)
-
- def rx_callback(ok, payload):
- print "ok = %r, payload = '%s'" % (ok, payload)
-
- mods = modulation_utils.type_1_mods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-s", "--size", type="eng_float", default=1500,
- help="set packet size [default=%default]")
- parser.add_option("-M", "--megabytes", type="eng_float", default=1.0,
- help="set megabytes to transmit [default=%default]")
- parser.add_option("","--discontinuous", action="store_true", default=False,
- help="enable discontinous transmission (bursts of 5 packets)")
-
- transmit_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
-
- fusb_options.add_options(expert_grp)
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.tx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
- # Create an instance of a hierarchical block
- top_block = transmit_path(mods[options.modulation], options)
- top_block.start()
-
- # generate and send packets
- nbytes = int(1e6 * options.megabytes)
- n = 0
- pktno = 0
- pkt_size = int(options.size)
-
- while n < nbytes:
- send_pkt(struct.pack('!H', pktno) + (pkt_size - 2) * chr(pktno & 0xff))
- n += pkt_size
- sys.stderr.write('.')
- if options.discontinuous and pktno % 5 == 4:
- time.sleep(1)
- pktno += 1
-
- send_pkt(eof=True)
- top_block.wait()
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/hier/digital/fusb_options.py b/gnuradio-examples/python/hier/digital/fusb_options.py
deleted file mode 100644
index 153e06bea7..0000000000
--- a/gnuradio-examples/python/hier/digital/fusb_options.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright 2006 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.
-#
-
-def add_options(parser):
- """
- Add Fast USB specifc options to command line parser.
-
- @param parser: instance of OptionParser
- """
- parser.add_option("-B", "--fusb-block-size", type="int", default=0,
- help="specify fast usb block size [default=%default]")
- parser.add_option("-N", "--fusb-nblocks", type="int", default=0,
- help="specify number of fast usb blocks [default=%default]")
diff --git a/gnuradio-examples/python/hier/digital/pick_bitrate.py b/gnuradio-examples/python/hier/digital/pick_bitrate.py
deleted file mode 100644
index 82a4768888..0000000000
--- a/gnuradio-examples/python/hier/digital/pick_bitrate.py
+++ /dev/null
@@ -1,143 +0,0 @@
-#
-# Copyright 2005,2006 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.
-#
-
-_default_bitrate = 500e3
-
-_valid_samples_per_symbol = (2,3,4,5,6,7)
-
-def _gen_tx_info(converter_rate):
- results = []
- for samples_per_symbol in _valid_samples_per_symbol:
- for interp in range(16, 512 + 1, 4):
- bitrate = converter_rate / interp / samples_per_symbol
- results.append((bitrate, samples_per_symbol, interp))
- results.sort()
- return results
-
-def _gen_rx_info(converter_rate):
- results = []
- for samples_per_symbol in _valid_samples_per_symbol:
- for decim in range(8, 256 + 1, 2):
- bitrate = converter_rate / decim / samples_per_symbol
- results.append((bitrate, samples_per_symbol, decim))
- results.sort()
- return results
-
-def _filter_info(info, samples_per_symbol, xrate):
- if samples_per_symbol is not None:
- info = [x for x in info if x[1] == samples_per_symbol]
- if xrate is not None:
- info = [x for x in info if x[2] == xrate]
- return info
-
-def _pick_best(target_bitrate, bits_per_symbol, info):
- """
- @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate)
- """
- if len(info) == 0:
- raise RuntimeError, "info is zero length!"
-
- if target_bitrate is None: # return the fastest one
- return info[-1]
-
- # convert bit rate to symbol rate
- target_symbolrate = target_bitrate / bits_per_symbol
-
- # Find the closest matching symbol rate.
- # In the event of a tie, the one with the lowest samples_per_symbol wins.
- # (We already sorted them, so the first one is the one we take)
-
- best = info[0]
- best_delta = abs(target_symbolrate - best[0])
- for x in info[1:]:
- delta = abs(target_symbolrate - x[0])
- if delta < best_delta:
- best_delta = delta
- best = x
-
- # convert symbol rate back to bit rate
- return ((best[0] * bits_per_symbol),) + best[1:]
-
-def _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- xrate, converter_rate, gen_info):
- """
- @returns tuple (bitrate, samples_per_symbol, interp_rate_or_decim_rate)
- """
- if not isinstance(bits_per_symbol, int) or bits_per_symbol < 1:
- raise ValueError, "bits_per_symbol must be an int >= 1"
-
- if samples_per_symbol is not None and xrate is not None: # completely determined
- return (float(converter_rate) / xrate / samples_per_symbol,
- samples_per_symbol, xrate)
-
- if bitrate is None and samples_per_symbol is None and xrate is None:
- bitrate = _default_bitrate
-
- # now we have a target bitrate and possibly an xrate or
- # samples_per_symbol constraint, but not both of them.
-
- return _pick_best(bitrate, bits_per_symbol,
- _filter_info(gen_info(converter_rate), samples_per_symbol, xrate))
-
-# ---------------------------------------------------------------------------------------
-
-def pick_tx_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- interp_rate, converter_rate=128e6):
- """
- Given the 4 input parameters, return at configuration that matches
-
- @param bitrate: desired bitrate or None
- @type bitrate: number or None
- @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
- @type bits_per_symbol: integer >= 1
- @param samples_per_symbol: samples/baud (aka samples/symbol)
- @type samples_per_symbol: number or None
- @param interp_rate: USRP interpolation factor
- @type interp_rate: integer or None
- @param converter_rate: converter sample rate in Hz
- @type converter_rate: number
-
- @returns tuple (bitrate, samples_per_symbol, interp_rate)
- """
- return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- interp_rate, converter_rate, _gen_tx_info)
-
-
-def pick_rx_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- decim_rate, converter_rate=64e6):
- """
- Given the 4 input parameters, return at configuration that matches
-
- @param bitrate: desired bitrate or None
- @type bitrate: number or None
- @param bits_per_symbol: E.g., BPSK -> 1, QPSK -> 2, 8-PSK -> 3
- @type bits_per_symbol: integer >= 1
- @param samples_per_symbol: samples/baud (aka samples/symbol)
- @type samples_per_symbol: number or None
- @param decim_rate: USRP decimation factor
- @type decim_rate: integer or None
- @param converter_rate: converter sample rate in Hz
- @type converter_rate: number
-
- @returns tuple (bitrate, samples_per_symbol, decim_rate)
- """
- return _pick_bitrate(bitrate, bits_per_symbol, samples_per_symbol,
- decim_rate, converter_rate, _gen_rx_info)
diff --git a/gnuradio-examples/python/hier/digital/receive_path.py b/gnuradio-examples/python/hier/digital/receive_path.py
deleted file mode 100644
index 917ed1aa33..0000000000
--- a/gnuradio-examples/python/hier/digital/receive_path.py
+++ /dev/null
@@ -1,256 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006,2007 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.
-#
-
-from gnuradio import gr, gru, blks2
-from gnuradio import usrp
-from gnuradio import eng_notation
-import copy
-import sys
-
-# from current dir
-from pick_bitrate import pick_rx_bitrate
-
-# /////////////////////////////////////////////////////////////////////////////
-# receive path
-# /////////////////////////////////////////////////////////////////////////////
-
-class receive_path(gr.top_block):
- def __init__(self, demod_class, rx_callback, options):
- gr.top_block.__init__(self, "receive_path")
- options = copy.copy(options) # make a copy so we can destructively modify
-
- self._verbose = options.verbose
- self._rx_freq = options.rx_freq # receiver's center frequency
- self._rx_gain = options.rx_gain # receiver's gain
- self._rx_subdev_spec = options.rx_subdev_spec # daughterboard to use
- self._bitrate = options.bitrate # desired bit rate
- self._decim = options.decim # Decimating rate for the USRP (prelim)
- self._samples_per_symbol = options.samples_per_symbol # desired samples/symbol
- self._fusb_block_size = options.fusb_block_size # usb info for USRP
- self._fusb_nblocks = options.fusb_nblocks # usb info for USRP
-
- self._rx_callback = rx_callback # this callback is fired when there's a packet available
- self._demod_class = demod_class # the demodulator_class we're using
-
- if self._rx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --rx-freq FREQ must be specified\n")
- raise SystemExit
-
- # Set up USRP source; also adjusts decim, samples_per_symbol, and bitrate
- self._setup_usrp_source()
-
- g = self.subdev.gain_range()
- if options.show_rx_gain_range:
- print "Rx Gain Range: minimum = %g, maximum = %g, step size = %g" \
- % (g[0], g[1], g[2])
-
- self.set_gain(options.rx_gain)
-
- self.set_auto_tr(True) # enable Auto Transmit/Receive switching
-
- # Set RF frequency
- ok = self.set_freq(self._rx_freq)
- if not ok:
- print "Failed to set Rx frequency to %s" % (eng_notation.num_to_str(self._rx_freq))
- raise ValueError, eng_notation.num_to_str(self._rx_freq)
-
- # copy the final answers back into options for use by demodulator
- options.samples_per_symbol = self._samples_per_symbol
- options.bitrate = self._bitrate
- options.decim = self._decim
-
- # Get demod_kwargs
- demod_kwargs = self._demod_class.extract_kwargs_from_options(options)
-
- # Design filter to get actual channel we want
- sw_decim = 1
- chan_coeffs = gr.firdes.low_pass (1.0, # gain
- sw_decim * self._samples_per_symbol, # sampling rate
- 1.0, # midpoint of trans. band
- 0.5, # width of trans. band
- gr.firdes.WIN_HANN) # filter type
-
- # Decimating channel filter
- # complex in and out, float taps
- self.chan_filt = gr.fft_filter_ccc(sw_decim, chan_coeffs)
- #self.chan_filt = gr.fir_filter_ccf(sw_decim, chan_coeffs)
- # receiver
- self.packet_receiver = \
- blks2.demod_pkts(self._demod_class(**demod_kwargs),
- access_code=None,
- callback=self._rx_callback,
- threshold=-1)
-
- # Carrier Sensing Blocks
- alpha = 0.001
- thresh = 30 # in dB, will have to adjust
- self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha)
-
- # Display some information about the setup
- if self._verbose:
- self._print_verbage()
-
- self.channel_filter = gr.fft_filter_ccc(sw_decim, chan_coeffs)
-
- # connect the channel input filter to the carrier power detector
- self.connect(self.u, self.channel_filter, self.probe)
-
- # connect channel filter to the packet receiver
- self.connect(self.channel_filter, self.packet_receiver)
-
-
- def _setup_usrp_source(self):
- self.u = usrp.source_c (fusb_block_size=self._fusb_block_size,
- fusb_nblocks=self._fusb_nblocks)
- adc_rate = self.u.adc_rate()
-
- # derive values of bitrate, samples_per_symbol, and decim from desired info
- (self._bitrate, self._samples_per_symbol, self._decim) = \
- pick_rx_bitrate(self._bitrate, self._demod_class.bits_per_symbol(), \
- self._samples_per_symbol, self._decim, adc_rate)
-
- self.u.set_decim_rate(self._decim)
-
- # determine the daughterboard subdevice we're using
- if self._rx_subdev_spec is None:
- self._rx_subdev_spec = usrp.pick_rx_subdevice(self.u)
- self.subdev = usrp.selected_subdev(self.u, self._rx_subdev_spec)
-
- self.u.set_mux(usrp.determine_rx_mux_value(self.u, self._rx_subdev_spec))
-
- def set_freq(self, target_freq):
- """
- 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 up converter.
- """
- r = self.u.tune(0, self.subdev, target_freq)
- if r:
- return True
-
- return False
-
- def set_gain(self, gain):
- """
- Sets the analog gain in the USRP
- """
- if gain is None:
- r = self.subdev.gain_range()
- gain = (r[0] + r[1])/2 # set gain to midpoint
- self.gain = gain
- return self.subdev.set_gain(gain)
-
- def set_auto_tr(self, enable):
- return self.subdev.set_auto_tr(enable)
-
- def bitrate(self):
- return self._bitrate
-
- def samples_per_symbol(self):
- return self._samples_per_symbol
-
- def decim(self):
- return self._decim
-
- def carrier_sensed(self):
- """
- Return True if we think carrier is present.
- """
- #return self.probe.level() > X
- return self.probe.unmuted()
-
- def carrier_threshold(self):
- """
- Return current setting in dB.
- """
- return self.probe.threshold()
-
- def set_carrier_threshold(self, threshold_in_db):
- """
- Set carrier threshold.
-
- @param threshold_in_db: set detection threshold
- @type threshold_in_db: float (dB)
- """
- self.probe.set_threshold(threshold_in_db)
-
-
- def add_options(normal, expert):
- """
- Adds receiver-specific options to the Options Parser
- """
- add_freq_option(normal)
- if not normal.has_option("--bitrate"):
- normal.add_option("-r", "--bitrate", type="eng_float", default=None,
- help="specify bitrate. samples-per-symbol and interp/decim will be derived.")
- normal.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
- help="select USRP Rx side A or B")
- normal.add_option("", "--rx-gain", type="eng_float", default=None, metavar="GAIN",
- help="set receiver gain in dB [default=midpoint]. See also --show-rx-gain-range")
- normal.add_option("", "--show-rx-gain-range", action="store_true", default=False,
- help="print min and max Rx gain available on selected daughterboard")
- normal.add_option("-v", "--verbose", action="store_true", default=False)
- expert.add_option("-S", "--samples-per-symbol", type="int", default=None,
- help="set samples/symbol [default=%default]")
- expert.add_option("", "--rx-freq", type="eng_float", default=None,
- help="set Rx frequency to FREQ [default=%default]", metavar="FREQ")
- expert.add_option("-d", "--decim", type="intx", default=None,
- help="set fpga decimation rate to DECIM [default=%default]")
- expert.add_option("", "--log", action="store_true", default=False,
- help="Log all parts of flow graph to files (CAUTION: lots of data)")
-
- # Make a static method to call before instantiation
- add_options = staticmethod(add_options)
-
-
- def _print_verbage(self):
- """
- Prints information about the receive path
- """
- print "\nReceive Path:"
- print "Using RX d'board %s" % (self.subdev.side_and_name(),)
- print "Rx gain: %g" % (self.gain,)
- print "modulation: %s" % (self._demod_class.__name__)
- print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate))
- print "samples/symbol: %3d" % (self._samples_per_symbol)
- print "decim: %3d" % (self._decim)
- print "Rx Frequency: %s" % (eng_notation.num_to_str(self._rx_freq))
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
diff --git a/gnuradio-examples/python/hier/digital/receive_path_lb.py b/gnuradio-examples/python/hier/digital/receive_path_lb.py
deleted file mode 100644
index 1138f4c8e6..0000000000
--- a/gnuradio-examples/python/hier/digital/receive_path_lb.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006 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.
-#
-
-from gnuradio import gr, gru, blks2
-from gnuradio import eng_notation
-import copy
-import sys
-
-# /////////////////////////////////////////////////////////////////////////////
-# receive path
-# /////////////////////////////////////////////////////////////////////////////
-
-class receive_path(gr.hier_block2):
- def __init__(self, demod_class, rx_callback, options):
- gr.hier_block2.__init__(self, "receive_path",
- gr.io_signature(1,1,gr.sizeof_gr_complex), # Input signature
- gr.io_signature(0,0,0)) # Output signature
-
- options = copy.copy(options) # make a copy so we can destructively modify
-
- self._verbose = options.verbose
- self._bitrate = options.bitrate # desired bit rate
- self._samples_per_symbol = options.samples_per_symbol # desired samples/symbol
-
- self._rx_callback = rx_callback # this callback is fired when there's a packet available
- self._demod_class = demod_class # the demodulator_class we're using
-
- # Get demod_kwargs
- demod_kwargs = self._demod_class.extract_kwargs_from_options(options)
-
- # Design filter to get actual channel we want
- sw_decim = 1
- chan_coeffs = gr.firdes.low_pass (1.0, # gain
- sw_decim * self._samples_per_symbol, # sampling rate
- 1.0, # midpoint of trans. band
- 0.5, # width of trans. band
- gr.firdes.WIN_HANN) # filter type
-
- # receiver
- self.packet_receiver = \
- blks2.demod_pkts(self._demod_class(**demod_kwargs),
- access_code=None,
- callback=self._rx_callback,
- threshold=-1)
-
- # Carrier Sensing Blocks
- alpha = 0.001
- thresh = 30 # in dB, will have to adjust
- self.probe = gr.probe_avg_mag_sqrd_c(thresh,alpha)
-
- # Display some information about the setup
- if self._verbose:
- self._print_verbage()
-
- self.channel_filter = gr.fft_filter_ccc(sw_decim, chan_coeffs)
-
- # connect the channel input filter to the carrier power detector
- self.connect(self, self.channel_filter, self.probe)
-
- # connect channel filter to the packet receiver
- self.connect(self.channel_filter, self.packet_receiver)
-
- def bitrate(self):
- return self._bitrate
-
- def samples_per_symbol(self):
- return self._samples_per_symbol
-
- def carrier_sensed(self):
- """
- Return True if we think carrier is present.
- """
- #return self.probe.level() > X
- return self.probe.unmuted()
-
- def carrier_threshold(self):
- """
- Return current setting in dB.
- """
- return self.probe.threshold()
-
- def set_carrier_threshold(self, threshold_in_db):
- """
- Set carrier threshold.
-
- @param threshold_in_db: set detection threshold
- @type threshold_in_db: float (dB)
- """
- self.probe.set_threshold(threshold_in_db)
-
-
- def add_options(normal, expert):
- """
- Adds receiver-specific options to the Options Parser
- """
- if not normal.has_option("--bitrate"):
- normal.add_option("-r", "--bitrate", type="eng_float", default=100e3,
- help="specify bitrate [default=%default].")
- normal.add_option("", "--show-rx-gain-range", action="store_true", default=False,
- help="print min and max Rx gain available on selected daughterboard")
- normal.add_option("-v", "--verbose", action="store_true", default=False)
- expert.add_option("-S", "--samples-per-symbol", type="int", default=2,
- help="set samples/symbol [default=%default]")
- expert.add_option("", "--log", action="store_true", default=False,
- help="Log all parts of flow graph to files (CAUTION: lots of data)")
-
- # Make a static method to call before instantiation
- add_options = staticmethod(add_options)
-
-
- def _print_verbage(self):
- """
- Prints information about the receive path
- """
- print "modulation: %s" % (self._demod_class.__name__)
- print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate))
- print "samples/symbol: %3d" % (self._samples_per_symbol)
diff --git a/gnuradio-examples/python/hier/digital/rx_voice.py b/gnuradio-examples/python/hier/digital/rx_voice.py
deleted file mode 100755
index c9c33c3d56..0000000000
--- a/gnuradio-examples/python/hier/digital/rx_voice.py
+++ /dev/null
@@ -1,136 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006 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.
-#
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import usrp
-from gnuradio import audio
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-from gnuradio.vocoder import gsm_full_rate
-
-import random
-import struct
-
-# from current dir
-from receive_path import receive_path
-import fusb_options
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter')
-
-
-class audio_tx(gr.hier_block):
- def __init__(self, fg, audio_output_dev):
- self.packet_src = gr.message_source(33)
- voice_decoder = gsm_full_rate.decode_ps()
- s2f = gr.short_to_float ()
- sink_scale = gr.multiply_const_ff(1.0/32767.)
- audio_sink = audio.sink(8000, audio_output_dev)
- fg.connect(self.packet_src, voice_decoder, s2f, sink_scale, audio_sink)
- gr.hier_block.__init__(self, fg, self.packet_src, audio_sink)
-
- def msgq(self):
- return self.packet_src.msgq()
-
-
-class my_graph(gr.flow_graph):
-
- def __init__(self, demod_class, rx_callback, options):
- gr.flow_graph.__init__(self)
- self.rxpath = receive_path(self, demod_class, rx_callback, options)
- self.audio_tx = audio_tx(self, options.audio_output)
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-global n_rcvd, n_right
-
-def main():
- global n_rcvd, n_right
-
- n_rcvd = 0
- n_right = 0
-
- def rx_callback(ok, payload):
- global n_rcvd, n_right
- n_rcvd += 1
- if ok:
- n_right += 1
-
- fg.audio_tx.msgq().insert_tail(gr.message_from_string(payload))
-
- print "ok = %r n_rcvd = %4d n_right = %4d" % (
- ok, n_rcvd, n_right)
-
- demods = modulation_utils.type_1_demods()
-
- # Create Options Parser:
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(demods.keys()),))
- parser.add_option("-O", "--audio-output", type="string", default="",
- help="pcm output device name. E.g., hw:0,0 or /dev/dsp")
-
- receive_path.add_options(parser, expert_grp)
-
- for mod in demods.values():
- mod.add_options(expert_grp)
-
- fusb_options.add_options(expert_grp)
-
- parser.set_defaults(bitrate=50e3) # override default bitrate default
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.rx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
-
- # build the graph
- fg = my_graph(demods[options.modulation], rx_callback, options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: Failed to enable realtime scheduling."
-
- fg.start() # start flow graph
- fg.wait() # wait for it to finish
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/hier/digital/transmit_path.py b/gnuradio-examples/python/hier/digital/transmit_path.py
deleted file mode 100644
index 18fecd3d5b..0000000000
--- a/gnuradio-examples/python/hier/digital/transmit_path.py
+++ /dev/null
@@ -1,229 +0,0 @@
-#
-# Copyright 2005,2006,2007 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.
-#
-
-from gnuradio import gr, gru, blks2
-from gnuradio import usrp
-from gnuradio import eng_notation
-
-import copy
-import sys
-
-# from current dir
-from pick_bitrate import pick_tx_bitrate
-
-# /////////////////////////////////////////////////////////////////////////////
-# transmit path
-# /////////////////////////////////////////////////////////////////////////////
-
-class transmit_path(gr.top_block):
- def __init__(self, modulator_class, options):
- '''
- See below for what options should hold
- '''
-
- gr.top_block.__init__(self, "transmit_path")
- options = copy.copy(options) # make a copy so we can destructively modify
-
- self._verbose = options.verbose
- self._tx_freq = options.tx_freq # tranmitter's center frequency
- self._tx_amplitude = options.tx_amplitude # digital amplitude sent to USRP
- self._tx_subdev_spec = options.tx_subdev_spec # daughterboard to use
- self._bitrate = options.bitrate # desired bit rate
- self._interp = options.interp # interpolating rate for the USRP (prelim)
- self._samples_per_symbol = options.samples_per_symbol # desired samples/baud
- self._fusb_block_size = options.fusb_block_size # usb info for USRP
- self._fusb_nblocks = options.fusb_nblocks # usb info for USRP
-
- self._modulator_class = modulator_class # the modulator_class we are using
-
- if self._tx_freq is None:
- sys.stderr.write("-f FREQ or --freq FREQ or --tx-freq FREQ must be specified\n")
- raise SystemExit
-
- # Set up USRP sink; also adjusts interp, samples_per_symbol, and bitrate
- self._setup_usrp_sink()
-
- # copy the final answers back into options for use by modulator
- options.samples_per_symbol = self._samples_per_symbol
- options.bitrate = self._bitrate
- options.interp = self._interp
-
- # Get mod_kwargs
- mod_kwargs = self._modulator_class.extract_kwargs_from_options(options)
-
- # Set center frequency of USRP
- ok = self.set_freq(self._tx_freq)
- if not ok:
- print "Failed to set Tx frequency to %s" % (eng_notation.num_to_str(self._tx_freq),)
- raise ValueError
-
- # transmitter
- self.packet_transmitter = \
- blks2.mod_pkts(self._modulator_class(**mod_kwargs),
- access_code=None,
- msgq_limit=4,
- pad_for_usrp=True)
-
- # Set the USRP for maximum transmit gain
- # (Note that on the RFX cards this is a nop.)
- self.set_gain(self.subdev.gain_range()[0])
-
- self.amp = gr.multiply_const_cc(1)
- self.set_tx_amplitude(self._tx_amplitude)
-
- # enable Auto Transmit/Receive switching
- self.set_auto_tr(True)
-
- # Display some information about the setup
- if self._verbose:
- self._print_verbage()
-
- self.connect(self.packet_transmitter, self.amp, self.u)
-
- def _setup_usrp_sink(self):
- """
- Creates a USRP sink, determines the settings for best bitrate,
- and attaches to the transmitter's subdevice.
- """
- self.u = usrp.sink_c(fusb_block_size=self._fusb_block_size,
- fusb_nblocks=self._fusb_nblocks)
- dac_rate = self.u.dac_rate();
-
- # derive values of bitrate, samples_per_symbol, and interp from desired info
- (self._bitrate, self._samples_per_symbol, self._interp) = \
- pick_tx_bitrate(self._bitrate, self._modulator_class.bits_per_symbol(),
- self._samples_per_symbol, self._interp, dac_rate)
-
- self.u.set_interp_rate(self._interp)
-
- # determine the daughterboard subdevice we're using
- if self._tx_subdev_spec is None:
- self._tx_subdev_spec = usrp.pick_tx_subdevice(self.u)
- self.u.set_mux(usrp.determine_tx_mux_value(self.u, self._tx_subdev_spec))
- self.subdev = usrp.selected_subdev(self.u, self._tx_subdev_spec)
-
-
- def set_freq(self, target_freq):
- """
- 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 up converter.
- """
- r = self.u.tune(self.subdev._which, self.subdev, target_freq)
- if r:
- return True
-
- return False
-
- def set_gain(self, gain):
- """
- Sets the analog gain in the USRP
- """
- self.gain = gain
- self.subdev.set_gain(gain)
-
- def set_tx_amplitude(self, ampl):
- """
- Sets the transmit amplitude sent to the USRP
- @param: ampl 0 <= ampl < 32768. Try 8000
- """
- self._tx_amplitude = max(0.0, min(ampl, 32767.0))
- self.amp.set_k(self._tx_amplitude)
-
- def set_auto_tr(self, enable):
- """
- Turns on auto transmit/receive of USRP daughterboard (if exits; else ignored)
- """
- return self.subdev.set_auto_tr(enable)
-
- def send_pkt(self, payload='', eof=False):
- """
- Calls the transmitter method to send a packet
- """
- return self.packet_transmitter.send_pkt(payload, eof)
-
- def bitrate(self):
- return self._bitrate
-
- def samples_per_symbol(self):
- return self._samples_per_symbol
-
- def interp(self):
- return self._interp
-
- def add_options(normal, expert):
- """
- Adds transmitter-specific options to the Options Parser
- """
- add_freq_option(normal)
- if not normal.has_option('--bitrate'):
- normal.add_option("-r", "--bitrate", type="eng_float", default=None,
- help="specify bitrate. samples-per-symbol and interp/decim will be derived.")
- normal.add_option("-T", "--tx-subdev-spec", type="subdev", default=None,
- help="select USRP Tx side A or B")
- normal.add_option("", "--tx-amplitude", type="eng_float", default=12000, metavar="AMPL",
- help="set transmitter digital amplitude: 0 <= AMPL < 32768 [default=%default]")
- normal.add_option("-v", "--verbose", action="store_true", default=False)
-
- expert.add_option("-S", "--samples-per-symbol", type="int", default=None,
- help="set samples/symbol [default=%default]")
- expert.add_option("", "--tx-freq", type="eng_float", default=None,
- help="set transmit frequency to FREQ [default=%default]", metavar="FREQ")
- expert.add_option("-i", "--interp", type="intx", default=None,
- help="set fpga interpolation rate to INTERP [default=%default]")
- expert.add_option("", "--log", action="store_true", default=False,
- help="Log all parts of flow graph to file (CAUTION: lots of data)")
-
- # Make a static method to call before instantiation
- add_options = staticmethod(add_options)
-
- def _print_verbage(self):
- """
- Prints information about the transmit path
- """
- print "Using TX d'board %s" % (self.subdev.side_and_name(),)
- print "Tx amplitude %s" % (self._tx_amplitude)
- print "modulation: %s" % (self._modulator_class.__name__)
- print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate))
- print "samples/symbol: %3d" % (self._samples_per_symbol)
- print "interp: %3d" % (self._interp)
- print "Tx Frequency: %s" % (eng_notation.num_to_str(self._tx_freq))
-
-
-def add_freq_option(parser):
- """
- Hackery that has the -f / --freq option set both tx_freq and rx_freq
- """
- def freq_callback(option, opt_str, value, parser):
- parser.values.rx_freq = value
- parser.values.tx_freq = value
-
- if not parser.has_option('--freq'):
- parser.add_option('-f', '--freq', type="eng_float",
- action="callback", callback=freq_callback,
- help="set Tx and/or Rx frequency to FREQ [default=%default]",
- metavar="FREQ")
diff --git a/gnuradio-examples/python/hier/digital/transmit_path_lb.py b/gnuradio-examples/python/hier/digital/transmit_path_lb.py
deleted file mode 100644
index 5a05b880c7..0000000000
--- a/gnuradio-examples/python/hier/digital/transmit_path_lb.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#
-# Copyright 2005,2006,2007 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.
-#
-
-from gnuradio import gr, gru, blks2
-from gnuradio import eng_notation
-
-import copy
-import sys
-
-# /////////////////////////////////////////////////////////////////////////////
-# transmit path
-# /////////////////////////////////////////////////////////////////////////////
-
-class transmit_path(gr.hier_block2):
- def __init__(self, modulator_class, options):
- '''
- See below for what options should hold
- '''
-
- gr.hier_block2.__init__(self, "transmit_path",
- gr.io_signature(0,0,0), # Input signature
- gr.io_signature(1,1,gr.sizeof_gr_complex)) # Output signature
-
- options = copy.copy(options) # make a copy so we can destructively modify
-
- self._verbose = options.verbose
- self._tx_amplitude = options.tx_amplitude # digital amplitude sent to USRP
- self._bitrate = options.bitrate # desired bit rate
- self._samples_per_symbol = options.samples_per_symbol # desired samples/baud
-
- self._modulator_class = modulator_class # the modulator_class we are using
-
- # Get mod_kwargs
- mod_kwargs = self._modulator_class.extract_kwargs_from_options(options)
-
- # transmitter
- self.packet_transmitter = \
- blks2.mod_pkts(self._modulator_class(**mod_kwargs),
- access_code=None,
- msgq_limit=4,
- pad_for_usrp=True)
-
- self.amp = gr.multiply_const_cc(1)
- self.set_tx_amplitude(self._tx_amplitude)
-
- # Display some information about the setup
- if self._verbose:
- self._print_verbage()
-
- # Connect blocks in the flowgraph; set amp component to the output of this block
- self.connect(self.packet_transmitter, self.amp, self)
-
- def set_tx_amplitude(self, ampl):
- """
- Sets the transmit amplitude sent to the USRP
- @param: ampl 0 <= ampl < 32768. Try 8000
- """
- self._tx_amplitude = max(0.0, min(ampl, 32767.0))
- self.amp.set_k(self._tx_amplitude)
-
- def send_pkt(self, payload='', eof=False):
- """
- Calls the transmitter method to send a packet
- """
- return self.packet_transmitter.send_pkt(payload, eof)
-
- def bitrate(self):
- return self._bitrate
-
- def samples_per_symbol(self):
- return self._samples_per_symbol
-
- def add_options(normal, expert):
- """
- Adds transmitter-specific options to the Options Parser
- """
- if not normal.has_option('--bitrate'):
- normal.add_option("-r", "--bitrate", type="eng_float", default=100e3,
- help="specify bitrate [default=%default].")
- normal.add_option("", "--tx-amplitude", type="eng_float", default=12000, metavar="AMPL",
- help="set transmitter digital amplitude: 0 <= AMPL < 32768 [default=%default]")
- normal.add_option("-v", "--verbose", action="store_true", default=False)
-
- expert.add_option("-S", "--samples-per-symbol", type="int", default=2,
- help="set samples/symbol [default=%default]")
- expert.add_option("", "--log", action="store_true", default=False,
- help="Log all parts of flow graph to file (CAUTION: lots of data)")
-
- # Make a static method to call before instantiation
- add_options = staticmethod(add_options)
-
- def _print_verbage(self):
- """
- Prints information about the transmit path
- """
- print "Tx amplitude %s" % (self._tx_amplitude)
- print "modulation: %s" % (self._modulator_class.__name__)
- print "bitrate: %sb/s" % (eng_notation.num_to_str(self._bitrate))
- print "samples/symbol: %3d" % (self._samples_per_symbol)
-
diff --git a/gnuradio-examples/python/hier/digital/tunnel.py b/gnuradio-examples/python/hier/digital/tunnel.py
deleted file mode 100755
index 7d17ff958a..0000000000
--- a/gnuradio-examples/python/hier/digital/tunnel.py
+++ /dev/null
@@ -1,290 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006 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.
-#
-
-
-# /////////////////////////////////////////////////////////////////////////////
-#
-# This code sets up up a virtual ethernet interface (typically gr0),
-# and relays packets between the interface and the GNU Radio PHY+MAC
-#
-# What this means in plain language, is that if you've got a couple
-# of USRPs on different machines, and if you run this code on those
-# machines, you can talk between them using normal TCP/IP networking.
-#
-# /////////////////////////////////////////////////////////////////////////////
-
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-import random
-import time
-import struct
-import sys
-import os
-
-# from current dir
-from transmit_path import transmit_path
-from receive_path import receive_path
-import fusb_options
-
-#print os.getpid()
-#raw_input('Attach and press enter')
-
-
-# /////////////////////////////////////////////////////////////////////////////
-#
-# Use the Universal TUN/TAP device driver to move packets to/from kernel
-#
-# See /usr/src/linux/Documentation/networking/tuntap.txt
-#
-# /////////////////////////////////////////////////////////////////////////////
-
-# Linux specific...
-# TUNSETIFF ifr flags from <linux/tun_if.h>
-
-IFF_TUN = 0x0001 # tunnel IP packets
-IFF_TAP = 0x0002 # tunnel ethernet frames
-IFF_NO_PI = 0x1000 # don't pass extra packet info
-IFF_ONE_QUEUE = 0x2000 # beats me ;)
-
-def open_tun_interface(tun_device_filename):
- from fcntl import ioctl
-
- mode = IFF_TAP | IFF_NO_PI
- TUNSETIFF = 0x400454ca
-
- tun = os.open(tun_device_filename, os.O_RDWR)
- ifs = ioctl(tun, TUNSETIFF, struct.pack("16sH", "gr%d", mode))
- ifname = ifs[:16].strip("\x00")
- return (tun, ifname)
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# the flow graph
-# /////////////////////////////////////////////////////////////////////////////
-
-class my_graph(gr.flow_graph):
-
- def __init__(self, mod_class, demod_class,
- rx_callback, options):
-
- gr.flow_graph.__init__(self)
- self.txpath = transmit_path(self, mod_class, options)
- self.rxpath = receive_path(self, demod_class, rx_callback, options)
-
- def send_pkt(self, payload='', eof=False):
- return self.txpath.send_pkt(payload, eof)
-
- def carrier_sensed(self):
- """
- Return True if the receive path thinks there's carrier
- """
- return self.rxpath.carrier_sensed()
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# Carrier Sense MAC
-# /////////////////////////////////////////////////////////////////////////////
-
-class cs_mac(object):
- """
- Prototype carrier sense MAC
-
- Reads packets from the TUN/TAP interface, and sends them to the PHY.
- Receives packets from the PHY via phy_rx_callback, and sends them
- into the TUN/TAP interface.
-
- Of course, we're not restricted to getting packets via TUN/TAP, this
- is just an example.
- """
- def __init__(self, tun_fd, verbose=False):
- self.tun_fd = tun_fd # file descriptor for TUN/TAP interface
- self.verbose = verbose
- self.fg = None # flow graph (access to PHY)
-
- def set_flow_graph(self, fg):
- self.fg = fg
-
- def phy_rx_callback(self, ok, payload):
- """
- Invoked by thread associated with PHY to pass received packet up.
-
- @param ok: bool indicating whether payload CRC was OK
- @param payload: contents of the packet (string)
- """
- if self.verbose:
- print "Rx: ok = %r len(payload) = %4d" % (ok, len(payload))
- if ok:
- os.write(self.tun_fd, payload)
-
- def main_loop(self):
- """
- Main loop for MAC.
- Only returns if we get an error reading from TUN.
-
- FIXME: may want to check for EINTR and EAGAIN and reissue read
- """
- min_delay = 0.001 # seconds
-
- while 1:
- payload = os.read(self.tun_fd, 10*1024)
- if not payload:
- self.fg.send_pkt(eof=True)
- break
-
- if self.verbose:
- print "Tx: len(payload) = %4d" % (len(payload),)
-
- delay = min_delay
- while self.fg.carrier_sensed():
- sys.stderr.write('B')
- time.sleep(delay)
- if delay < 0.050:
- delay = delay * 2 # exponential back-off
-
- self.fg.send_pkt(payload)
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- mods = modulation_utils.type_1_mods()
- demods = modulation_utils.type_1_demods()
-
- parser = OptionParser (option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
-
- parser.add_option("-v","--verbose", action="store_true", default=False)
- expert_grp.add_option("-c", "--carrier-threshold", type="eng_float", default=30,
- help="set carrier detect threshold (dB) [default=%default]")
- expert_grp.add_option("","--tun-device-filename", default="/dev/net/tun",
- help="path to tun device file [default=%default]")
-
- transmit_path.add_options(parser, expert_grp)
- receive_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
-
- for demod in demods.values():
- demod.add_options(expert_grp)
-
- fusb_options.add_options(expert_grp)
-
- (options, args) = parser.parse_args ()
- if len(args) != 0:
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- if options.rx_freq is None or options.tx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
- # open the TUN/TAP interface
- (tun_fd, tun_ifname) = open_tun_interface(options.tun_device_filename)
-
- # Attempt to enable realtime scheduling
- r = gr.enable_realtime_scheduling()
- if r == gr.RT_OK:
- realtime = True
- else:
- realtime = False
- print "Note: failed to enable realtime scheduling"
-
-
- # If the user hasn't set the fusb_* parameters on the command line,
- # pick some values that will reduce latency.
-
- if options.fusb_block_size == 0 and options.fusb_nblocks == 0:
- if realtime: # be more aggressive
- options.fusb_block_size = gr.prefs().get_long('fusb', 'rt_block_size', 1024)
- options.fusb_nblocks = gr.prefs().get_long('fusb', 'rt_nblocks', 16)
- else:
- options.fusb_block_size = gr.prefs().get_long('fusb', 'block_size', 4096)
- options.fusb_nblocks = gr.prefs().get_long('fusb', 'nblocks', 16)
-
- #print "fusb_block_size =", options.fusb_block_size
- #print "fusb_nblocks =", options.fusb_nblocks
-
- # instantiate the MAC
- mac = cs_mac(tun_fd, verbose=True)
-
-
- # build the graph (PHY)
- fg = my_graph(mods[options.modulation],
- demods[options.modulation],
- mac.phy_rx_callback,
- options)
-
- mac.set_flow_graph(fg) # give the MAC a handle for the PHY
-
- if fg.txpath.bitrate() != fg.rxpath.bitrate():
- print "WARNING: Transmit bitrate = %sb/sec, Receive bitrate = %sb/sec" % (
- eng_notation.num_to_str(fg.txpath.bitrate()),
- eng_notation.num_to_str(fg.rxpath.bitrate()))
-
- print "modulation: %s" % (options.modulation,)
- print "freq: %s" % (eng_notation.num_to_str(options.tx_freq))
- print "bitrate: %sb/sec" % (eng_notation.num_to_str(fg.txpath.bitrate()),)
- print "samples/symbol: %3d" % (fg.txpath.samples_per_symbol(),)
- #print "interp: %3d" % (fg.txpath.interp(),)
- #print "decim: %3d" % (fg.rxpath.decim(),)
-
- fg.rxpath.set_carrier_threshold(options.carrier_threshold)
- print "Carrier sense threshold:", options.carrier_threshold, "dB"
-
- print
- print "Allocated virtual ethernet interface: %s" % (tun_ifname,)
- print "You must now use ifconfig to set its IP address. E.g.,"
- print
- print " $ sudo ifconfig %s 192.168.200.1" % (tun_ifname,)
- print
- print "Be sure to use a different address in the same subnet for each machine."
- print
-
-
- fg.start() # Start executing the flow graph (runs in separate threads)
-
- mac.main_loop() # don't expect this to return...
-
- fg.stop() # but if it does, tell flow graph to stop.
- fg.wait() # wait for it to finish
-
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/hier/digital/tx_voice.py b/gnuradio-examples/python/hier/digital/tx_voice.py
deleted file mode 100755
index 09b1c58470..0000000000
--- a/gnuradio-examples/python/hier/digital/tx_voice.py
+++ /dev/null
@@ -1,149 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2005,2006 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.
-#
-
-from gnuradio import gr, gru, modulation_utils
-from gnuradio import usrp
-from gnuradio import audio
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-from gnuradio.vocoder import gsm_full_rate
-
-import random
-import time
-import struct
-import sys
-
-# from current dir
-from transmit_path import transmit_path
-import fusb_options
-
-#import os
-#print os.getpid()
-#raw_input('Attach and press enter')
-
-
-class audio_rx(gr.hier_block):
- def __init__(self, fg, audio_input_dev):
- sample_rate = 8000
- src = audio.source(sample_rate, audio_input_dev)
- src_scale = gr.multiply_const_ff(32767)
- f2s = gr.float_to_short()
- voice_coder = gsm_full_rate.encode_sp()
- self.packets_from_encoder = gr.msg_queue()
- packet_sink = gr.message_sink(33, self.packets_from_encoder, False)
- fg.connect(src, src_scale, f2s, voice_coder, packet_sink)
- gr.hier_block.__init__(self, fg, src, packet_sink)
-
- def get_encoded_voice_packet(self):
- return self.packets_from_encoder.delete_head()
-
-
-class my_graph(gr.flow_graph):
-
- def __init__(self, modulator_class, options):
- gr.flow_graph.__init__(self)
- self.txpath = transmit_path(self, modulator_class, options)
- self.audio_rx = audio_rx(self, options.audio_input)
-
-
-
-# /////////////////////////////////////////////////////////////////////////////
-# main
-# /////////////////////////////////////////////////////////////////////////////
-
-def main():
-
- def send_pkt(payload='', eof=False):
- return fg.txpath.send_pkt(payload, eof)
-
- def rx_callback(ok, payload):
- print "ok = %r, payload = '%s'" % (ok, payload)
-
- mods = modulation_utils.type_1_mods()
-
- parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
- expert_grp = parser.add_option_group("Expert")
-
- parser.add_option("-m", "--modulation", type="choice", choices=mods.keys(),
- default='gmsk',
- help="Select modulation from: %s [default=%%default]"
- % (', '.join(mods.keys()),))
- parser.add_option("-M", "--megabytes", type="eng_float", default=0,
- help="set megabytes to transmit [default=inf]")
- parser.add_option("-I", "--audio-input", type="string", default="",
- help="pcm input device name. E.g., hw:0,0 or /dev/dsp")
-
- transmit_path.add_options(parser, expert_grp)
-
- for mod in mods.values():
- mod.add_options(expert_grp)
-
- fusb_options.add_options(expert_grp)
-
- parser.set_defaults(bitrate=50e3) # override default bitrate default
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- if options.tx_freq is None:
- sys.stderr.write("You must specify -f FREQ or --freq FREQ\n")
- parser.print_help(sys.stderr)
- sys.exit(1)
-
-
- # build the graph
- fg = my_graph(mods[options.modulation], options)
-
- r = gr.enable_realtime_scheduling()
- if r != gr.RT_OK:
- print "Warning: failed to enable realtime scheduling"
-
-
- fg.start() # start flow graph
-
- # generate and send packets
- nbytes = int(1e6 * options.megabytes)
- n = 0
- pktno = 0
-
- while nbytes == 0 or n < nbytes:
- packet = fg.audio_rx.get_encoded_voice_packet()
- s = packet.to_string()
- send_pkt(s)
- n += len(s)
- sys.stderr.write('.')
- pktno += 1
-
- send_pkt(eof=True)
- fg.wait() # wait for it to finish
- fg.txpath.set_auto_tr(False)
-
-
-if __name__ == '__main__':
- try:
- main()
- except KeyboardInterrupt:
- pass
diff --git a/gnuradio-examples/python/hier/ofdm/Makefile.am b/gnuradio-examples/python/hier/ofdm/Makefile.am
deleted file mode 100644
index b3ebfe6a80..0000000000
--- a/gnuradio-examples/python/hier/ofdm/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright 2006 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.
-#
-
-EXTRA_DIST = \ No newline at end of file
diff --git a/gnuradio-examples/python/hier/usrp/Makefile.am b/gnuradio-examples/python/hier/usrp/Makefile.am
deleted file mode 100644
index 3d4ea30dbc..0000000000
--- a/gnuradio-examples/python/hier/usrp/Makefile.am
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Copyright 2007 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.
-#
-
-EXTRA_DIST = \
- usrp_fft.py \
- usrp_siggen.py
-
-MOSTLYCLEANFILES = *.pyc *~
diff --git a/gnuradio-examples/python/hier/usrp/usrp_fft.py b/gnuradio-examples/python/hier/usrp/usrp_fft.py
deleted file mode 100755
index 2dc059e533..0000000000
--- a/gnuradio-examples/python/hier/usrp/usrp_fft.py
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004,2005,2007 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.
-#
-
-from gnuradio import gr, gru
-from gnuradio import usrp
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import stdgui2, fftsink2, waterfallsink2, scopesink2, form, slider
-from optparse import OptionParser
-import wx
-import sys
-
-
-def pick_subdevice(u):
- """
- The user didn't specify a subdevice on the command line.
- If there's a daughterboard on A, select A.
- If there's a daughterboard on B, select B.
- Otherwise, select A.
- """
- if u.db[0][0].dbid() >= 0: # dbid is < 0 if there's no d'board or a problem
- return (0, 0)
- if u.db[1][0].dbid() >= 0:
- return (1, 0)
- return (0, 0)
-
-
-class app_top_block(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
-
- self.frame = frame
- self.panel = panel
-
- parser = OptionParser(option_class=eng_option)
- parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
- help="select USRP Rx side A or B (default=first one with a daughterboard)")
- parser.add_option("-d", "--decim", type="int", default=16,
- help="set fgpa decimation rate to DECIM [default=%default]")
- parser.add_option("-f", "--freq", type="eng_float", default=None,
- help="set frequency to FREQ", metavar="FREQ")
- parser.add_option("-g", "--gain", type="eng_float", default=None,
- help="set gain in dB (default is midpoint)")
- parser.add_option("-W", "--waterfall", action="store_true", default=False,
- help="Enable waterfall display")
- parser.add_option("-8", "--width-8", action="store_true", default=False,
- help="Enable 8-bit samples across USB")
- parser.add_option("-S", "--oscilloscope", action="store_true", default=False,
- help="Enable oscilloscope display")
- (options, args) = parser.parse_args()
- if len(args) != 0:
- parser.print_help()
- sys.exit(1)
-
- self.show_debug_info = True
-
- self.u = usrp.source_c(decim_rate=options.decim)
- if options.rx_subdev_spec is None:
- options.rx_subdev_spec = pick_subdevice(self.u)
- self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.rx_subdev_spec))
-
- if options.width_8:
- width = 8
- shift = 8
- format = self.u.make_format(width, shift)
- print "format =", hex(format)
- r = self.u.set_format(format)
- print "set_format =", r
-
- # determine the daughterboard subdevice we're using
- self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec)
-
- input_rate = self.u.adc_freq() / self.u.decim_rate()
-
-
- if options.waterfall:
- self.scope = waterfallsink2.waterfall_sink_c (panel, fft_size=1024, sample_rate=input_rate)
- elif options.oscilloscope:
- self.scope = scopesink2.scope_sink_c(panel, sample_rate=input_rate)
- else:
- self.scope = fftsink2.fft_sink_c (panel, fft_size=1024, sample_rate=input_rate)
-
- self.connect(self.u, self.scope)
-
- self._build_gui(vbox)
-
- # set initial values
-
- if options.gain is None:
- # if no gain was specified, use the mid-point in dB
- g = self.subdev.gain_range()
- options.gain = float(g[0]+g[1])/2
-
- if options.freq is None:
- # if no freq was specified, use the mid-point
- r = self.subdev.freq_range()
- options.freq = float(r[0]+r[1])/2
-
- self.set_gain(options.gain)
-
- if self.show_debug_info:
- self.myform['decim'].set_value(self.u.decim_rate())
- self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate())
- self.myform['dbname'].set_value(self.subdev.name())
- self.myform['baseband'].set_value(0)
- self.myform['ddc'].set_value(0)
-
- if not(self.set_freq(options.freq)):
- self._set_status_msg("Failed to set initial frequency")
-
- def _set_status_msg(self, msg):
- self.frame.GetStatusBar().SetStatusText(msg, 0)
-
- def _build_gui(self, vbox):
-
- def _form_set_freq(kv):
- return self.set_freq(kv['freq'])
-
- vbox.Add(self.scope.win, 10, wx.EXPAND)
-
- # add control area at the bottom
- self.myform = myform = form.form()
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0, 0)
- myform['freq'] = form.float_field(
- parent=self.panel, sizer=hbox, label="Center freq", weight=1,
- callback=myform.check_input_and_call(_form_set_freq, self._set_status_msg))
-
- hbox.Add((5,0), 0, 0)
- g = self.subdev.gain_range()
- myform['gain'] = form.slider_field(parent=self.panel, sizer=hbox, label="Gain",
- weight=3,
- min=int(g[0]), max=int(g[1]),
- callback=self.set_gain)
-
- hbox.Add((5,0), 0, 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
- self._build_subpanel(vbox)
-
- def _build_subpanel(self, vbox_arg):
- # build a secondary information panel (sometimes hidden)
-
- # FIXME figure out how to have this be a subpanel that is always
- # created, but has its visibility controlled by foo.Show(True/False)
-
- def _form_set_decim(kv):
- return self.set_decim(kv['decim'])
-
- if not(self.show_debug_info):
- return
-
- panel = self.panel
- vbox = vbox_arg
- myform = self.myform
-
- #panel = wx.Panel(self.panel, -1)
- #vbox = wx.BoxSizer(wx.VERTICAL)
-
- hbox = wx.BoxSizer(wx.HORIZONTAL)
- hbox.Add((5,0), 0)
-
- myform['decim'] = form.int_field(
- parent=panel, sizer=hbox, label="Decim",
- callback=myform.check_input_and_call(_form_set_decim, self._set_status_msg))
-
- hbox.Add((5,0), 1)
- myform['fs@usb'] = form.static_float_field(
- parent=panel, sizer=hbox, label="Fs@USB")
-
- hbox.Add((5,0), 1)
- myform['dbname'] = form.static_text_field(
- parent=panel, sizer=hbox)
-
- hbox.Add((5,0), 1)
- myform['baseband'] = form.static_float_field(
- parent=panel, sizer=hbox, label="Analog BB")
-
- hbox.Add((5,0), 1)
- myform['ddc'] = form.static_float_field(
- parent=panel, sizer=hbox, label="DDC")
-
- hbox.Add((5,0), 0)
- vbox.Add(hbox, 0, wx.EXPAND)
-
-
- def set_freq(self, target_freq):
- """
- 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.
- """
- r = self.u.tune(0, self.subdev, target_freq)
-
- if r:
- self.myform['freq'].set_value(target_freq) # update displayed value
- if self.show_debug_info:
- self.myform['baseband'].set_value(r.baseband_freq)
- self.myform['ddc'].set_value(r.dxc_freq)
- return True
-
- return False
-
- def set_gain(self, gain):
- self.myform['gain'].set_value(gain) # update displayed value
- self.subdev.set_gain(gain)
-
- def set_decim(self, decim):
- ok = self.u.set_decim_rate(decim)
- if not ok:
- print "set_decim failed"
- input_rate = self.u.adc_freq() / self.u.decim_rate()
- self.scope.set_sample_rate(input_rate)
- if self.show_debug_info: # update displayed values
- self.myform['decim'].set_value(self.u.decim_rate())
- self.myform['fs@usb'].set_value(self.u.adc_freq() / self.u.decim_rate())
- return ok
-
-def main ():
- app = stdgui2.stdapp(app_top_block, "USRP FFT", nstatus=1)
- app.MainLoop()
-
-if __name__ == '__main__':
- main ()
diff --git a/gnuradio-examples/python/hier/usrp/usrp_siggen.py b/gnuradio-examples/python/hier/usrp/usrp_siggen.py
deleted file mode 100755
index 91a7a7affd..0000000000
--- a/gnuradio-examples/python/hier/usrp/usrp_siggen.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr, gru
-from gnuradio import usrp
-from gnuradio.eng_option import eng_option
-from gnuradio import eng_notation
-from optparse import OptionParser
-import sys
-
-class my_graph(gr.top_block):
- def __init__ (self, type, ampl, wfreq, offset, subdev_spec, interp, rf_freq):
- gr.top_block.__init__(self, "usrp_siggen")
-
- # controllable values
- self.interp = interp
- self.waveform_type = type
- self.waveform_ampl = ampl
- self.waveform_freq = wfreq
- self.waveform_offset = offset
-
- self.u = usrp.sink_c (0, self.interp)
-
- # determine the daughterboard subdevice we're using
- if subdev_spec is None:
- ubdev_spec = usrp.pick_tx_subdevice(self.u)
- m = usrp.determine_tx_mux_value(self.u, subdev_spec)
- self.u.set_mux(m)
- self.subdev = usrp.selected_subdev(self.u, subdev_spec)
- self.subdev.set_gain(self.subdev.gain_range()[1]) # set max Tx gain
- self.subdev.set_enable(True) # enable transmitter
- print "Using TX d'board %s" % (self.subdev.side_and_name(),)
-
- if not self.set_freq(rf_freq):
- sys.stderr.write('Failed to set RF frequency\n')
- raise SystemExit
-
- if type == gr.GR_SIN_WAVE or type == gr.GR_CONST_WAVE:
- self.src = gr.sig_source_c (self.usb_freq (),
- gr.GR_SIN_WAVE,
- self.waveform_freq,
- self.waveform_ampl,
- self.waveform_offset)
-
- elif type == gr.GR_UNIFORM or type == gr.GR_GAUSSIAN:
- self.src = gr.noise_source_c (gr.GR_UNIFORM,
- self.waveform_ampl)
-
- else:
- raise ValueError, type
-
- self.connect (self.src, self.u)
-
-
- def usb_freq (self):
- return self.u.dac_freq() / self.interp
-
- def usb_throughput (self):
- return self.usb_freq () * 4
-
- def set_freq(self, target_freq):
- """
- 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 up converter.
- """
- r = self.u.tune(self.subdev._which, self.subdev, target_freq)
- if r:
- #print "r.baseband_freq =", eng_notation.num_to_str(r.baseband_freq)
- #print "r.dxc_freq =", eng_notation.num_to_str(r.dxc_freq)
- #print "r.residual_freq =", eng_notation.num_to_str(r.residual_freq)
- #print "r.inverted =", r.inverted
- return True
-
- return False
-
-
-
-def main ():
- parser = OptionParser (option_class=eng_option)
- parser.add_option ("-T", "--tx-subdev-spec", type="subdev", default=(0, 0),
- help="select USRP Tx side A or B")
- parser.add_option ("-f", "--rf-freq", type="eng_float", default=None,
- help="set RF center frequency to FREQ")
- parser.add_option ("-i", "--interp", type="int", default=64,
- help="set fgpa interpolation rate to INTERP [default=%default]")
-
- parser.add_option ("--sine", dest="type", action="store_const", const=gr.GR_SIN_WAVE,
- help="generate a complex sinusoid [default]", default=gr.GR_SIN_WAVE)
- parser.add_option ("--const", dest="type", action="store_const", const=gr.GR_CONST_WAVE,
- help="generate a constant output")
- parser.add_option ("--gaussian", dest="type", action="store_const", const=gr.GR_GAUSSIAN,
- help="generate Gaussian random output")
- parser.add_option ("--uniform", dest="type", action="store_const", const=gr.GR_UNIFORM,
- help="generate Uniform random output")
-
- parser.add_option ("-w", "--waveform-freq", type="eng_float", default=100e3,
- help="set waveform frequency to FREQ [default=%default]")
- parser.add_option ("-a", "--amplitude", type="eng_float", default=16e3,
- help="set waveform amplitude to AMPLITUDE [default=%default]", metavar="AMPL")
- parser.add_option ("-o", "--offset", type="eng_float", default=0,
- help="set waveform offset to OFFSET [default=%default]")
- (options, args) = parser.parse_args ()
-
- if len(args) != 0:
- parser.print_help()
- raise SystemExit
-
- if options.rf_freq is None:
- sys.stderr.write("usrp_siggen: must specify RF center frequency with -f RF_FREQ\n")
- parser.print_help()
- raise SystemExit
-
- top_block = my_graph(options.type, options.amplitude, options.waveform_freq, options.offset,
- options.tx_subdev_spec, options.interp, options.rf_freq)
-
- try:
- # Run forever
- top_block.run()
- except KeyboardInterrupt:
- # Ctrl-C exits
- pass
-
-if __name__ == '__main__':
- main ()
diff --git a/gnuradio-examples/python/networking/Makefile.am b/gnuradio-examples/python/limbo/networking/Makefile.am
index d302945378..d302945378 100644
--- a/gnuradio-examples/python/networking/Makefile.am
+++ b/gnuradio-examples/python/limbo/networking/Makefile.am
diff --git a/gnuradio-examples/python/networking/measurement_slave.py b/gnuradio-examples/python/limbo/networking/measurement_slave.py
index a2b04151fe..a2b04151fe 100755
--- a/gnuradio-examples/python/networking/measurement_slave.py
+++ b/gnuradio-examples/python/limbo/networking/measurement_slave.py
diff --git a/gnuradio-examples/python/hier/sounder/Makefile.am b/gnuradio-examples/python/limbo/sounder/Makefile.am
index 9814d80ef8..9814d80ef8 100644
--- a/gnuradio-examples/python/hier/sounder/Makefile.am
+++ b/gnuradio-examples/python/limbo/sounder/Makefile.am
diff --git a/gnuradio-examples/python/hier/sounder/sounder_rx.py b/gnuradio-examples/python/limbo/sounder/sounder_rx.py
index d24eb8efa9..d24eb8efa9 100644
--- a/gnuradio-examples/python/hier/sounder/sounder_rx.py
+++ b/gnuradio-examples/python/limbo/sounder/sounder_rx.py
diff --git a/gnuradio-examples/python/hier/sounder/sounder_tx.py b/gnuradio-examples/python/limbo/sounder/sounder_tx.py
index dcdd9fc5ce..dcdd9fc5ce 100644
--- a/gnuradio-examples/python/hier/sounder/sounder_tx.py
+++ b/gnuradio-examples/python/limbo/sounder/sounder_tx.py
diff --git a/gnuradio-examples/python/hier/sounder/usrp_sink.py b/gnuradio-examples/python/limbo/sounder/usrp_sink.py
index 34b6107048..34b6107048 100644
--- a/gnuradio-examples/python/hier/sounder/usrp_sink.py
+++ b/gnuradio-examples/python/limbo/sounder/usrp_sink.py
diff --git a/gnuradio-examples/python/hier/sounder/usrp_sounder_rx.py b/gnuradio-examples/python/limbo/sounder/usrp_sounder_rx.py
index 6b85281ad7..6b85281ad7 100755
--- a/gnuradio-examples/python/hier/sounder/usrp_sounder_rx.py
+++ b/gnuradio-examples/python/limbo/sounder/usrp_sounder_rx.py
diff --git a/gnuradio-examples/python/hier/sounder/usrp_sounder_tx.py b/gnuradio-examples/python/limbo/sounder/usrp_sounder_tx.py
index ae531d5100..ae531d5100 100755
--- a/gnuradio-examples/python/hier/sounder/usrp_sounder_tx.py
+++ b/gnuradio-examples/python/limbo/sounder/usrp_sounder_tx.py
diff --git a/gnuradio-examples/python/hier/sounder/usrp_source.py b/gnuradio-examples/python/limbo/sounder/usrp_source.py
index 63eb3ce2bf..63eb3ce2bf 100644
--- a/gnuradio-examples/python/hier/sounder/usrp_source.py
+++ b/gnuradio-examples/python/limbo/sounder/usrp_source.py
diff --git a/gnuradio-examples/python/hier/networking/Makefile.am b/gnuradio-examples/python/network/Makefile.am
index 95ced72885..5786230934 100644
--- a/gnuradio-examples/python/hier/networking/Makefile.am
+++ b/gnuradio-examples/python/network/Makefile.am
@@ -19,6 +19,8 @@
# Boston, MA 02110-1301, USA.
#
+include $(top_srcdir)/Makefile.common
+
EXTRA_DIST = \
audio_sink.py \
audio_source.py \
@@ -27,4 +29,7 @@ EXTRA_DIST = \
vector_sink.py \
vector_source.py
+ourdatadir = $(exampledir)/network
+ourdata_DATA = $(EXTRA_DIST)
+
MOSTLYCLEANFILES = *.pyc *~
diff --git a/gnuradio-examples/python/hier/networking/audio_sink.py b/gnuradio-examples/python/network/audio_sink.py
index e59d50834a..e59d50834a 100755
--- a/gnuradio-examples/python/hier/networking/audio_sink.py
+++ b/gnuradio-examples/python/network/audio_sink.py
diff --git a/gnuradio-examples/python/hier/networking/audio_source.py b/gnuradio-examples/python/network/audio_source.py
index d7f4f6d936..d7f4f6d936 100755
--- a/gnuradio-examples/python/hier/networking/audio_source.py
+++ b/gnuradio-examples/python/network/audio_source.py
diff --git a/gnuradio-examples/python/hier/networking/dial_tone_sink.py b/gnuradio-examples/python/network/dial_tone_sink.py
index 47d24b9bcf..47d24b9bcf 100755
--- a/gnuradio-examples/python/hier/networking/dial_tone_sink.py
+++ b/gnuradio-examples/python/network/dial_tone_sink.py
diff --git a/gnuradio-examples/python/hier/networking/dial_tone_source.py b/gnuradio-examples/python/network/dial_tone_source.py
index 835f9aafcb..835f9aafcb 100755
--- a/gnuradio-examples/python/hier/networking/dial_tone_source.py
+++ b/gnuradio-examples/python/network/dial_tone_source.py
diff --git a/gnuradio-examples/python/hier/networking/vector_sink.py b/gnuradio-examples/python/network/vector_sink.py
index 981cc598b9..981cc598b9 100755
--- a/gnuradio-examples/python/hier/networking/vector_sink.py
+++ b/gnuradio-examples/python/network/vector_sink.py
diff --git a/gnuradio-examples/python/hier/networking/vector_source.py b/gnuradio-examples/python/network/vector_source.py
index e7ec2a461d..e7ec2a461d 100755
--- a/gnuradio-examples/python/hier/networking/vector_source.py
+++ b/gnuradio-examples/python/network/vector_source.py
diff --git a/gnuradio-examples/python/ofdm/Makefile.am b/gnuradio-examples/python/ofdm/Makefile.am
index e9ff3bacac..c951dd1647 100644
--- a/gnuradio-examples/python/ofdm/Makefile.am
+++ b/gnuradio-examples/python/ofdm/Makefile.am
@@ -29,7 +29,12 @@ EXTRA_DIST = \
fusb_options.py \
pick_bitrate.py \
receive_path.py \
- transmit_path.py
+ transmit_path.py \
+ ofdm_mod_demod_test.py \
+ ofdm_sync.m \
+ ofdm_sync_pn.m \
+ plot_ofdm.m \
+ tunnel.py
ourdatadir = $(exampledir)/ofdm
ourdata_DATA = $(EXTRA_DIST)
diff --git a/gnuradio-examples/python/usrp/fm_tx4.py b/gnuradio-examples/python/usrp/fm_tx4.py
index 7e5023ddb8..e97468d5ed 100755
--- a/gnuradio-examples/python/usrp/fm_tx4.py
+++ b/gnuradio-examples/python/usrp/fm_tx4.py
@@ -1,4 +1,24 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
"""
Transmit N simultaneous narrow band FM signals.
@@ -15,14 +35,14 @@ audio_to_file.py
from gnuradio import gr, eng_notation
from gnuradio import usrp
from gnuradio import audio
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from optparse import OptionParser
from usrpm import usrp_dbid
import math
import sys
-from gnuradio.wxgui import stdgui, fftsink
+from gnuradio.wxgui import stdgui2, fftsink2
from gnuradio import tx_debug_gui
import wx
@@ -30,12 +50,15 @@ import wx
########################################################
# instantiate one transmit chain for each call
-class pipeline(gr.hier_block):
- def __init__(self, fg, filename, lo_freq, audio_rate, if_rate):
+class pipeline(gr.hier_block2):
+ def __init__(self, filename, lo_freq, audio_rate, if_rate):
+
+ gr.hier_block2.__init__(self, "pipeline",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
src = gr.file_source (gr.sizeof_float, filename, True)
- fmtx = blks.nbfm_tx (fg, audio_rate, if_rate,
- max_dev=5e3, tau=75e-6)
+ fmtx = blks2.nbfm_tx (audio_rate, if_rate, max_dev=5e3, tau=75e-6)
# Local oscillator
lo = gr.sig_source_c (if_rate, # sample rate
@@ -45,17 +68,14 @@ class pipeline(gr.hier_block):
0) # DC Offset
mixer = gr.multiply_cc ()
- fg.connect (src, fmtx, (mixer, 0))
- fg.connect (lo, (mixer, 1))
-
- gr.hier_block.__init__(self, fg, src, mixer)
-
+ self.connect (src, fmtx, (mixer, 0))
+ self.connect (lo, (mixer, 1))
-class fm_tx_graph (stdgui.gui_flow_graph):
+class fm_tx_block(stdgui2.std_top_block):
def __init__(self, frame, panel, vbox, argv):
MAX_CHANNELS = 7
- stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv)
+ stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
parser = OptionParser (option_class=eng_option)
parser.add_option("-T", "--tx-subdev-spec", type="subdev", default=None,
@@ -119,9 +139,9 @@ class fm_tx_graph (stdgui.gui_flow_graph):
step = 25e3
offset = (0 * step, 1 * step, -1 * step, 2 * step, -2 * step, 3 * step, -3 * step)
for i in range (options.nchannels):
- t = pipeline (self, "audio-%d.dat" % (i % 4), offset[i],
- self.audio_rate, self.usrp_rate)
- self.connect (t, (sum, i))
+ t = pipeline("audio-%d.dat" % (i % 4), offset[i],
+ self.audio_rate, self.usrp_rate)
+ self.connect(t, (sum, i))
gain = gr.multiply_const_cc (4000.0 / options.nchannels)
@@ -131,9 +151,9 @@ class fm_tx_graph (stdgui.gui_flow_graph):
# plot an FFT to verify we are sending what we want
if 1:
- post_mod = fftsink.fft_sink_c(self, panel, title="Post Modulation",
- fft_size=512, sample_rate=self.usrp_rate,
- y_per_div=20, ref_level=40)
+ post_mod = fftsink2.fft_sink_c(panel, title="Post Modulation",
+ fft_size=512, sample_rate=self.usrp_rate,
+ y_per_div=20, ref_level=40)
self.connect (sum, post_mod)
vbox.Add (post_mod.win, 1, wx.EXPAND)
@@ -170,7 +190,7 @@ class fm_tx_graph (stdgui.gui_flow_graph):
return False
def main ():
- app = stdgui.stdapp (fm_tx_graph, "Multichannel FM Tx")
+ app = stdgui2.stdapp(fm_tx_block, "Multichannel FM Tx", nstatus=1)
app.MainLoop ()
if __name__ == '__main__':
diff --git a/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py b/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py
index 66ee9f02d6..499c7230be 100755
--- a/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py
+++ b/gnuradio-examples/python/usrp/fm_tx_2_daughterboards.py
@@ -1,4 +1,24 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
"""
Transmit 2 signals, one out each daughterboard.
@@ -14,7 +34,7 @@ from gnuradio import gr
from gnuradio.eng_notation import num_to_str, str_to_num
from gnuradio import usrp
from gnuradio import audio
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from optparse import OptionParser
from usrpm import usrp_dbid
@@ -22,11 +42,14 @@ import math
import sys
-class example_signal_0(gr.hier_block):
+class example_signal_0(gr.hier_block2):
"""
Sinusoid at 600 Hz.
"""
- def __init__(self, fg, sample_rate):
+ def __init__(self, sample_rate):
+ gr.hier_block2.__init__(self, "example_signal_0",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
src = gr.sig_source_c (sample_rate, # sample rate
gr.GR_SIN_WAVE, # waveform type
@@ -34,14 +57,17 @@ class example_signal_0(gr.hier_block):
1.0, # amplitude
0) # DC Offset
- gr.hier_block.__init__(self, fg, None, src)
+ self.connect(src, self)
-class example_signal_1(gr.hier_block):
+class example_signal_1(gr.hier_block2):
"""
North American dial tone (350 + 440 Hz).
"""
- def __init__(self, fg, sample_rate):
+ def __init__(self, sample_rate):
+ gr.hier_block2.__init__(self, "example_signal_1",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature
src0 = gr.sig_source_c (sample_rate, # sample rate
gr.GR_SIN_WAVE, # waveform type
@@ -55,17 +81,14 @@ class example_signal_1(gr.hier_block):
1.0, # amplitude
0) # DC Offset
sum = gr.add_cc()
- fg.connect(src0, (sum, 0))
- fg.connect(src1, (sum, 1))
-
- gr.hier_block.__init__(self, fg, None, sum)
-
-
+ self.connect(src0, (sum, 0))
+ self.connect(src1, (sum, 1))
+ self.connect(sum, self)
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__ (self)
+ gr.top_block.__init__(self)
usage="%prog: [options] side-A-tx-freq side-B-tx-freq"
parser = OptionParser (option_class=eng_option, usage=usage)
@@ -108,8 +131,8 @@ class my_graph(gr.flow_graph):
# ----------------------------------------------------------------
# build two signal sources, interleave them, amplify and connect them to usrp
- sig0 = example_signal_0(self, self.usrp_rate)
- sig1 = example_signal_1(self, self.usrp_rate)
+ sig0 = example_signal_0(self.usrp_rate)
+ sig1 = example_signal_1(self.usrp_rate)
intl = gr.interleave(gr.sizeof_gr_complex)
self.connect(sig0, (intl, 0))
@@ -155,6 +178,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/usrp/max_power.py b/gnuradio-examples/python/usrp/max_power.py
index 46df72542b..91005e5300 100755
--- a/gnuradio-examples/python/usrp/max_power.py
+++ b/gnuradio-examples/python/usrp/max_power.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004 Free Software Foundation, Inc.
+# Copyright 2004,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -30,12 +30,12 @@ from gnuradio import usrp
from gnuradio.eng_option import eng_option
from optparse import OptionParser
-def ramp_source (fg):
+def ramp_source ():
period = 2**16
src = gr.vector_source_s (range (-period/2, period/2, 1), True)
return src
-def build_graph (tx_enable, rx_enable):
+def build_block (tx_enable, rx_enable):
max_usb_rate = 8e6 # 8 MS/sec
dac_freq = 128e6
adc_freq = 64e6
@@ -48,23 +48,23 @@ def build_graph (tx_enable, rx_enable):
rx_mux = 0x00003210
rx_decim = int ((adc_freq * rx_nchan) / (max_usb_rate/2)) # 32
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
if tx_enable:
tx_src0 = gr.sig_source_c (dac_freq/tx_interp, gr.GR_CONST_WAVE, 0, 16e3, 0)
usrp_tx = usrp.sink_c (0, tx_interp, tx_nchan, tx_mux)
usrp_tx.set_tx_freq (0, 10e6)
usrp_tx.set_tx_freq (1, 9e6)
- fg.connect (tx_src0, usrp_tx)
+ tb.connect (tx_src0, usrp_tx)
if rx_enable:
usrp_rx = usrp.source_c (0, rx_decim, rx_nchan, rx_mux)
usrp_rx.set_rx_freq (0, 5.5e6)
usrp_rx.set_rx_freq (1, 6.5e6)
rx_dst0 = gr.null_sink (gr.sizeof_gr_complex)
- fg.connect (usrp_rx, rx_dst0)
+ tb.connect (usrp_rx, rx_dst0)
- return fg
+ return tb
def main ():
parser = OptionParser (option_class=eng_option)
@@ -73,11 +73,11 @@ def main ():
parser.add_option ("-r", action="store_true", dest="rx_enable",
default=False, help="enable Rx path")
(options, args) = parser.parse_args ()
- fg = build_graph (options.tx_enable, options.rx_enable)
+ tb = build_block (options.tx_enable, options.rx_enable)
- fg.start ()
+ tb.start ()
raw_input ('Press Enter to quit: ')
- fg.stop ()
+ tb.stop ()
if __name__ == '__main__':
main ()
diff --git a/gnuradio-examples/python/usrp/usrp_benchmark_usb.py b/gnuradio-examples/python/usrp/usrp_benchmark_usb.py
index fc01514a13..4ea84f764b 100755
--- a/gnuradio-examples/python/usrp/usrp_benchmark_usb.py
+++ b/gnuradio-examples/python/usrp/usrp_benchmark_usb.py
@@ -55,21 +55,21 @@ def run_test (usb_throughput, verbose):
# print "tx_interp =", tx_interp, "rx_decim =", rx_decim
assert (tx_interp == 2 * rx_decim)
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
# Build the Tx pipeline
data_src = gr.lfsr_32k_source_s ()
src_head = gr.head (gr.sizeof_short, int (stream_length * 2))
usrp_tx = usrp.sink_s (0, tx_interp)
- fg.connect (data_src, src_head, usrp_tx)
+ tb.connect (data_src, src_head, usrp_tx)
# and the Rx pipeline
usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK)
head = gr.head (gr.sizeof_short, stream_length)
check = gr.check_lfsr_32k_s ()
- fg.connect (usrp_rx, head, check)
+ tb.connect (usrp_rx, head, check)
- fg.run ()
+ tb.run ()
ntotal = check.ntotal ()
nright = check.nright ()
diff --git a/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py b/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py
index 03333fa190..35f015215b 100755
--- a/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py
+++ b/gnuradio-examples/python/usrp/usrp_nbfm_ptt.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2005 Free Software Foundation, Inc.
+# Copyright 2005,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -28,9 +28,9 @@ from optparse import OptionParser
from gnuradio import gr, gru, eng_notation
from gnuradio import usrp
from gnuradio import audio
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
-from gnuradio.wxgui import stdgui, fftsink, scopesink, slider, form
+from gnuradio.wxgui import stdgui2, fftsink2, scopesink2, slider, form
from usrpm import usrp_dbid
from numpy import convolve, array
@@ -43,9 +43,9 @@ from numpy import convolve, array
# Control Stuff
# ////////////////////////////////////////////////////////////////////////
-class ptt_graph(stdgui.gui_flow_graph):
+class ptt_block(stdgui2.std_top_block):
def __init__(self, frame, panel, vbox, argv):
- stdgui.gui_flow_graph.__init__ (self, frame, panel, vbox, argv)
+ stdgui2.std_top_block.__init__ (self, frame, panel, vbox, argv)
self.frame = frame
self.space_bar_pressed = False
@@ -73,8 +73,11 @@ class ptt_graph(stdgui.gui_flow_graph):
if options.freq < 1e6:
options.freq *= 1e6
- self.txpath = transmit_path(self, options.tx_subdev_spec, options.audio_input)
- self.rxpath = receive_path(self, options.rx_subdev_spec, options.rx_gain, options.audio_output)
+ self.txpath = transmit_path(options.tx_subdev_spec, options.audio_input)
+ self.rxpath = receive_path(options.rx_subdev_spec, options.rx_gain, options.audio_output)
+ self.connect(self.txpath)
+ self.connect(self.rxpath)
+
self._build_gui(frame, panel, vbox, argv, options.no_gui)
self.set_transmit(False)
@@ -142,29 +145,29 @@ class ptt_graph(stdgui.gui_flow_graph):
panel.SetFocus()
if 1 and not(no_gui):
- rx_fft = fftsink.fft_sink_c (self, panel, title="Rx Input", fft_size=512,
+ rx_fft = fftsink2.fft_sink_c(panel, title="Rx Input", fft_size=512,
sample_rate=self.rxpath.if_rate,
ref_level=80, y_per_div=20)
self.connect (self.rxpath.u, rx_fft)
vbox.Add (rx_fft.win, 1, wx.EXPAND)
if 1 and not(no_gui):
- rx_fft = fftsink.fft_sink_c (self, panel, title="Post s/w DDC",
+ rx_fft = fftsink2.fft_sink_c(panel, title="Post s/w DDC",
fft_size=512, sample_rate=self.rxpath.quad_rate,
ref_level=80, y_per_div=20)
self.connect (self.rxpath.ddc, rx_fft)
vbox.Add (rx_fft.win, 1, wx.EXPAND)
if 0 and not(no_gui):
- foo = scopesink.scope_sink_f (self, panel, title="Squelch",
- sample_rate=32000)
+ foo = scopesink2.scope_sink_f(panel, title="Squelch",
+ sample_rate=32000)
self.connect (self.rxpath.fmrx.div, (foo,0))
self.connect (self.rxpath.fmrx.gate, (foo,1))
self.connect (self.rxpath.fmrx.squelch_lpf, (foo,2))
vbox.Add (foo.win, 1, wx.EXPAND)
if 0 and not(no_gui):
- tx_fft = fftsink.fft_sink_c (self, panel, title="Tx Output",
+ tx_fft = fftsink2.fft_sink_c(panel, title="Tx Output",
fft_size=512, sample_rate=self.txpath.usrp_rate)
self.connect (self.txpath.amp, tx_fft)
vbox.Add (tx_fft.win, 1, wx.EXPAND)
@@ -265,9 +268,12 @@ class ptt_graph(stdgui.gui_flow_graph):
# Transmit Path
# ////////////////////////////////////////////////////////////////////////
-class transmit_path(gr.hier_block):
- def __init__(self, fg, subdev_spec, audio_input):
-
+class transmit_path(gr.hier_block2):
+ def __init__(self, subdev_spec, audio_input):
+ gr.hier_block2.__init__(self, "transmit_path",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
+
self.u = usrp.sink_c ()
dac_rate = self.u.dac_rate();
@@ -298,11 +304,11 @@ class transmit_path(gr.hier_block):
audio_taps = convolve(array(lpf),array(hpf))
self.audio_filt = gr.fir_filter_fff(1,audio_taps)
- self.pl = blks.ctcss_gen_f(fg, self.audio_rate,123.0)
+ self.pl = blks2.ctcss_gen_f(self.audio_rate,123.0)
self.add_pl = gr.add_ff()
- fg.connect(self.pl,(self.add_pl,1))
+ self.connect(self.pl,(self.add_pl,1))
- self.fmtx = blks.nbfm_tx(fg, self.audio_rate, self.if_rate)
+ self.fmtx = blks2.nbfm_tx(self.audio_rate, self.if_rate)
self.amp = gr.multiply_const_cc (self.normal_gain)
# determine the daughterboard subdevice we're using
@@ -312,10 +318,8 @@ class transmit_path(gr.hier_block):
self.subdev = usrp.selected_subdev(self.u, subdev_spec)
print "TX using", self.subdev.name()
- fg.connect(self.audio, self.audio_amp, self.audio_filt,
- (self.add_pl,0), self.fmtx, self.amp, self.u)
-
- gr.hier_block.__init__(self, fg, None, None)
+ self.connect(self.audio, self.audio_amp, self.audio_filt,
+ (self.add_pl,0), self.fmtx, self.amp, self.u)
self.set_gain(self.subdev.gain_range()[1]) # set max Tx gain
@@ -357,8 +361,11 @@ class transmit_path(gr.hier_block):
# Receive Path
# ////////////////////////////////////////////////////////////////////////
-class receive_path(gr.hier_block):
- def __init__(self, fg, subdev_spec, gain, audio_output):
+class receive_path(gr.hier_block2):
+ def __init__(self, subdev_spec, gain, audio_output):
+ gr.hier_block2.__init__(self, "receive_path",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
self.u = usrp.source_c ()
adc_rate = self.u.adc_rate()
@@ -395,10 +402,10 @@ class receive_path(gr.hier_block):
self.if_rate) # input sample rate
# instantiate the guts of the single channel receiver
- self.fmrx = blks.nbfm_rx(fg, audio_rate, self.quad_rate)
+ self.fmrx = blks2.nbfm_rx(audio_rate, self.quad_rate)
# standard squelch block
- self.squelch = blks.standard_squelch(fg, audio_rate)
+ self.squelch = blks2.standard_squelch(audio_rate)
# audio gain / mute block
self._audio_gain = gr.multiply_const_ff(1.0)
@@ -407,8 +414,7 @@ class receive_path(gr.hier_block):
audio_sink = audio.sink (int(audio_rate), audio_output)
# now wire it all together
- fg.connect (self.u, self.ddc, self.fmrx, self.squelch, self._audio_gain, audio_sink)
- gr.hier_block.__init__(self, fg, self.u, audio_sink)
+ self.connect (self.u, self.ddc, self.fmrx, self.squelch, self._audio_gain, audio_sink)
if gain is None:
# if no gain was specified, use the mid-point in dB
@@ -484,7 +490,7 @@ class receive_path(gr.hier_block):
# ////////////////////////////////////////////////////////////////////////
def main():
- app = stdgui.stdapp(ptt_graph, "NBFM Push to Talk")
+ app = stdgui2.stdapp(ptt_block, "NBFM Push to Talk")
app.MainLoop()
if __name__ == '__main__':
diff --git a/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py b/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py
index 868dee5ccb..c63bef0c4e 100755
--- a/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py
+++ b/gnuradio-examples/python/usrp/usrp_nbfm_rcv.py
@@ -1,12 +1,32 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2007 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.
+#
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui, fftsink, form
+from gnuradio.wxgui import stdgui2, fftsink2, form
from optparse import OptionParser
from usrpm import usrp_dbid
import sys
@@ -18,9 +38,9 @@ import wx
# Control Stuff
#////////////////////////////////////////////////////////////////////////
-class my_graph (stdgui.gui_flow_graph):
+class my_top_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
- stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv)
+ stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
@@ -50,8 +70,9 @@ class my_graph (stdgui.gui_flow_graph):
self.freq = 0
self.freq_step = 25e3
- self.rxpath = receive_path(self, options.rx_subdev_spec, options.gain, options.audio_output)
-
+ self.rxpath = receive_path(options.rx_subdev_spec, options.gain, options.audio_output)
+ self.connect(self.rxpath)
+
self._build_gui(vbox, options.no_gui)
# set initial values
@@ -79,28 +100,27 @@ class my_graph (stdgui.gui_flow_graph):
self.src_fft = None
if 1 and not(no_gui):
- self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP",
+ self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
fft_size=512, sample_rate=self.rxpath.if_rate,
ref_level=80, y_per_div=20)
self.connect (self.rxpath.u, self.src_fft)
vbox.Add (self.src_fft.win, 4, wx.EXPAND)
-
if 1 and not(no_gui):
- rx_fft = fftsink.fft_sink_c (self, self.panel, title="Post s/w DDC",
+ rx_fft = fftsink2.fft_sink_c(self.panel, title="Post s/w DDC",
fft_size=512, sample_rate=self.rxpath.quad_rate,
ref_level=80, y_per_div=20)
self.connect (self.rxpath.ddc, rx_fft)
vbox.Add (rx_fft.win, 4, wx.EXPAND)
if 1 and not(no_gui):
- post_deemph_fft = fftsink.fft_sink_f (self, self.panel, title="Post Deemph",
+ post_deemph_fft = fftsink2.fft_sink_f(self.panel, title="Post Deemph",
fft_size=512, sample_rate=self.rxpath.audio_rate,
y_per_div=10, ref_level=-40)
self.connect (self.rxpath.fmrx.deemph, post_deemph_fft)
vbox.Add (post_deemph_fft.win, 4, wx.EXPAND)
if 0:
- post_filt_fft = fftsink.fft_sink_f (self, self.panel, title="Post Filter",
+ post_filt_fft = fftsink2.fft_sink_f(self.panel, title="Post Filter",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=-40)
self.connect (self.guts.audio_filter, post_filt)
@@ -225,8 +245,11 @@ class my_graph (stdgui.gui_flow_graph):
USE_SIMPLE_SQUELCH = False
-class receive_path(gr.hier_block):
- def __init__(self, fg, subdev_spec, gain, audio_output):
+class receive_path(gr.hier_block2):
+ def __init__(self, subdev_spec, gain, audio_output):
+ gr.hier_block2.__init__(self, "receive_path",
+ gr.io_signature(0, 0, 0), # Input signature
+ gr.io_signature(0, 0, 0)) # Output signature
self.u = usrp.source_c ()
adc_rate = self.u.adc_rate()
@@ -266,10 +289,10 @@ class receive_path(gr.hier_block):
if USE_SIMPLE_SQUELCH:
self.squelch = gr.simple_squelch_cc(20)
else:
- self.squelch = blks.standard_squelch(fg, self.audio_rate)
+ self.squelch = blks2.standard_squelch(self.audio_rate)
# instantiate the guts of the single channel receiver
- self.fmrx = blks.nbfm_rx(fg, self.audio_rate, self.quad_rate)
+ self.fmrx = blks2.nbfm_rx(self.audio_rate, self.quad_rate)
# audio gain / mute block
self._audio_gain = gr.multiply_const_ff(1.0)
@@ -279,13 +302,11 @@ class receive_path(gr.hier_block):
# now wire it all together
if USE_SIMPLE_SQUELCH:
- fg.connect (self.u, self.ddc, self.squelch, self.fmrx,
- self._audio_gain, audio_sink)
+ self.connect (self.u, self.ddc, self.squelch, self.fmrx,
+ self._audio_gain, audio_sink)
else:
- fg.connect (self.u, self.ddc, self.fmrx, self.squelch,
- self._audio_gain, audio_sink)
-
- gr.hier_block.__init__(self, fg, self.u, audio_sink)
+ self.connect (self.u, self.ddc, self.fmrx, self.squelch,
+ self._audio_gain, audio_sink)
if gain is None:
# if no gain was specified, use the mid-point in dB
@@ -358,5 +379,5 @@ class receive_path(gr.hier_block):
# ////////////////////////////////////////////////////////////////////////
if __name__ == '__main__':
- app = stdgui.stdapp (my_graph, "USRP NBFM RX")
+ app = stdgui2.stdapp (my_top_block, "USRP NBFM RX")
app.MainLoop ()
diff --git a/gnuradio-examples/python/usrp/usrp_spectrum_sense.py b/gnuradio-examples/python/usrp/usrp_spectrum_sense.py
index 1d86e03cc1..90adf1671e 100755
--- a/gnuradio-examples/python/usrp/usrp_spectrum_sense.py
+++ b/gnuradio-examples/python/usrp/usrp_spectrum_sense.py
@@ -1,9 +1,28 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2007 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.
+#
from gnuradio import gr, gru, eng_notation, optfir, window
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
from gnuradio.eng_option import eng_option
from optparse import OptionParser
from usrpm import usrp_dbid
@@ -16,9 +35,9 @@ class tune(gr.feval_dd):
"""
This class allows C++ code to callback into python.
"""
- def __init__(self, fg):
+ def __init__(self, tb):
gr.feval_dd.__init__(self)
- self.fg = fg
+ self.tb = tb
def eval(self, ignore):
"""
@@ -36,7 +55,7 @@ class tune(gr.feval_dd):
#
# message on stderr. Not exactly helpful ;)
- new_freq = self.fg.set_next_freq()
+ new_freq = self.tb.set_next_freq()
return new_freq
except Exception, e:
@@ -55,10 +74,10 @@ class parse_msg(object):
self.data = struct.unpack('%df' % (self.vlen,), t)
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
usage = "usage: %prog [options] min_freq max_freq"
parser = OptionParser(option_class=eng_option, usage=usage)
@@ -213,12 +232,12 @@ class my_graph(gr.flow_graph):
self.subdev.set_gain(gain)
-def main_loop(fg):
+def main_loop(tb):
while 1:
# Get the next message sent from the C++ code (blocking call).
# It contains the center frequency and the mag squared of the fft
- m = parse_msg(fg.msgq.delete_head())
+ m = parse_msg(tb.msgq.delete_head())
# Print center freq so we know that something is happening...
print m.center_freq
@@ -233,10 +252,10 @@ def main_loop(fg):
if __name__ == '__main__':
- fg = my_graph()
+ tb = my_top_block()
try:
- fg.start() # start executing flow graph in another thread...
- main_loop(fg)
+ tb.start() # start executing flow graph in another thread...
+ main_loop(tb)
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py b/gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py
index 446ca30a16..696c1a24ce 100755
--- a/gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py
+++ b/gnuradio-examples/python/usrp/usrp_test_loop_lfsr.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
#
-# Copyright 2004 Free Software Foundation, Inc.
+# Copyright 2004,2007 Free Software Foundation, Inc.
#
# This file is part of GNU Radio
#
@@ -32,29 +32,29 @@ def build_graph ():
tx_interp = 32 # tx should be twice rx
rx_decim = 16
- fg = gr.flow_graph ()
+ tb = gr.top_block ()
data_src = gr.lfsr_32k_source_s ()
# usrp_tx = usrp.sink_s (0, tx_interp, 1, 0x98)
usrp_tx = usrp.sink_s (0, tx_interp)
- fg.connect (data_src, usrp_tx)
+ tb.connect (data_src, usrp_tx)
usrp_rx = usrp.source_s (0, rx_decim, 1, 0x32103210, usrp.FPGA_MODE_LOOPBACK)
sink = gr.check_lfsr_32k_s ()
- fg.connect (usrp_rx, sink)
+ tb.connect (usrp_rx, sink)
# file_sink = gr.file_sink (gr.sizeof_short, "loopback.dat")
- # fg.connect (usrp_rx, file_sink)
+ # tb.connect (usrp_rx, file_sink)
- return fg
+ return tb
def main ():
- fg = build_graph ()
+ tb = build_graph ()
try:
- fg.run()
+ tb.run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/usrp/usrp_tv_rcv.py b/gnuradio-examples/python/usrp/usrp_tv_rcv.py
index 8fabc2b470..537e339bef 100755
--- a/gnuradio-examples/python/usrp/usrp_tv_rcv.py
+++ b/gnuradio-examples/python/usrp/usrp_tv_rcv.py
@@ -1,4 +1,25 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
+
"""
Realtime capture and display of analog Tv stations.
Can also use a file as source or sink
@@ -16,10 +37,9 @@ except:
print "FYI: gr-video-sdl is not installed"
print "realtime SDL video output window will not be available"
from gnuradio import usrp
-from gnuradio import blks
from gnuradio.eng_option import eng_option
from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui, fftsink, form
+from gnuradio.wxgui import stdgui2, fftsink2, form
from optparse import OptionParser
from usrpm import usrp_dbid
import sys
@@ -45,9 +65,9 @@ def pick_subdevice(u):
usrp_dbid.BASIC_RX))
-class tv_rx_graph (stdgui.gui_flow_graph):
+class tv_rx_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
- stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv)
+ stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
usage="%prog: [options] [input_filename]. \n If you don't specify an input filename the usrp will be used as source\n " \
"Make sure your input capture file containes interleaved shorts not complex floats"
@@ -391,5 +411,5 @@ class tv_rx_graph (stdgui.gui_flow_graph):
if __name__ == '__main__':
- app = stdgui.stdapp (tv_rx_graph, "USRP TV RX black-and-white")
+ app = stdgui2.stdapp (tv_rx_block, "USRP TV RX black-and-white")
app.MainLoop ()
diff --git a/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py b/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py
index e563188b9c..e6a8de1be9 100755
--- a/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py
+++ b/gnuradio-examples/python/usrp/usrp_tv_rcv_nogui.py
@@ -1,4 +1,24 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
"""
Reads from a file and generates PAL TV pictures in black and white
@@ -24,10 +44,10 @@ except:
print "realtime \"sdl\" video output window will not be available"
-class my_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
usage="%prog: [options] output_filename. \n Special output_filename \"sdl\" will use video_sink_sdl as realtime output window. " \
"You then need to have gr-video-sdl installed. \n" \
@@ -174,6 +194,6 @@ class my_graph(gr.flow_graph):
if __name__ == '__main__':
try:
- my_graph().run()
+ my_top_block().run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv.py
index 9ffb41fb0f..40e4d8384e 100755
--- a/gnuradio-examples/python/usrp/usrp_wfm_rcv.py
+++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv.py
@@ -1,12 +1,32 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui, fftsink, form
+from gnuradio.wxgui import stdgui2, fftsink2, form
from optparse import OptionParser
from usrpm import usrp_dbid
import sys
@@ -26,9 +46,9 @@ def pick_subdevice(u):
usrp_dbid.BASIC_RX))
-class wfm_rx_graph (stdgui.gui_flow_graph):
+class wfm_rx_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
- stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv)
+ stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
@@ -84,7 +104,7 @@ class wfm_rx_graph (stdgui.gui_flow_graph):
#print len(chan_filt_coeffs)
chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
- self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation)
+ self.guts = blks2.wfm_rcv (demod_rate, audio_decimation)
self.volume_control = gr.multiply_const_ff(self.vol)
@@ -129,20 +149,20 @@ class wfm_rx_graph (stdgui.gui_flow_graph):
if 1:
- self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP",
+ self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
fft_size=512, sample_rate=usrp_rate)
self.connect (self.u, self.src_fft)
vbox.Add (self.src_fft.win, 4, wx.EXPAND)
if 1:
- post_filt_fft = fftsink.fft_sink_f (self, self.panel, title="Post Demod",
+ post_filt_fft = fftsink2.fft_sink_f(self.panel, title="Post Demod",
fft_size=1024, sample_rate=usrp_rate,
y_per_div=10, ref_level=0)
self.connect (self.guts.fm_demod, post_filt_fft)
vbox.Add (post_filt_fft.win, 4, wx.EXPAND)
if 0:
- post_deemph_fft = fftsink.fft_sink_f (self, self.panel, title="Post Deemph",
+ post_deemph_fft = fftsink2.fft_sink_f(self.panel, title="Post Deemph",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=-20)
self.connect (self.guts.deemph, post_deemph_fft)
@@ -266,5 +286,5 @@ class wfm_rx_graph (stdgui.gui_flow_graph):
if __name__ == '__main__':
- app = stdgui.stdapp (wfm_rx_graph, "USRP WFM RX")
+ app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX")
app.MainLoop ()
diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py
index efb0448fa2..942fd070a0 100755
--- a/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py
+++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv2_nogui.py
@@ -1,9 +1,29 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from optparse import OptionParser
from usrpm import usrp_dbid
@@ -22,10 +42,10 @@ def pick_subdevice(u):
usrp_dbid.BASIC_RX))
-class wfm_rx_graph (gr.flow_graph):
+class wfm_rx_block (gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
@@ -107,7 +127,7 @@ class wfm_rx_graph (gr.flow_graph):
for n in range(2):
chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
- guts = blks.wfm_rcv (self, demod_rate, audio_decimation)
+ guts = blks2.wfm_rcv (demod_rate, audio_decimation)
volume_control = gr.multiply_const_ff(self.vol)
self.connect((di, n), chan_filt)
self.connect(chan_filt, guts, volume_control)
@@ -135,10 +155,13 @@ class wfm_rx_graph (gr.flow_graph):
def set_gain(self, gain):
self.subdev.set_gain(gain)
+ def __del__(self):
+ # Avoid weak-reference error
+ del self.subdev
if __name__ == '__main__':
- fg = wfm_rx_graph()
+ tb = wfm_rx_block()
try:
- fg.run()
+ tb.run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py
index 9aeae1171f..44f8688556 100755
--- a/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py
+++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv_nogui.py
@@ -1,9 +1,29 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from optparse import OptionParser
from usrpm import usrp_dbid
@@ -23,10 +43,10 @@ def pick_subdevice(u):
usrp_dbid.BASIC_RX))
-class wfm_rx_graph (gr.flow_graph):
+class wfm_rx_block (gr.top_block):
def __init__(self):
- gr.flow_graph.__init__(self)
+ gr.top_block.__init__(self)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
@@ -78,7 +98,7 @@ class wfm_rx_graph (gr.flow_graph):
#print len(chan_filt_coeffs)
chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
- self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation)
+ self.guts = blks2.wfm_rcv (demod_rate, audio_decimation)
self.volume_control = gr.multiply_const_ff(self.vol)
@@ -147,8 +167,8 @@ class wfm_rx_graph (gr.flow_graph):
if __name__ == '__main__':
- fg = wfm_rx_graph()
+ tb = wfm_rx_block()
try:
- fg.run()
+ tb.run()
except KeyboardInterrupt:
pass
diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py
index 58b5908414..a85bcdbf4e 100755
--- a/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py
+++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv_pll.py
@@ -1,12 +1,32 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui, fftsink, form, scopesink
+from gnuradio.wxgui import stdgui2, fftsink2, form, scopesink2
from optparse import OptionParser
from usrpm import usrp_dbid
import sys
@@ -25,9 +45,9 @@ def pick_subdevice(u):
usrp_dbid.TV_RX_REV_3,
usrp_dbid.BASIC_RX))
-class wfm_rx_graph (stdgui.gui_flow_graph):
+class wfm_rx_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
- stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv)
+ stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
@@ -86,8 +106,8 @@ class wfm_rx_graph (stdgui.gui_flow_graph):
chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
- #self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation)
- self.guts = blks.wfm_rcv_pll (self, demod_rate, audio_decimation)
+ #self.guts = blks2.wfm_rcv (demod_rate, audio_decimation)
+ self.guts = blks2.wfm_rcv_pll (demod_rate, audio_decimation)
# FIXME rework {add,multiply}_const_* to handle multiple streams
self.volume_control_l = gr.multiply_const_ff(self.vol)
@@ -146,34 +166,34 @@ class wfm_rx_graph (stdgui.gui_flow_graph):
if 1:
- self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP",
+ self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
fft_size=512, sample_rate=usrp_rate)
self.connect (self.u, self.src_fft)
vbox.Add (self.src_fft.win, 4, wx.EXPAND)
if 1:
- post_fm_demod_fft = fftsink.fft_sink_f (self, self.panel, title="Post FM Demod",
- fft_size=512, sample_rate=demod_rate,
- y_per_div=10, ref_level=0)
+ post_fm_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod",
+ fft_size=512, sample_rate=demod_rate,
+ y_per_div=10, ref_level=0)
self.connect (self.guts.fm_demod, post_fm_demod_fft)
vbox.Add (post_fm_demod_fft.win, 4, wx.EXPAND)
if 0:
- post_stereo_carrier_generator_fft = fftsink.fft_sink_c (self, self.panel, title="Post Stereo_carrier_generator",
+ post_stereo_carrier_generator_fft = fftsink2.fft_sink_c (self.panel, title="Post Stereo_carrier_generator",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=0)
self.connect (self.guts.stereo_carrier_generator, post_stereo_carrier_generator_fft)
vbox.Add (post_stereo_carrier_generator_fft.win, 4, wx.EXPAND)
if 0:
- post_deemphasis_left = fftsink.fft_sink_f (self, self.panel, title="Post_Deemphasis_Left",
+ post_deemphasis_left = fftsink2.fft_sink_f (self.panel, title="Post_Deemphasis_Left",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=0)
self.connect (self.guts.deemph_Left, post_deemphasis_left)
vbox.Add (post_deemphasis_left.win, 4, wx.EXPAND)
if 0:
- post_deemphasis_right = fftsink.fft_sink_f (self, self.panel, title="Post_Deemphasis_Right",
+ post_deemphasis_right = fftsink2.fft_sink_f(self.panel, title="Post_Deemphasis_Right",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=-20)
self.connect (self.guts.deemph_Left, post_deemphasis_right)
@@ -181,14 +201,14 @@ class wfm_rx_graph (stdgui.gui_flow_graph):
if 0:
- LmR_fft = fftsink.fft_sink_f (self, self.panel, title="LmR",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
+ LmR_fft = fftsink2.fft_sink_f(self.panel, title="LmR",
+ fft_size=512, sample_rate=audio_rate,
+ y_per_div=10, ref_level=-20)
self.connect (self.guts.LmR_real,LmR_fft)
vbox.Add (LmR_fft.win, 4, wx.EXPAND)
if 0:
- self.scope = scopesink.scope_sink_f(self, self.panel, sample_rate=demod_rate)
+ self.scope = scopesink2.scope_sink_f(self.panel, sample_rate=demod_rate)
self.connect (self.guts.fm_demod_a,self.scope)
vbox.Add (self.scope.win,4,wx.EXPAND)
@@ -322,5 +342,5 @@ class wfm_rx_graph (stdgui.gui_flow_graph):
if __name__ == '__main__':
- app = stdgui.stdapp (wfm_rx_graph, "USRP WFM RX")
+ app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX")
app.MainLoop ()
diff --git a/gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py b/gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py
index 64d51e2233..1d39c7691b 100755
--- a/gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py
+++ b/gnuradio-examples/python/usrp/usrp_wfm_rcv_sca.py
@@ -53,11 +53,10 @@ OFDM.
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
-from gnuradio.blksimpl.fm_emph import fm_deemph
+from gnuradio.blks2impl.fm_emph import fm_deemph
from gnuradio.eng_option import eng_option
from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui, fftsink, form
+from gnuradio.wxgui import stdgui2, fftsink2, form
from optparse import OptionParser
from usrpm import usrp_dbid
import sys
@@ -76,9 +75,9 @@ def pick_subdevice(u):
usrp_dbid.BASIC_RX))
-class wfm_rx_sca_graph (stdgui.gui_flow_graph):
+class wfm_rx_sca_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
- stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv)
+ stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
@@ -179,7 +178,7 @@ class wfm_rx_sca_graph (stdgui.gui_flow_graph):
self.audio_filter = gr.fir_filter_fff (audio_decimation, audio_coeffs)
# Create deemphasis block that is applied after SCA demodulation
- self.deemph = fm_deemph (self, audio_rate, sca_tau)
+ self.deemph = fm_deemph (audio_rate, sca_tau)
self.volume_control = gr.multiply_const_ff(self.vol)
@@ -228,27 +227,27 @@ class wfm_rx_sca_graph (stdgui.gui_flow_graph):
return self.set_sca_freq(kv['sca_freq'])
if 1:
- self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP",
+ self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
fft_size=512, sample_rate=usrp_rate)
self.connect (self.u, self.src_fft)
vbox.Add (self.src_fft.win, 4, wx.EXPAND)
if 1:
- post_demod_fft = fftsink.fft_sink_f (self, self.panel, title="Post FM Demod",
- fft_size=2048, sample_rate=demod_rate,
- y_per_div=10, ref_level=0)
+ post_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod",
+ fft_size=2048, sample_rate=demod_rate,
+ y_per_div=10, ref_level=0)
self.connect (self.fm_demod, post_demod_fft)
vbox.Add (post_demod_fft.win, 4, wx.EXPAND)
if 0:
- post_demod_sca_fft = fftsink.fft_sink_f (self, self.panel, title="Post SCA Demod",
+ post_demod_sca_fft = fftsink2.fft_sink_f(self.panel, title="Post SCA Demod",
fft_size=1024, sample_rate=sca_demod_rate,
y_per_div=10, ref_level=0)
self.connect (self.fm_demod_sca, post_demod_sca_fft)
vbox.Add (post_demod_sca_fft.win, 4, wx.EXPAND)
if 0:
- post_deemph_fft = fftsink.fft_sink_f (self, self.panel, title="Post SCA Deemph",
+ post_deemph_fft = fftsink2.fft_sink_f (self.panel, title="Post SCA Deemph",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=-20)
self.connect (self.deemph, post_deemph_fft)
@@ -395,5 +394,5 @@ class wfm_rx_sca_graph (stdgui.gui_flow_graph):
if __name__ == '__main__':
- app = stdgui.stdapp (wfm_rx_sca_graph, "USRP WFM SCA RX")
+ app = stdgui2.stdapp (wfm_rx_sca_block, "USRP WFM SCA RX")
app.MainLoop ()
diff --git a/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py b/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py
index 39ad688e1e..983e3ec98d 100755
--- a/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py
+++ b/gnuradio-examples/python/usrp/usrp_wxapt_rcv.py
@@ -1,12 +1,32 @@
#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 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.
+#
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui, fftsink, form
+from gnuradio.wxgui import stdgui2, fftsink2, form
from optparse import OptionParser
from usrpm import usrp_dbid
import sys
@@ -26,9 +46,9 @@ def pick_subdevice(u):
usrp_dbid.BASIC_RX))
-class wxapt_rx_graph (stdgui.gui_flow_graph):
+class wxapt_rx_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
- stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv)
+ stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
@@ -84,7 +104,7 @@ class wxapt_rx_graph (stdgui.gui_flow_graph):
#print len(chan_filt_coeffs)
chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
- self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation)
+ self.guts = blks2.wfm_rcv (demod_rate, audio_decimation)
self.volume_control = gr.multiply_const_ff(self.vol)
@@ -127,20 +147,20 @@ class wxapt_rx_graph (stdgui.gui_flow_graph):
if 1:
- self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP",
+ self.src_fft = fftsink2.fft_sink_c (self.panel, title="Data from USRP",
fft_size=512, sample_rate=usrp_rate)
self.connect (self.u, self.src_fft)
vbox.Add (self.src_fft.win, 4, wx.EXPAND)
if 1:
- post_deemph_fft = fftsink.fft_sink_f (self, self.panel, title="Post Deemph",
+ post_deemph_fft = fftsink2.fft_sink_f (self.panel, title="Post Deemph",
fft_size=512, sample_rate=demod_rate,
y_per_div=10, ref_level=-20)
self.connect (self.guts.deemph, post_deemph_fft)
vbox.Add (post_deemph_fft.win, 4, wx.EXPAND)
if 1:
- post_filt_fft = fftsink.fft_sink_f (self, self.panel, title="Post Filter",
+ post_filt_fft = fftsink2.fft_sink_f (self.panel, title="Post Filter",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=0)
self.connect (self.guts.audio_filter, post_filt_fft)
@@ -264,5 +284,5 @@ class wxapt_rx_graph (stdgui.gui_flow_graph):
if __name__ == '__main__':
- app = stdgui.stdapp (wxapt_rx_graph, "USRP WXAPT RX")
+ app = stdgui2.stdapp (wxapt_rx_block, "USRP WXAPT RX")
app.MainLoop ()