commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] gnuradio-examples/python/apps/hf_explorer hfx2....


From: Charles B Swiger
Subject: [Commit-gnuradio] gnuradio-examples/python/apps/hf_explorer hfx2....
Date: Mon, 10 Jul 2006 21:04:07 +0000

CVSROOT:        /sources/gnuradio
Module name:    gnuradio-examples
Changes by:     Charles B Swiger <cswiger>      06/07/10 21:04:07

Modified files:
        python/apps/hf_explorer: hfx2.py hfx_help 
Removed files:
        python/apps/hf_explorer: hfx.py weaver_isb_am1_usrp4.py 

Log message:
        Update USRP interface with auto subdev, mux, DDC tune, etc. Fix AM web
        control tuning bug. Remove old crufty hfx.py radio.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnuradio-examples/python/apps/hf_explorer/hfx2.py?cvsroot=gnuradio&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gnuradio-examples/python/apps/hf_explorer/hfx_help?cvsroot=gnuradio&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnuradio-examples/python/apps/hf_explorer/hfx.py?cvsroot=gnuradio&r1=1.1&r2=0
http://cvs.savannah.gnu.org/viewcvs/gnuradio-examples/python/apps/hf_explorer/weaver_isb_am1_usrp4.py?cvsroot=gnuradio&r1=1.1&r2=0

Patches:
Index: hfx2.py
===================================================================
RCS file: /sources/gnuradio/gnuradio-examples/python/apps/hf_explorer/hfx2.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- hfx2.py     23 Mar 2006 16:58:06 -0000      1.4
+++ hfx2.py     10 Jul 2006 21:04:07 -0000      1.5
@@ -2,7 +2,7 @@
 # -*- coding: ANSI_X3.4-1968 -*-
 # generated by wxGlade 0.4 on Tue Mar 14 10:16:06 2006
 #
-# Copyright 2005 Free Software Foundation, Inc.
+# Copyright 2006 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -65,14 +65,15 @@
 # 2.3.1 adds web control, made AM Sync display optional,
 # added more comments.
 #
+# 2.4.1 updates usrp interface to support auto subdev
 
 # Web server control disabled by default. Do not enable
 # until directory structure and scripts are in place.
-WEB_CONTROL = False
+WEB_CONTROL = True
 
 # Controls display of AM Sync Carrier - turn off for smaller
 # window if not needed
-AM_SYNC_DISPLAY = True
+AM_SYNC_DISPLAY = False
 
 import os, wx, sys, math
 import wx.lib.evtmgr as em
@@ -107,6 +108,20 @@
 ID_EXIT        = wx.NewId()            # Menu Exit
 
 
+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 MyFrame(wx.Frame):
     def __init__(self, *args, **kwds):
         # begin wxGlade: MyFrame.__init__
@@ -176,6 +191,7 @@
                            help="radio input file", metavar="FILE")
         parser.add_option ("-d", "--decim", type="int", default=250,
                            help="USRP decimation")
+        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)")
         (options, args) = parser.parse_args ()
 
         self.usrp_center = options.ddc_freq
@@ -226,14 +242,13 @@
         else: self.PLAY_FROM_USRP = False
 
         if self.PLAY_FROM_USRP:
-          # these can be updated for flexible m'board support
-           self.src = usrp.source_c(0,options.decim)
-           mux = gru.hexint(0xf0f0f0f0)
-           self.src.set_nchannels(1)
-           self.src.set_pga(0,0)
-           self.src.set_mux(mux)
-           self.src.set_rx_freq(0,-self.usrp_center)
-           self.tune_offset = -self.usrp_center - self.src.rx_freq(0)
+           self.src = usrp.source_c(decim_rate=options.decim)
+          if options.rx_subdev_spec is None:
+              options.rx_subdev_spec = pick_subdevice(self.src)
+           self.src.set_mux(usrp.determine_rx_mux_value(self.src, 
options.rx_subdev_spec))
+          self.subdev = usrp.selected_subdev(self.src, options.rx_subdev_spec)
+           self.src.tune(0, self.subdev, self.usrp_center)
+           self.tune_offset = 0 # -self.usrp_center - self.src.rx_freq(0)
 
         else:
            self.src = gr.file_source (gr.sizeof_gr_complex,options.input_file)
@@ -263,7 +278,7 @@
 
         self.audio_filter = gr.fir_filter_ccc ( 1, audio_coeffs)
 
-       # Main +-16Khz spectrum display
+       # 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))
 
        # AM Sync carrier 
@@ -614,7 +629,7 @@
 
     def set_pga(self,event):
        if self.PLAY_FROM_USRP:
-          self.src.set_pga(0,self.slider_5.GetValue())
+          self.subdev.set_gain(self.slider_5.GetValue())
 
     def slide_tune(self, event):
         self.frequency = (self.f_slider_scale * self.slider_3.GetValue()) + 
self.f_slider_offset
@@ -720,7 +735,7 @@
                if self.button_12.GetValue():
                  self.auto_antenna_tune()
                if self.AM_mode:
-                 self.xlate.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) - 7.5e3 )
+                 self.xlate.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset - 7.5e3 ))
                else:
                  self.xlate.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ))
 

Index: hfx_help
===================================================================
RCS file: /sources/gnuradio/gnuradio-examples/python/apps/hf_explorer/hfx_help,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- hfx_help    29 Dec 2005 22:17:51 -0000      1.2
+++ hfx_help    10 Jul 2006 21:04:07 -0000      1.3
@@ -115,9 +115,7 @@
  Mode:
 
        Demodulation modes are chosen by clicking on the buttons for
-       Lower Sideband, Upper Sideband, AM or two versions of Independent
-       Sideband. One ISB puts LSB in one ear and USB in the other, and
-       the other ISB is the opposite.
+       Lower Sideband, Upper Sideband, or AM.
 
 
  PGA:
@@ -134,17 +132,6 @@
        or skip through annoying AM commercials.
 
 
- Status Bar:
-
-       Frequency, volume and filter are displayed at the bottom of the
-       HFX window. Also, for rapid frequency spotting, when moving the mouse
-       over the display a 'tooltip' opens up at the bottom with an
-       accurate frequency readout. When a desired frequency is shown
-       in the 'tooltip', clicking on the display sets the demod frequency
-       to that frequency. After clicking you have to move the mouse
-       out of the display and back to get the tooltip back.
-
-
  Antennas and Preamps:
 
        The USRP Basic RX board is not sensitive enough for anything but
@@ -189,5 +176,5 @@
 
  --Good luck and happy LW/MW/SW Exploring.
        Chuck
-        address@hidden
+        address@hidden
 

Index: hfx.py
===================================================================
RCS file: hfx.py
diff -N hfx.py
--- hfx.py      20 Dec 2005 22:12:01 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,998 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: UTF-8 -*-
-# generated by wxGlade 0.3.5.1 on Tue Jun 14 11:32:06 2005
-#
-# Copyright 2005 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 2, 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., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-#
-
-WEB_CONTROL = False
-
-import os, wx, sys
-import wx.lib.evtmgr as em
-from gnuradio.wxgui import powermate
-from gnuradio import gr
-from gnuradio import audio
-from gnuradio import eng_notation
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-from gnuradio.wxgui import fftsink
-from weaver_isb_am1_usrp4 import * # main radio guts
-
-ID_BUTTON_1 = wx.NewId()
-ID_BUTTON_2 = wx.NewId()
-ID_BUTTON_3 = wx.NewId()
-ID_BUTTON_4 = wx.NewId()
-ID_BUTTON_5 = wx.NewId()
-ID_BUTTON_6 = wx.NewId()
-ID_BUTTON_7 = wx.NewId()
-ID_BUTTON_8 = wx.NewId()
-ID_BUTTON_9 = wx.NewId()
-ID_BUTTON_10 = wx.NewId()
-ID_BUTTON_11 = wx.NewId()
-ID_BUTTON_12 = wx.NewId()
-ID_BUTTON_13 = wx.NewId()
-ID_BUTTON_14 = wx.NewId()
-ID_BUTTON_15 = wx.NewId()
-ID_BUTTON_16 = wx.NewId()
-ID_BUTTON_17 = wx.NewId()
-ID_BUTTON_18 = wx.NewId()
-ID_BUTTON_19 = wx.NewId()
-ID_BUTTON_20 = wx.NewId()
-ID_BAND = wx.NewId()
-ID_SLIDER_1 = wx.NewId()
-ID_SLIDER_2 = wx.NewId()
-ID_SLIDER_3 = wx.NewId()
-ID_SLIDER_4 = wx.NewId()
-ID_ABOUT = wx.NewId()
-ID_HELP = wx.NewId()
-ID_EXIT = wx.NewId()
-ID_SPINFREQ = wx.NewId()
-
-
-class MyDialog(wx.Dialog):
-    def __init__(self, *args, **kwds):
-        # begin wxGlade: MyDialog.__init__
-        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
-        wx.Dialog.__init__(self, *args, **kwds)
-        self.text_ctrl_10 = wx.TextCtrl(self, -1, "", 
style=wx.TE_MULTILINE|wx.TE_READONLY)
-       fh = open("hfx_help","r")
-       helptext = fh.read()
-       fh.close()
-       self.text_ctrl_10.SetValue(helptext)
-        self.__set_properties()
-        self.__do_layout()
-        # end wxGlade
-
-    def __set_properties(self):
-        # begin wxGlade: MyDialog.__set_properties
-        self.SetTitle("HFX Help")
-        self.SetSize((500, 610))
-        self.text_ctrl_10.SetSize((500, 600))
-        # end wxGlade
-
-    def __do_layout(self):
-        # begin wxGlade: MyDialog.__do_layout
-        sizer_7 = wx.BoxSizer(wx.VERTICAL)
-        sizer_7.Add(self.text_ctrl_10, 0, wx.FIXED_MINSIZE, 0)
-        self.SetAutoLayout(True)
-        self.SetSizer(sizer_7)
-        self.Layout()
-        # end wxGlade
-
-# end of class MyDialog
-
-
-class MyFrame(wx.Frame):
-    def __init__(self, *args, **kwds):
-
-        # this will get changed below when edited in wxglade
-        self.vol_max = 500 # in self.slider_2, change 100 => self.vol_max
-
-        # begin wxGlade: MyFrame.__init__
-        kwds["style"] = wx.DEFAULT_FRAME_STYLE
-        wx.Frame.__init__(self, *args, **kwds)
-       
-        # cmd line opts - unfortunately this must come after wx.Frame.__init__
-        # so will get clobbered when wxglade generates code
-        parser = OptionParser (option_class=eng_option)
-        parser.add_option ("-c", "--ddc-freq", type="eng_float", default=3.9e6,
-                           help="set Rx DDC frequency to FREQ", metavar="FREQ")
-        parser.add_option ("-a", "--audio_file", default="",
-                           help="audio output file", metavar="FILE")
-        parser.add_option ("-r", "--radio_file", default="",
-                           help="radio output file", metavar="FILE")
-        parser.add_option ("-i", "--input_file", default="",
-                           help="radio input file", metavar="FILE")
-        parser.add_option ("-d", "--decim", type="int", default=250,
-                           help="USRP decimation")
-        (options, args) = parser.parse_args ()
-        if options.input_file == "": self.PLAY_FROM_USRP = True
-        else: self.PLAY_FROM_USRP = False
-        self.usrp_center = options.ddc_freq
-        usb_rate = 64e6 / options.decim
-        self.slider_range = usb_rate * 0.9375
-        self.f_lo = self.usrp_center - (self.slider_range/2)
-        self.f_hi = self.usrp_center + (self.slider_range/2)
-
- 
-        # Menu Bar
-        self.frame_1_menubar = wx.MenuBar()
-        self.SetMenuBar(self.frame_1_menubar)
-        wxglade_tmp_menu = wx.Menu()
-        wxglade_tmp_menu.Append(ID_ABOUT, "About", "About", wx.ITEM_NORMAL)
-        wxglade_tmp_menu.Append(ID_EXIT, "Exit", "Exit", wx.ITEM_NORMAL)
-        self.frame_1_menubar.Append(wxglade_tmp_menu, "File")
-        wxglade_tmp_menu = wx.Menu()
-        wxglade_tmp_menu.Append(ID_HELP, "Help", "Help", wx.ITEM_NORMAL)
-        self.frame_1_menubar.Append(wxglade_tmp_menu, "Help")
-        # Menu Bar end
-        self.frame_1_statusbar = self.CreateStatusBar(4, 0)
-        self.panel_1 = wx.Panel(self, -1)
-        self.text_ctrl_2 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.text_ctrl_3 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.text_ctrl_4 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.text_ctrl_5 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.text_ctrl_6 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.text_ctrl_7 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.text_ctrl_8 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.text_ctrl_9 = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY)
-        self.label_2 = wx.StaticText(self, -1, "Center Freq")
-        self.button_12 = wx.ToggleButton(self, ID_BUTTON_12, "Set")
-        self.button_13 = wx.Button(self, ID_BUTTON_13, "B1")
-        self.button_14 = wx.Button(self, ID_BUTTON_14, "B2")
-        self.button_15 = wx.Button(self, ID_BUTTON_15, "B3")
-        self.button_16 = wx.Button(self, ID_BUTTON_16, "B4")
-        self.button_17 = wx.Button(self, ID_BUTTON_17, "B5")
-        self.button_18 = wx.Button(self, ID_BUTTON_18, "B6")
-        self.button_19 = wx.Button(self, ID_BUTTON_19, "B7")
-        self.button_20 = wx.Button(self, ID_BUTTON_20, "B8")
-        self.text_ctrl_1 = wx.TextCtrl(self, ID_BAND, "", 
style=wx.TE_PROCESS_ENTER)
-        self.button_1 = wx.ToggleButton(self, ID_BUTTON_1, "Frequency")
-        self.slider_1 = wx.Slider(self, ID_SLIDER_1, 0, 0, 6000)
-        self.spin_ctrl_1 = wx.SpinCtrl(self, ID_SPINFREQ, "", min=3600000, 
max=4000000)
-        self.button_2 = wx.ToggleButton(self, ID_BUTTON_2, "Volume")
-        self.slider_2 = wx.Slider(self, ID_SLIDER_2, 0, 0, self.vol_max)
-        self.panel_2 = wx.Panel(self, -1)
-        self.button_7 = wx.ToggleButton(self, ID_BUTTON_7, "LSB")
-        self.button_8 = wx.ToggleButton(self, ID_BUTTON_8, "USB")
-        self.button_9 = wx.ToggleButton(self, ID_BUTTON_9, "AM")
-        self.button_3 = wx.ToggleButton(self, ID_BUTTON_3, "Filter")
-        self.slider_3 = wx.Slider(self, ID_SLIDER_3, 0, 0, 30)
-        self.panel_3 = wx.Panel(self, -1)
-        self.panel_4 = wx.Panel(self, -1)
-        self.button_10 = wx.ToggleButton(self, ID_BUTTON_10, "ISB1")
-        self.button_11 = wx.ToggleButton(self, ID_BUTTON_11, "ISB2")
-        self.button_4 = wx.ToggleButton(self, ID_BUTTON_4, "Time")
-        self.button_5 = wx.Button(self, ID_BUTTON_5, "Rewind")
-        self.button_6 = wx.Button(self, ID_BUTTON_6, "Fast Fwd")
-        self.panel_5 = wx.Panel(self, -1)
-        self.label_1 = wx.StaticText(self, -1, "Programmable   \nGain 
Amplifier   ")
-        self.slider_4 = wx.Slider(self, ID_SLIDER_4, 0, 0, 20, 
style=wx.SL_HORIZONTAL|wx.SL_LABELS)
-        self.panel_7 = wx.Panel(self, -1)
-
-        self.__set_properties()
-        self.__do_layout()
-        # end wxGlade
-
-       wx.ToolTip.Enable(True)
-       wx.ToolTip.SetDelay(0)
-
-        self.active_button = 1
-        self.button_1.SetValue(True)
-
-        # radio variables, initial conditions
-        self.frequency = self.usrp_center
-        # these map the frequency slider (0-6000) to the actual range
-        self.f_slider_offset = self.f_lo
-        self.f_slider_scale = 10000/options.decim
-       self.spin_ctrl_1.SetRange(self.f_lo,self.f_hi)
-       self.text_ctrl_1.SetValue(str(int(self.usrp_center)))
-       self.slider_4.SetValue(0) # self.src.set_pga(0) in radio module
-
-        
self.slider_1.SetValue((self.frequency-self.f_slider_offset)/self.f_slider_scale)
-        self.spin_ctrl_1.SetValue(int(self.frequency))
-        msg = "Frequency: %s" % (eng_notation.num_to_str(self.frequency))
-        self.frame_1_statusbar.SetStatusText(msg,1)
-
-        self.volume = 0
-        self.slider_2.SetValue(self.volume)
-        msg = "Volume: %s" % (eng_notation.num_to_str(self.volume))
-        self.frame_1_statusbar.SetStatusText(msg,2)
-
-        self.filter = 24
-        self.slider_3.SetValue(24)
-        # calculate filters
-        af_sample_rate = 32e3
-        self.audio_lpf_x = []
-        self.fkey = []
-        for co in range(600,3601,100):
-          self.fkey += [co]
-          
fc=gr.firdes.low_pass(1.0,af_sample_rate,co,300,gr.firdes.WIN_HAMMING)
-          self.audio_lpf_x += [fc]
-        # audio_lpf_x[0] is 600, [1] is 900, [2] is 1200, etc
-
-       rf_sample_rate = 64000000 / options.decim
-       self.xlate_filter = 30
-       self.xlate_filter_x = []
-       self.xlate_fkey = []
-       for co in range(2000, 5001, 100):
-         self.xlate_fkey += [co]
-         fc = 
gr.firdes.low_pass(1.0,rf_sample_rate,co,2000,gr.firdes.WIN_HAMMING)
-         self.xlate_filter_x += [fc]
-       # xlate_filter_x[0] is 2000, [1] is 2100, [29] is 5000
-
-       # start with ssb filter
-        msg = "Filter: %s" % (eng_notation.num_to_str(self.fkey[self.filter]))
-        self.frame_1_statusbar.SetStatusText(msg,3)
-        # 0=usb, 1=lsb, 2=am, 3=isb1, 4=isb2
-        self.mode = 1
-        self.button_7.SetValue(True)
-
-        # xlate_L taps for ssb or am modes
-        self.xlate_taps_ssb = gr.firdes.low_pass ( \
-           1.0, usb_rate, 20e3, 10e3, gr.firdes.WIN_HAMMING )
-        self.xlate_taps_am = gr.firdes.low_pass ( \
-           1.0, usb_rate, 6e3, 2e3, gr.firdes.WIN_HAMMING )
-        # xlate_L offset for ssb or am modes
-
-       #setup for bandswitching
-       self.b1 = 3900000
-       self.b2 = 7200000
-       self.b3 = 14200000
-       self.b4 = 6100000
-       self.b5 = 9750000
-       self.b6 = 11900000
-       self.b7 = 800000
-       self.b8 = 1400000
-       self.text_ctrl_2.SetValue(eng_notation.num_to_str(self.b1))
-       self.text_ctrl_3.SetValue(eng_notation.num_to_str(self.b2))
-       self.text_ctrl_4.SetValue(eng_notation.num_to_str(self.b3))
-       self.text_ctrl_5.SetValue(eng_notation.num_to_str(self.b4))
-       self.text_ctrl_6.SetValue(eng_notation.num_to_str(self.b5))
-       self.text_ctrl_7.SetValue(eng_notation.num_to_str(self.b6))
-       self.text_ctrl_8.SetValue(eng_notation.num_to_str(self.b7))
-       self.text_ctrl_9.SetValue(eng_notation.num_to_str(self.b8))
-
-        wx.EVT_SLIDER(self,ID_SLIDER_1,self.slide_event)
-        wx.EVT_SLIDER(self,ID_SLIDER_2,self.slide_event)
-        wx.EVT_SLIDER(self,ID_SLIDER_3,self.slide_event)
-       wx.EVT_SLIDER(self,ID_SLIDER_4,self.set_pga)
-        wx.EVT_SPINCTRL(self, ID_SPINFREQ, self.spin_event)
-
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_1, self.on_button)
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_2, self.on_button)
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_3, self.on_button)
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_4, self.on_button)
-
-        wx.EVT_BUTTON(self, ID_BUTTON_5, self.on_tbutton)
-        wx.EVT_BUTTON(self, ID_BUTTON_6, self.on_tbutton)
-
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_7, self.on_mbutton)
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_8, self.on_mbutton)
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_9, self.on_mbutton)
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_10, self.on_mbutton)
-        wx.EVT_TOGGLEBUTTON(self, ID_BUTTON_11, self.on_mbutton)
-
-       #bandswitch buttons
-       wx.EVT_BUTTON(self, ID_BUTTON_13, self.bandswitch)
-       wx.EVT_BUTTON(self, ID_BUTTON_14, self.bandswitch)
-       wx.EVT_BUTTON(self, ID_BUTTON_15, self.bandswitch)
-       wx.EVT_BUTTON(self, ID_BUTTON_16, self.bandswitch)
-       wx.EVT_BUTTON(self, ID_BUTTON_17, self.bandswitch)
-       wx.EVT_BUTTON(self, ID_BUTTON_18, self.bandswitch)
-       wx.EVT_BUTTON(self, ID_BUTTON_19, self.bandswitch)
-       wx.EVT_BUTTON(self, ID_BUTTON_20, self.bandswitch)
-       wx.EVT_TEXT_ENTER(self, ID_BAND, self.band)
-
-        wx.EVT_MENU(self, ID_EXIT,  self.TimeToQuit)
-        wx.EVT_MENU(self, ID_ABOUT, self.OnAbout)
-       wx.EVT_MENU(self, ID_HELP, self.OnHelp)
-
-       POWERMATE = True
-        try:
-            self.pm = powermate.powermate(self)
-        except:
-            sys.stderr.write("Unable to find PowerMate or Contour Shuttle\n")
-           POWERMATE = False
-
-       if POWERMATE:
-          self.brightness = 0
-          powermate.EVT_POWERMATE_ROTATE(self, self.on_rotate)
-          powermate.EVT_POWERMATE_BUTTON(self, self.on_pmButton)
-
-        scale = self.volume / 10e3
-       # call to Radio guts
-        (self.fg, self.tune_offset, self.xlate_L, self.xlate_U, self.scale_L, \
-       self.scale_U, self.src, self.audio_lpf_L, self.audio_lpf_U, \
-       self.sel_lsb_0, self.sel_lsb_1, self.sel_usb_0, self.sel_usb_1, \
-       self.sel_am, self.scale_am) = build_graph \
-       (self.frequency, scale, options.decim, self.usrp_center, \
-       options.audio_file, options.radio_file, options.input_file)
-        if self.fg.is_running():
-          print "fg is running"
-
-        # add an fft display to panel_7, nice size, avg on and weaver IF offset
-        self.fft = fftsink.fft_sink_c (self.fg, self.panel_7, fft_size=512, 
sample_rate=af_sample_rate, baseband_freq=-1.8e3, average=True, size=(680,240))
-        self.fg.connect (self.xlate_L, self.fft)
-
-
-        # for mouse position reporting on fft display
-        em.eventManager.Register(self.Mouse, wx.EVT_MOTION, self.fft.win)
-       # and left click to re-tune
-       em.eventManager.Register(self.Click, wx.EVT_LEFT_DOWN, self.fft.win)
-
-        self.fg.start()
-
-
-        # start a timer to check for web commands
-        if WEB_CONTROL:
-         self.timer = UpdateTimer(self, 1000) # every 1000 mSec, 1 Sec
-          self.timer2 = UpdateTimer2(self, 5000) # 5 seconds update web state
-
-    def __set_properties(self):
-        # begin wxGlade: MyFrame.__set_properties
-        self.SetTitle("GNU Radio HF Explorer")
-        self.frame_1_statusbar.SetStatusWidths([-1, -1, -1, -1])
-        # statusbar fields
-        frame_1_statusbar_fields = ["", "Frequency", "Volume", "Filter"]
-        for i in range(len(frame_1_statusbar_fields)):
-            self.frame_1_statusbar.SetStatusText(frame_1_statusbar_fields[i], 
i)
-        self.text_ctrl_2.SetSize((70, 25))
-        self.text_ctrl_3.SetSize((70, 25))
-        self.text_ctrl_4.SetSize((70, 25))
-        self.text_ctrl_5.SetSize((70, 25))
-        self.text_ctrl_6.SetSize((70, 25))
-        self.text_ctrl_7.SetSize((70, 25))
-        self.text_ctrl_8.SetSize((70, 25))
-        self.text_ctrl_9.SetSize((70, 25))
-        self.button_12.SetSize((45, 30))
-        self.button_13.SetSize((45, 30))
-        self.button_14.SetSize((45, 30))
-        self.button_15.SetSize((45, 30))
-        self.button_16.SetSize((45, 30))
-        self.button_17.SetSize((45, 30))
-        self.button_18.SetSize((45, 30))
-        self.button_19.SetSize((45, 30))
-        self.button_20.SetSize((45, 30))
-        self.slider_1.SetSize((500, 25))
-        self.slider_2.SetSize((200, 25))
-        self.slider_3.SetSize((200, 25))
-        self.slider_4.SetSize((200, 40))
-        self.panel_7.SetSize((680, 240))
-        # end wxGlade
-
-    def __do_layout(self):
-        # begin wxGlade: MyFrame.__do_layout
-        sizer_1 = wx.BoxSizer(wx.VERTICAL)
-        grid_sizer_1 = wx.FlexGridSizer(2, 1, 0, 0)
-        sizer_2 = wx.BoxSizer(wx.VERTICAL)
-        sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
-        sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
-        grid_sizer_2 = wx.FlexGridSizer(2, 10, 0, 0)
-        grid_sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0)
-        grid_sizer_2.Add(self.text_ctrl_2, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_3, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_4, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_5, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_6, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_7, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_8, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_9, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.label_2, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_12, 0, wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_13, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_14, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_15, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_16, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_17, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_18, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_19, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.button_20, 0, 
wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE, 0)
-        grid_sizer_2.Add(self.text_ctrl_1, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_2.Add(grid_sizer_2, 1, wx.EXPAND, 0)
-        sizer_3.Add(self.button_1, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_3.Add(self.slider_1, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_3.Add(self.spin_ctrl_1, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_2.Add(sizer_3, 1, wx.EXPAND, 0)
-        sizer_4.Add(self.button_2, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_4.Add(self.slider_2, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_4.Add(self.panel_2, 1, wx.EXPAND, 0)
-        sizer_4.Add(self.button_7, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_4.Add(self.button_8, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_4.Add(self.button_9, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_2.Add(sizer_4, 1, wx.EXPAND, 0)
-        sizer_5.Add(self.button_3, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_5.Add(self.slider_3, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_5.Add(self.panel_3, 1, wx.EXPAND, 0)
-        sizer_5.Add(self.panel_4, 1, wx.EXPAND, 0)
-        sizer_5.Add(self.button_10, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_5.Add(self.button_11, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_2.Add(sizer_5, 1, wx.EXPAND, 0)
-        sizer_6.Add(self.button_4, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_6.Add(self.button_5, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_6.Add(self.button_6, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_6.Add(self.panel_5, 1, wx.EXPAND, 0)
-        sizer_6.Add(self.label_1, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_6.Add(self.slider_4, 0, 
wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
-        sizer_2.Add(sizer_6, 1, wx.EXPAND, 0)
-        grid_sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
-        grid_sizer_1.Add(self.panel_7, 1, wx.EXPAND, 0)
-        sizer_1.Add(grid_sizer_1, 1, wx.EXPAND, 0)
-        self.SetAutoLayout(True)
-        self.SetSizer(sizer_1)
-        sizer_1.Fit(self)
-        sizer_1.SetSizeHints(self)
-        self.Layout()
-        # end wxGlade
-
-    def slide_event(self,evt):
-        value = evt.GetInt()
-        id = evt.GetId()
-        if id == ID_SLIDER_1:
-           self.frequency = (self.f_slider_scale * self.slider_1.GetValue()) + 
self.f_slider_offset
-           msg = "Frequency: %s" % (eng_notation.num_to_str(self.frequency))
-           self.frame_1_statusbar.SetStatusText (msg,1)
-           self.spin_ctrl_1.SetValue(self.frequency)
-          if self.mode == 2:
-            self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency 
- self.tune_offset ) + 960 )
-          else:
-             self.xlate_L.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) + 1.8e3 )
-             self.xlate_U.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) - 1.8e3 )
-        elif id == ID_SLIDER_2:
-           self.volume = self.slider_2.GetValue()
-           msg = "Volume: %s" % (eng_notation.num_to_str(self.volume))
-           self.frame_1_statusbar.SetStatusText (msg,2)
-           self.scale_L.set_k(self.volume/10e3)
-           self.scale_U.set_k(self.volume/10e3)
-           self.scale_am.set_k(self.volume/10e4)
-        elif id == ID_SLIDER_3:
-           filter = self.slider_3.GetValue()
-          if self.mode == 2:
-            self.xlate_filter = filter
-            msg = "Filter: %s" % 
(eng_notation.num_to_str(self.xlate_fkey[self.xlate_filter]))
-            self.frame_1_statusbar.SetStatusText (msg,3)
-            self.xlate_L.set_taps(self.xlate_filter_x[self.xlate_filter])
-          else:
-            self.filter = filter
-             msg = "Filter: %s" % 
(eng_notation.num_to_str(self.fkey[self.filter]))
-             self.frame_1_statusbar.SetStatusText (msg,3)
-             self.audio_lpf_L.set_taps(self.audio_lpf_x[self.filter])
-             self.audio_lpf_U.set_taps(self.audio_lpf_x[self.filter])
-
-    def set_pga(self, evt):
-       if self.PLAY_FROM_USRP:
-         self.src.set_pga(0,self.slider_4.GetValue())
-
-    def bandswitch(self, evt):
-       button = evt.GetId()
-       if self.button_12.GetValue() == True:
-         if button == ID_BUTTON_13:
-           self.b1 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_2.SetValue(eng_notation.num_to_str(self.b1))
-         elif button == ID_BUTTON_14:
-           self.b2 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_3.SetValue(eng_notation.num_to_str(self.b2))
-         elif button == ID_BUTTON_15:
-           self.b3 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_4.SetValue(eng_notation.num_to_str(self.b3))
-         elif button == ID_BUTTON_16:
-           self.b4 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_5.SetValue(eng_notation.num_to_str(self.b4))
-         elif button == ID_BUTTON_17:
-           self.b5 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_6.SetValue(eng_notation.num_to_str(self.b5))
-         elif button == ID_BUTTON_18:
-           self.b6 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_7.SetValue(eng_notation.num_to_str(self.b6))
-         elif button == ID_BUTTON_19:
-           self.b7 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_8.SetValue(eng_notation.num_to_str(self.b7))
-         elif button == ID_BUTTON_20:
-           self.b8 = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-           self.text_ctrl_9.SetValue(eng_notation.num_to_str(self.b8))
-         self.button_12.SetValue(False)
-       else:
-         if   button == ID_BUTTON_13: self.usrp_center = self.b1
-         elif button == ID_BUTTON_14: self.usrp_center = self.b2
-         elif button == ID_BUTTON_15: self.usrp_center = self.b3
-         elif button == ID_BUTTON_16: self.usrp_center = self.b4
-         elif button == ID_BUTTON_17: self.usrp_center = self.b5
-         elif button == ID_BUTTON_18: self.usrp_center = self.b6
-         elif button == ID_BUTTON_19: self.usrp_center = self.b7
-         elif button == ID_BUTTON_20: self.usrp_center = self.b8
-         self.f_lo = self.usrp_center - (self.slider_range/2.)
-          self.f_hi = self.usrp_center + (self.slider_range/2.)
-          self.frequency = self.usrp_center
-         self.slider_1.SetValue(3000)
-          self.f_slider_offset = self.f_lo
-         self.spin_ctrl_1.SetRange(self.f_lo,self.f_hi)
-         self.spin_ctrl_1.SetValue(self.usrp_center)
-         self.text_ctrl_1.SetValue(str(int(self.usrp_center)))
-         self.src.set_rx_freq(0,-self.usrp_center)
-         self.tune_offset = -self.usrp_center - self.src.rx_freq(0)
-          msg = "Frequency: %s" % (eng_notation.num_to_str(self.frequency))
-          self.frame_1_statusbar.SetStatusText(msg,1)
-         if self.mode == 2:
-           self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency 
- self.tune_offset ) + 960 )
-         else:
-            self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency 
- self.tune_offset ) + 1.8e3 )
-            self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency 
- self.tune_offset ) - 1.8e3 )
-
-    def band(self,evt):
-       self.usrp_center = eng_notation.str_to_num(self.text_ctrl_1.GetValue())
-        self.f_lo = self.usrp_center - (self.slider_range/2.)
-        self.f_hi = self.usrp_center + (self.slider_range/2.)
-        self.frequency = self.usrp_center
-        self.slider_1.SetValue(3000)
-        self.f_slider_offset = self.f_lo
-        self.spin_ctrl_1.SetRange(self.f_lo,self.f_hi)
-        self.spin_ctrl_1.SetValue(self.usrp_center)
-        self.src.set_rx_freq(0,-self.usrp_center)
-        self.tune_offset = -self.usrp_center - self.src.rx_freq(0)
-        msg = "Frequency: %s" % (eng_notation.num_to_str(self.frequency))
-        self.frame_1_statusbar.SetStatusText(msg,1)
-        if self.mode == 2:
-            self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency 
- self.tune_offset ) + 960 )
-        else:
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 1.8e3 )
-          self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) - 1.8e3 )
-
-
-    def on_button(self, evt):
-        id = evt.GetId()
-        if id == ID_BUTTON_1:
-            self.active_button = 1
-            self.button_2.SetValue(False)
-            self.button_3.SetValue(False)
-            self.button_4.SetValue(False)
-        elif id == ID_BUTTON_2:
-            self.active_button = 2
-            self.button_1.SetValue(False)
-            self.button_3.SetValue(False)
-            self.button_4.SetValue(False)
-        elif id == ID_BUTTON_3:
-            self.active_button = 3
-            self.button_1.SetValue(False)
-            self.button_2.SetValue(False)
-            self.button_4.SetValue(False)
-        elif id == ID_BUTTON_4:
-            self.active_button = 4
-            self.button_1.SetValue(False)
-            self.button_2.SetValue(False)
-            self.button_3.SetValue(False)
-
-    def on_tbutton(self, evt):
-       if self.PLAY_FROM_USRP == False:
-          id = evt.GetId()
-          if id == ID_BUTTON_5:
-            self.src.seek(-10000000,gr.SEEK_CUR)
-          elif id == ID_BUTTON_6:
-            self.src.seek(1000000,gr.SEEK_CUR)
-
-    def on_mbutton(self, evt):
-        id = evt.GetId()
-        if id == ID_BUTTON_7:  # LSB in both ears
-          self.mode = 1
-          self.button_8.SetValue(False)
-          self.button_9.SetValue(False)
-          self.button_10.SetValue(False)
-          self.button_11.SetValue(False)
-          self.sel_lsb_0.set_k(1)
-          self.sel_lsb_1.set_k(1)
-          self.sel_usb_0.set_k(0)
-          self.sel_usb_1.set_k(0)
-          self.sel_am.set_k(0)
-          self.xlate_L.set_taps(self.xlate_taps_ssb)
-         self.slider_3.SetValue(self.filter)
-          msg = "Filter: %s" % 
(eng_notation.num_to_str(self.fkey[self.filter]))
-          self.frame_1_statusbar.SetStatusText (msg,3)
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 1.8e3 )
-          self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) - 1.8e3 )
-         self.fft.set_baseband_freq(-1.8e3)
-
-
-        elif id == ID_BUTTON_8:  # USB in both ears
-          self.mode = 0
-          self.button_7.SetValue(False)
-          self.button_9.SetValue(False)
-          self.button_10.SetValue(False)
-          self.button_11.SetValue(False)
-          self.sel_lsb_0.set_k(0)
-          self.sel_lsb_1.set_k(0)
-          self.sel_usb_0.set_k(1)
-          self.sel_usb_1.set_k(1)
-          self.sel_am.set_k(0)
-          self.xlate_L.set_taps(self.xlate_taps_ssb)
-         self.slider_3.SetValue(self.filter)
-          msg = "Filter: %s" % 
(eng_notation.num_to_str(self.fkey[self.filter]))
-          self.frame_1_statusbar.SetStatusText (msg,3)
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 1.8e3 )
-          self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) - 1.8e3 )
-         self.fft.set_baseband_freq(-1.8e3)
-
-
-        elif id == ID_BUTTON_9: # AM
-          self.mode = 2
-          self.button_7.SetValue(False)
-          self.button_8.SetValue(False)
-          self.button_9.SetValue(True)
-          self.button_10.SetValue(False)
-          self.button_11.SetValue(False)
-          self.sel_lsb_0.set_k(0)
-          self.sel_lsb_1.set_k(0)
-          self.sel_usb_0.set_k(0)
-          self.sel_usb_1.set_k(0)
-          self.sel_am.set_k(1)
-          self.xlate_L.set_taps(self.xlate_filter_x[self.xlate_filter])
-         self.slider_3.SetValue(self.xlate_filter)
-          msg = "Filter: %s" % 
(eng_notation.num_to_str(self.xlate_fkey[self.xlate_filter]))
-          self.frame_1_statusbar.SetStatusText (msg,3)
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 960 )
-         self.fft.set_baseband_freq(0)
-
-
-        elif id == ID_BUTTON_10: # LSB in one ear and USB in the other
-          self.mode = 3
-          self.button_7.SetValue(False)
-          self.button_8.SetValue(False)
-          self.button_9.SetValue(False)
-          self.button_11.SetValue(False)
-          self.sel_lsb_0.set_k(1)
-          self.sel_lsb_1.set_k(0)
-          self.sel_usb_0.set_k(0)
-          self.sel_usb_1.set_k(1)
-          self.sel_am.set_k(0)
-          self.xlate_L.set_taps(self.xlate_taps_ssb)
-         self.slider_3.SetValue(self.filter)
-          msg = "Filter: %s" % 
(eng_notation.num_to_str(self.fkey[self.filter]))
-          self.frame_1_statusbar.SetStatusText (msg,3)
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 1.8e3 )
-          self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) - 1.8e3 )
-         self.fft.set_baseband_freq(-1.8e3)
-
-
-        elif id == ID_BUTTON_11: # USB in one ear and LSB in the other
-          self.mode = 4
-          self.button_7.SetValue(False)
-          self.button_8.SetValue(False)
-          self.button_9.SetValue(False)
-          self.button_10.SetValue(False)
-          self.sel_lsb_0.set_k(0)
-          self.sel_lsb_1.set_k(1)
-          self.sel_usb_0.set_k(1)
-          self.sel_usb_1.set_k(0)
-          self.sel_am.set_k(0)
-          self.xlate_L.set_taps(self.xlate_taps_ssb)
-         self.slider_3.SetValue(self.filter)
-          msg = "Filter: %s" % 
(eng_notation.num_to_str(self.fkey[self.filter]))
-          self.frame_1_statusbar.SetStatusText (msg,3)
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 1.8e3 )
-          self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) - 1.8e3 )
-         self.fft.set_baseband_freq(-1.8e3)
-
-
-    def on_rotate(self, evt):
-        if self.active_button == 1:
-            new = max(0, min(6000, self.slider_1.GetValue() + evt.delta))
-            self.slider_1.SetValue(new)
-            self.frequency = (self.f_slider_scale * new) + self.f_slider_offset
-            self.spin_ctrl_1.SetValue(self.frequency)
-            msg = "Frequency: %s" % (eng_notation.num_to_str(self.frequency))
-            self.frame_1_statusbar.SetStatusText(msg,1)
-            if self.mode == 2:
-              self.xlate_L.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) + 960 )
-            else:
-              self.xlate_L.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) + 1.8e3 )
-              self.xlate_U.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) - 1.8e3 )
-
-        elif self.active_button == 2:
-            new = max(0, min(self.vol_max, self.slider_2.GetValue() + 
evt.delta))
-            self.slider_2.SetValue(new)
-            self.volume = new
-            msg = "Volume: %s" % (eng_notation.num_to_str(self.volume))
-            self.frame_1_statusbar.SetStatusText(msg,2)
-            self.scale_L.set_k(self.volume/10e3)
-            self.scale_U.set_k(self.volume/10e3)
-            self.scale_am.set_k(self.volume/10e4)
-
-        elif self.active_button == 3:
-            new = max(0, min(30, self.slider_3.GetValue() + evt.delta))
-            self.slider_3.SetValue(new)
-            if self.mode == 2:
-              self.xlate_filter = new
-              msg = "Filter: %s" % 
(eng_notation.num_to_str(self.xlate_fkey[self.xlate_filter]))
-              self.frame_1_statusbar.SetStatusText (msg,3)
-              self.xlate_L.set_taps(self.xlate_filter_x[self.xlate_filter])
-           else:
-             self.filter = new
-              msg = "Filter: %s" % 
(eng_notation.num_to_str(self.fkey[self.filter]))
-              self.frame_1_statusbar.SetStatusText(msg,3)
-              self.audio_lpf_L.set_taps(self.audio_lpf_x[self.filter])
-              self.audio_lpf_U.set_taps(self.audio_lpf_x[self.filter])
-
-        elif self.active_button == 4:
-           if self.PLAY_FROM_USRP == False:
-              if evt.delta == -1:
-                  self.src.seek(-1000000,gr.SEEK_CUR)
-              elif evt.delta == 1:
-                  self.src.seek(1000000,gr.SEEK_CUR)
-
-    def on_pmButton(self, evt):
-        if evt.value == 0:
-          if self.active_button == 1:
-            self.active_button = 2
-            self.button_1.SetValue(False)
-            self.button_2.SetValue(True)
-            self.button_3.SetValue(False)
-            self.button_4.SetValue(False)
-          elif self.active_button == 2:
-            self.active_button = 3
-            self.button_1.SetValue(False)
-            self.button_2.SetValue(False)
-            self.button_3.SetValue(True)
-            self.button_4.SetValue(False)
-          elif self.active_button == 3:
-           if self.PLAY_FROM_USRP == True:
-              self.active_button = 1
-               self.button_1.SetValue(True)
-               self.button_2.SetValue(False)
-               self.button_3.SetValue(False)
-               self.button_4.SetValue(False)
-           else:
-               self.active_button = 4
-               self.button_1.SetValue(False)
-               self.button_2.SetValue(False)
-               self.button_3.SetValue(False)
-               self.button_4.SetValue(True)
-          elif self.active_button == 4:
-            self.active_button = 1
-            self.button_1.SetValue(True)
-            self.button_2.SetValue(False)
-            self.button_3.SetValue(False)
-            self.button_4.SetValue(False)
-
-    def spin_event(self, event):
-        self.frequency = self.spin_ctrl_1.GetValue()
-        
self.slider_1.SetValue(int((self.frequency-self.f_slider_offset)/self.f_slider_scale))
-        msg = "Frequency: %s" % (eng_notation.num_to_str(self.frequency))
-        self.frame_1_statusbar.SetStatusText(msg,1)
-        if self.mode == 2:
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 960 )
-        else:
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 1.8e3 )
-          self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) - 1.8e3 )
-
-    # menubar events
-    def TimeToQuit(self, event):
-        self.fg.stop()
-        self.Close(True)
-
-    def OnAbout(self, event):
-        dlg = wx.MessageDialog(self, "Listen To\n"
-                              "GNU/Radio live USRP\n",
-                              "GNU/Radio Control Panel", wx.OK | 
wx.ICON_INFORMATION)
-        dlg.ShowModal()
-        dlg.Destroy()
-
-    def OnHelp(self, event):
-       dlg = MyDialog(self)
-       dlg.Show()
-
-    def Mouse(self,event):
-       fRel = ( event.GetX() - 48 ) / 15.2 - 20 
-       # print eng_notation.num_to_str(self.frequency + (fRel*1e3))
-       
self.fft.win.SetToolTip(wx.ToolTip(eng_notation.num_to_str(self.frequency + 
(fRel*1e3))))
-
-    def Click(self,event):
-       fRel = ( event.GetX() - 48 ) / 15.2 - 20
-        self.frequency = self.frequency + (fRel*1e3)
-       self.spin_ctrl_1.SetValue(int(self.frequency))
-        
self.slider_1.SetValue(int((self.frequency-self.f_slider_offset)/self.f_slider_scale))
-        msg = "Frequency: %s" % (eng_notation.num_to_str(self.frequency))
-        self.frame_1_statusbar.SetStatusText(msg,1)
-        if self.mode == 2:
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 960 )
-        else:
-          self.xlate_L.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) + 1.8e3 )
-          self.xlate_U.set_center_freq ( self.usrp_center - ( self.frequency - 
self.tune_offset ) - 1.8e3 )
-
-
-    # timer events - check for web commands
-    def OnUpdate(self):
-      cmds = os.listdir("/var/www/cgi-bin/commands/")
-      if cmds!=[]:
-        if cmds[0]=='chfreq':
-          fd=open("/var/www/cgi-bin/commands/chfreq","r")
-          new=fd.readline()
-          fd.close()
-          if new!='':
-            os.unlink("/var/www/cgi-bin/commands/chfreq")
-            if ( int(new) >= self.f_lo ) & ( int(new) <= self.f_hi ):
-               self.frequency = int(new)
-               self.slider_1.SetValue(( self.frequency - self.f_slider_offset) 
/ self.f_slider_scale )
-               self.spin_ctrl_1.SetValue(self.frequency)
-               msg = "Frequency: %s" % 
(eng_notation.num_to_str(self.frequency))
-               self.frame_1_statusbar.SetStatusText(msg,1)
-               if self.mode == 2:
-                 self.xlate_L.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) + 960 )
-               else:
-                 self.xlate_L.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) + 1.8e3 )
-                 self.xlate_U.set_center_freq ( self.usrp_center - ( 
self.frequency - self.tune_offset ) - 1.8e3 )
-
-        if cmds[0]=='chvolume':
-          fd=open("/var/www/cgi-bin/commands/chvolume","r")
-          new=fd.readline()
-          fd.close()
-          if new!='':
-            os.unlink("/var/www/cgi-bin/commands/chvolume")
-            if ( int(new) >= 0 ) & ( int(new) <= self.vol_max ):
-               self.volume = int(new)
-               self.slider_2.SetValue(self.volume)
-               msg = "Volume: %s" % (eng_notation.num_to_str(self.volume))
-               self.frame_1_statusbar.SetStatusText(msg,2)
-               self.scale_L.set_k(self.volume/10e3)
-               self.scale_U.set_k(self.volume/10e3)
-               self.scale_am.set_k(self.volume/10e4)
-        if cmds[0]=='chfilter':
-          fd=open("/var/www/cgi-bin/commands/chfilter","r")
-          new=fd.readline()
-          fd.close()
-          if new!='':
-            os.unlink("/var/www/cgi-bin/commands/chfilter")
-            if ( int(new) >= 0 ) & ( int(new) <= 30 ):
-               self.filter = int(new)
-               msg = "Filter: %s" % 
(eng_notation.num_to_str(self.fkey[self.filter]))
-               self.frame_1_statusbar.SetStatusText(msg,3)
-               self.audio_lpf_L.set_taps(self.audio_lpf_x[self.filter])
-               self.audio_lpf_U.set_taps(self.audio_lpf_x[self.filter])
-
-        if cmds[0]=='chmode':
-          fd=open("/var/www/cgi-bin/commands/chmode","r")
-          new=fd.readline()
-          fd.close()
-          if new!='':
-            os.unlink("/var/www/cgi-bin/commands/chmode")
-            if new == 'lsb\n' :
-              self.mode = 1
-              self.button_7.SetValue(True)
-              self.button_8.SetValue(False)
-              self.button_9.SetValue(False)
-              self.button_10.SetValue(False)
-              self.button_11.SetValue(False)
-              self.sel_lsb_0.set_k(1)
-              self.sel_lsb_1.set_k(1)
-              self.sel_usb_0.set_k(0)
-              self.sel_usb_1.set_k(0)
-              self.sel_am.set_k(0)
-              self.xlate_L.set_taps(self.xlate_taps_ssb)
-             self.fft.set_baseband_freq(-1.8e3)
-
-            elif new == 'usb\n':
-              self.mode = 0
-              self.button_7.SetValue(False)
-              self.button_8.SetValue(True)
-              self.button_9.SetValue(False)
-              self.button_10.SetValue(False)
-              self.button_11.SetValue(False)
-              self.sel_lsb_0.set_k(0)
-              self.sel_lsb_1.set_k(0)
-              self.sel_usb_0.set_k(1)
-              self.sel_usb_1.set_k(1)
-              self.sel_am.set_k(0)
-              self.xlate_L.set_taps(self.xlate_taps_ssb)
-             self.fft.set_baseband_freq(-1.8e3)
-
-            elif new == 'am\n':
-              self.mode = 2
-              self.button_7.SetValue(False)
-              self.button_8.SetValue(False)
-              self.button_9.SetValue(True)
-              self.button_10.SetValue(False)
-              self.button_11.SetValue(False)
-              self.sel_lsb_0.set_k(0)
-              self.sel_lsb_1.set_k(0)
-              self.sel_usb_0.set_k(0)
-              self.sel_usb_1.set_k(0)
-              self.sel_am.set_k(1)
-              self.xlate_L.set_taps(self.xlate_taps_am)
-             self.fft.set_baseband_freq(-960)
-
-            elif new == 'isb1\n':
-              self.mode = 3
-              self.button_7.SetValue(False)
-              self.button_8.SetValue(False)
-              self.button_9.SetValue(False)
-              self.button_10.SetValue(True)
-              self.button_11.SetValue(False)
-              self.sel_lsb_0.set_k(1)
-              self.sel_lsb_1.set_k(0)
-              self.sel_usb_0.set_k(0)
-              self.sel_usb_1.set_k(1)
-              self.sel_am.set_k(0)
-              self.xlate_L.set_taps(self.xlate_taps_ssb)
-             self.fft.set_baseband_freq(-1.8e3)
-
-            elif new == 'isb2\n':
-              self.mode = 4
-              self.button_7.SetValue(False)
-              self.button_8.SetValue(False)
-              self.button_9.SetValue(False)
-              self.button_10.SetValue(False)
-              self.button_11.SetValue(True)
-              self.sel_lsb_0.set_k(0)
-              self.sel_lsb_1.set_k(1)
-              self.sel_usb_0.set_k(1)
-              self.sel_usb_1.set_k(0)
-              self.sel_am.set_k(0)
-              self.xlate_L.set_taps(self.xlate_taps_ssb)
-             self.fft.set_baseband_freq(-1.8e3)
-
-    def UpdateWebState(self):
-        fh = open("/var/www/cgi-bin/state/freq","w")
-        fh.write(str(int(self.frequency))+'\n')
-        fh.close()
-        fh = open("/var/www/cgi-bin/state/filter","w")
-        fh.write(str(self.filter)+'\n')
-        fh.close()
-        fh = open("/var/www/cgi-bin/state/volume","w")
-        fh.write(str(self.volume)+'\n')
-        fh.close()
-
-
-# end of class MyFrame
-
-# wx.Timer to check for web updates
-class UpdateTimer(wx.Timer):
-    def __init__(self, target, dur=1000):
-        wx.Timer.__init__(self)
-        self.target = target
-        self.Start(dur)
-
-    def Notify(self):
-        """Called every timer interval"""
-        if self.target:
-            self.target.OnUpdate()
-
-
-class UpdateTimer2(wx.Timer):
-    def __init__(self, target, dur=1000):
-        wx.Timer.__init__(self)
-        self.target = target
-        self.Start(dur)
-
-    def Notify(self):
-        """Called every timer interval"""
-        if self.target:
-            self.target.UpdateWebState()
-
-
-
-class MyApp(wx.App):
-  def OnInit(self):
-    frame = MyFrame(None, -1, "HF Explorer")
-    frame.Show(True)
-    self.SetTopWindow(frame)
-    return True
-
-app = MyApp(0)
-app.MainLoop()
-

Index: weaver_isb_am1_usrp4.py
===================================================================
RCS file: weaver_isb_am1_usrp4.py
diff -N weaver_isb_am1_usrp4.py
--- weaver_isb_am1_usrp4.py     20 Dec 2005 22:12:01 -0000      1.1
+++ /dev/null   1 Jan 1970 00:00:00 -0000
@@ -1,239 +0,0 @@
-#!/usr/bin/env python
-#
-#                    Weaver SSB demodulation
-#
-#
-#                                          af_loi
-#                                            |
-#                               --[lpf2i]---(X)---|
-#                               |         af_mixi |
-#                               |                 |
-# signal --[freq xlating]--[split]               (+)----- ssb_demod
-#          [fir filter  ]       |                 |  + USB
-#                               |         af_mixq |  - LSB
-#                               --[lpf2q]---(X)---|
-#                                            |
-#                                          af_loq
-#
-# This version uses TWO branches of the above, one for LSB and one for USB
-# and feeds to the right & left audio out for 'stereo' independant side band
-
-from gnuradio import gr, gru
-from gnuradio import audio
-from gnuradio import usrp
-
-
-def build_graph 
(freq,scale,usrp_decim,usrp_center,audio_file,radio_file,input_file):
-
-    # command line options 
-    if audio_file == "": SAVE_AUDIO_TO_FILE = False
-    else: SAVE_AUDIO_TO_FILE = True
-    if radio_file == "": SAVE_RADIO_TO_FILE = False
-    else: SAVE_RADIO_TO_FILE = True
-    if input_file == "": PLAY_FROM_USRP = True
-    else: PLAY_FROM_USRP = False
-
-    # If true, this redirects setup of the flow graph to directly
-    # send freq-xlated complex RF to stereo-audio. This is used
-    # for Digital Radio Mondial (DRM) demodulation on other software
-    # like DReaM, or for using external demod  software like I2PHD's
-    # SDRadio, etc.
-    IF_OUTPUT = False
-
-    rf_sample_rate = 64000000 / usrp_decim
-    af_sample_rate = 32000
-    fir_decimation = rf_sample_rate / af_sample_rate
-
-    fg = gr.flow_graph ()
-
-    if PLAY_FROM_USRP:
-       src = usrp.source_c(0,usrp_decim)
-       mux = gru.hexint(0xf0f0f0f0)
-       src.set_nchannels(1)
-       src.set_pga(0,0)
-       src.set_mux(mux)
-       src.set_rx_freq(0,-usrp_center)
-       tune_offset = -usrp_center - src.rx_freq(0)
-
-    else:
-       src = gr.file_source (gr.sizeof_gr_complex,input_file)
-       tune_offset = 2200 # 2200 works for 3.5-4Mhz band
-
-# save radio data to a file
-    if SAVE_RADIO_TO_FILE:
-       file = gr.file_sink(gr.sizeof_gr_complex, radio_file)
-       fg.connect (src, file)
-
-    rf_LO_L = usrp_center - ( freq - tune_offset ) + 1.8e3
-    rf_LO_U = usrp_center - ( freq - tune_offset ) - 1.82e3
-    af_LO = 1.8e3
-
-
-    xlate_taps = gr.firdes.low_pass ( \
-        1.0, rf_sample_rate, 20e3, 10e3, gr.firdes.WIN_HAMMING )
-
-# LSB branch
-    xlate_L = gr.freq_xlating_fir_filter_ccf ( \
-        fir_decimation, xlate_taps, rf_LO_L, rf_sample_rate )
-
-    split_L = gr.complex_to_float ()
-
-    af_loi_L = gr.sig_source_f (af_sample_rate,gr.GR_COS_WAVE,af_LO,1,0)
-    af_loq_L = gr.sig_source_f (af_sample_rate,gr.GR_SIN_WAVE,af_LO,1,0)
-
-    lpf2_taps = gr.firdes.low_pass ( \
-           1.0, af_sample_rate, 2e3, 600, gr.firdes.WIN_HAMMING)
-    lpf2i_L = gr.fir_filter_fff (1, lpf2_taps)
-    lpf2q_L = gr.fir_filter_fff (1, lpf2_taps)
-
-    af_mixi_L = gr.multiply_ff ()
-    af_mixq_L = gr.multiply_ff ()
-
-    sum_L = gr.add_ff ()    # sub for USB,  add for LSB
-
-    audio_lpf_coeffs = gr.firdes.low_pass ( \
-           1.0,af_sample_rate,3000,600,gr.firdes.WIN_HAMMING)
-    audio_lpf_L = gr.fir_filter_fff (1, audio_lpf_coeffs)
-
-    scale_L = gr.multiply_const_ff(scale)
-
-# USB branch
-    xlate_U = gr.freq_xlating_fir_filter_ccf ( \
-        fir_decimation, xlate_taps, rf_LO_U, rf_sample_rate )
-
-    split_U = gr.complex_to_float ()
-
-    af_loi_U = gr.sig_source_f (af_sample_rate,gr.GR_COS_WAVE,af_LO,1,0)
-    af_loq_U = gr.sig_source_f (af_sample_rate,gr.GR_SIN_WAVE,af_LO,1,0)
-
-    lpf2i_U = gr.fir_filter_fff (1, lpf2_taps)
-    lpf2q_U = gr.fir_filter_fff (1, lpf2_taps)
-
-    af_mixi_U = gr.multiply_ff ()
-    af_mixq_U = gr.multiply_ff ()
-
-    sum_U = gr.sub_ff ()    # sub for USB,  add for LSB
-
-    audio_lpf_U = gr.fir_filter_fff (1, audio_lpf_coeffs)
-
-    scale_U = gr.multiply_const_ff(scale)
-
-# AM branch
-    mag = gr.complex_to_mag()
-    diff = gr.fir_filter_fff ( 1, [1, -1] )
-    int_0dc = gr.iir_filter_ffd ( [1, 0], [0, .999] )
-    sel_am = gr.multiply_const_ff(0)
-    scale_am = gr.multiply_const_ff(0)
-
-# AGC lsb
-    sqr1_L = gr.multiply_ff()
-    int_L = gr.iir_filter_ffd ( [.004, 0], [0, .999] )
-    offset_L = gr.add_const_ff(1)
-    agc_L = gr.divide_ff()
-
-# AGC usb
-    sqr1_U = gr.multiply_ff()
-    int_U = gr.iir_filter_ffd ( [.004, 0], [0, .999] )
-    offset_U = gr.add_const_ff(1)
-    agc_U = gr.divide_ff()
-
-# sideband selection
-    sel_lsb_0 = gr.multiply_const_ff(1)
-    sel_lsb_1 = gr.multiply_const_ff(1)
-    sel_usb_0 = gr.multiply_const_ff(0)
-    sel_usb_1 = gr.multiply_const_ff(0)
-    select0 = gr.add_ff()
-    select1 = gr.add_ff()
-
-    out = audio.sink (long(af_sample_rate))
-
-    fg.connect (src, xlate_L)
-    fg.connect (src, xlate_U)
-    fg.connect (xlate_L, split_L)
-    fg.connect (xlate_U, split_U)
-
-    fg.connect ((split_L, 0), lpf2i_L)
-    fg.connect ((split_U, 0), lpf2i_U)
-    fg.connect (lpf2i_L, (af_mixi_L, 0))
-    fg.connect (lpf2i_U, (af_mixi_U, 0))
-    fg.connect (af_loi_L, (af_mixi_L, 1))
-    fg.connect (af_loi_U, (af_mixi_U, 1))
-    fg.connect (af_mixi_L, (sum_L, 0))
-    fg.connect (af_mixi_U, (sum_U, 0))
-
-    fg.connect ((split_L, 1), lpf2q_L)
-    fg.connect ((split_U, 1), lpf2q_U)
-    fg.connect (lpf2q_L, (af_mixq_L, 0))
-    fg.connect (lpf2q_U, (af_mixq_U, 0))
-    fg.connect (af_loq_L, (af_mixq_L, 1))
-    fg.connect (af_loq_U, (af_mixq_U, 1))
-    fg.connect (af_mixq_L, (sum_L, 1))
-    fg.connect (af_mixq_U, (sum_U, 1))
-
-    fg.connect (sum_L, audio_lpf_L)
-    fg.connect (sum_U, audio_lpf_U)
-    fg.connect (audio_lpf_L, scale_L)
-    fg.connect (audio_lpf_U, scale_U)
-# wire AGC
-    fg.connect (scale_L, (sqr1_L, 0))
-    fg.connect (scale_U, (sqr1_U, 0))
-    fg.connect (scale_L, (sqr1_L, 1))
-    fg.connect (scale_U, (sqr1_U, 1))
-    fg.connect (sqr1_L, int_L)
-    fg.connect (sqr1_U, int_U)
-    fg.connect (int_L, offset_L)
-    fg.connect (int_U, offset_U)
-    fg.connect (offset_L, (agc_L, 1))
-    fg.connect (offset_U, (agc_U, 1))
-    fg.connect (scale_L, (agc_L, 0))
-    fg.connect (scale_U, (agc_U, 0))
-# wire sideband selection
-    fg.connect (agc_L, sel_lsb_0)
-    fg.connect (agc_U, sel_usb_0)
-    fg.connect (agc_L, sel_lsb_1)
-    fg.connect (agc_U, sel_usb_1)
-    fg.connect (sel_lsb_0, (select0, 0))
-    fg.connect (sel_usb_0, (select0, 1))
-    fg.connect (sel_lsb_1, (select1, 0))
-    fg.connect (sel_usb_1, (select1, 1))
-    if IF_OUTPUT:
-      nl_sink1 = gr.null_sink(gr.sizeof_float)
-      nl_sink2 = gr.null_sink(gr.sizeof_float)
-      fg.connect (select0, nl_sink1)
-      fg.connect (select1, nl_sink2)
-      c2f = gr.complex_to_float()
-      scale_if = gr.multiply_const_cc(.0015)
-      fg.connect (xlate_L, scale_if, c2f)
-      fg.connect ((c2f, 0), (out, 1))
-      fg.connect ((c2f, 1), (out, 0))
-    else:
-      fg.connect (select0, (out, 0))
-      fg.connect (select1, (out, 1))
-# output to file
-    if SAVE_AUDIO_TO_FILE:
-       f_out = gr.file_sink(gr.sizeof_short,audio_file)
-# This creates a signed-word 2-channel (stereo) file at 32000 hz
-# convert to wav file with: sox -c 2 -r 32000 hfx_out.sw hfx_out.wav
-       combine = gr.interleave(gr.sizeof_short)
-       sc1 = gr.multiply_const_ff(64000)
-       sc2 = gr.multiply_const_ff(64000)
-       f2s1 = gr.float_to_short()
-       f2s2 = gr.float_to_short()
-       fg.connect (select0, sc1)
-       fg.connect (select1, sc2)
-       fg.connect (sc1, f2s1)
-       fg.connect (sc2, f2s2)
-       fg.connect (f2s1, (combine, 0))
-       fg.connect (f2s2, (combine, 1))
-       fg.connect (combine, f_out)
-# wire AM
-    fg.connect (xlate_L, mag, diff, int_0dc)
-    fg.connect (int_0dc, sel_am)
-    fg.connect (sel_am, scale_am)
-    fg.connect (scale_am, (select0, 2))
-    fg.connect (scale_am, (select1, 2))
-
-    return fg, tune_offset, xlate_L, xlate_U, scale_L, scale_U, src, \
-    audio_lpf_L, audio_lpf_U, sel_lsb_0, sel_lsb_1, sel_usb_0, sel_usb_1, \
-    sel_am, scale_am
-




reply via email to

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