diff options
Diffstat (limited to 'apps/osmocom_siggen_gui')
-rwxr-xr-x | apps/osmocom_siggen_gui | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/apps/osmocom_siggen_gui b/apps/osmocom_siggen_gui deleted file mode 100755 index 86003c4..0000000 --- a/apps/osmocom_siggen_gui +++ /dev/null @@ -1,374 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2009,2011,2012 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.gr.pubsub import pubsub -from osmosdr import osmocom_siggen_base as osmocom_siggen -import sys, math - -try: - from gnuradio.wxgui import gui, forms - import wx -except ImportError: - sys.stderr.write("Error importing GNU Radio's wxgui. Please make sure gr-wxgui is installed.\n") - sys.exit(1) - -class app_gui(pubsub): - def __init__(self, frame, panel, vbox, top_block, options, args): - pubsub.__init__(self) - self.frame = frame # Use for top-level application window frame - self.panel = panel # Use as parent class for created windows - self.vbox = vbox # Use as sizer for created windows - self.tb = top_block # GUI-unaware flowgraph class - self.options = options # Supplied command-line options - self.args = args # Supplied command-line arguments - self.build_gui() - - # Event response handlers - def evt_set_status_msg(self, msg): - self.frame.SetStatusText(msg, 0) - - # GUI construction - def build_gui(self): - self.vbox.AddSpacer(3) - self.vbox.AddStretchSpacer() - ################################################## - # Baseband controls - ################################################## - bb_vbox = forms.static_box_sizer(parent=self.panel, label="Baseband Modulation", orient=wx.VERTICAL, bold=True) - self.vbox.Add(bb_vbox, 0, wx.EXPAND) - sine_bb_hbox = wx.BoxSizer(wx.HORIZONTAL) - sweep_bb_hbox = wx.BoxSizer(wx.HORIZONTAL) - tone_bb_hbox = wx.BoxSizer(wx.HORIZONTAL) - self.vbox.AddSpacer(5) - self.vbox.AddStretchSpacer() - #callback to show/hide forms - def set_type(type): - sine_bb_hbox.ShowItems(type == gr.GR_SIN_WAVE) - sweep_bb_hbox.ShowItems(type == 'sweep') - tone_bb_hbox.ShowItems(type == '2tone') - self.vbox.Layout() - self.tb.subscribe(osmocom_siggen.TYPE_KEY, set_type) - #create sine forms - sine_bb_hbox.AddSpacer(5) - forms.text_box( - parent=self.panel, sizer=sine_bb_hbox, - label='Frequency (Hz)', - ps=self.tb, - key=osmocom_siggen.WAVEFORM_FREQ_KEY, - converter=forms.float_converter(), - ) - sine_bb_hbox.AddStretchSpacer() - #create sweep forms - sweep_bb_hbox.AddSpacer(5) - forms.text_box( - parent=self.panel, sizer=sweep_bb_hbox, - label='Sweep Width (Hz)', - ps=self.tb, - key=osmocom_siggen.WAVEFORM_FREQ_KEY, - converter=forms.float_converter(), - ) - sweep_bb_hbox.AddStretchSpacer() - forms.text_box( - parent=self.panel, sizer=sweep_bb_hbox, - label='Sweep Rate (Hz)', - ps=self.tb, - key=osmocom_siggen.WAVEFORM2_FREQ_KEY, - converter=forms.float_converter(), - ) - sweep_bb_hbox.AddStretchSpacer() - #create 2tone forms - tone_bb_hbox.AddSpacer(5) - forms.text_box( - parent=self.panel, sizer=tone_bb_hbox, - label='Tone 1 (Hz)', - ps=self.tb, - key=osmocom_siggen.WAVEFORM_FREQ_KEY, - converter=forms.float_converter(), - ) - tone_bb_hbox.AddStretchSpacer() - forms.text_box( - parent=self.panel, sizer=tone_bb_hbox, - label='Tone 2 (Hz)', - ps=self.tb, - key=osmocom_siggen.WAVEFORM2_FREQ_KEY, - converter=forms.float_converter(), - ) - tone_bb_hbox.AddStretchSpacer() - forms.radio_buttons( - parent=self.panel, sizer=bb_vbox, - choices=osmocom_siggen.waveforms.keys(), - labels=osmocom_siggen.waveforms.values(), - ps=self.tb, - key=osmocom_siggen.TYPE_KEY, - style=wx.NO_BORDER | wx.RA_HORIZONTAL, - ) - bb_vbox.AddSpacer(5) - bb_vbox.Add(sine_bb_hbox, 0, wx.EXPAND) - bb_vbox.Add(sweep_bb_hbox, 0, wx.EXPAND) - bb_vbox.Add(tone_bb_hbox, 0, wx.EXPAND) - set_type(self.tb[osmocom_siggen.TYPE_KEY]) - - ################################################## - # Frequency controls - ################################################## - fc_vbox = forms.static_box_sizer(parent=self.panel, - label="Center Frequency", - orient=wx.VERTICAL, - bold=True) - fc_vbox.AddSpacer(3) - # First row of frequency controls (center frequency) - freq_hbox = wx.BoxSizer(wx.HORIZONTAL) - fc_vbox.Add(freq_hbox, 0, wx.EXPAND) - fc_vbox.AddSpacer(5) - # Second row of frequency controls (freq. correction) - corr_hbox = wx.BoxSizer(wx.HORIZONTAL) - fc_vbox.Add(corr_hbox, 0, wx.EXPAND) - fc_vbox.AddSpacer(3) - # Add frequency controls to top window sizer - self.vbox.Add(fc_vbox, 0, wx.EXPAND) - self.vbox.AddSpacer(5) - self.vbox.AddStretchSpacer() - - freq_hbox.AddSpacer(3) - forms.text_box( - parent=self.panel, sizer=freq_hbox, - label='Center Frequency (Hz)', - proportion=1, - converter=forms.float_converter(), - ps=self.tb, - key=osmocom_siggen.TX_FREQ_KEY, - ) - freq_hbox.AddSpacer(5) - - forms.slider( - parent=self.panel, sizer=freq_hbox, - proportion=2, - ps=self.tb, - key=osmocom_siggen.TX_FREQ_KEY, - minimum=self.tb[osmocom_siggen.FREQ_RANGE_KEY].start(), - maximum=self.tb[osmocom_siggen.FREQ_RANGE_KEY].stop(), - num_steps=100, - ) - freq_hbox.AddSpacer(3) - - corr_hbox.AddSpacer(3) - forms.text_box( - parent=self.panel, sizer=corr_hbox, - label='Frequency Correction (ppm)', - proportion=1, - converter=forms.int_converter(), - ps=self.tb, - key=osmocom_siggen.FREQ_CORR_KEY, - ) - corr_hbox.AddSpacer(5) - - forms.slider( - parent=self.panel, sizer=corr_hbox, - proportion=2, - ps=self.tb, - key=osmocom_siggen.FREQ_CORR_KEY, - minimum=-100, - maximum=+100, - num_steps=201, - ) - corr_hbox.AddSpacer(3) - - ################################################## - # Amplitude controls - ################################################## - amp_vbox = forms.static_box_sizer(parent=self.panel, - label="Amplitude", - orient=wx.VERTICAL, - bold=True) - amp_vbox.AddSpacer(3) - # First row of amp controls (ampl) - lvl_hbox = wx.BoxSizer(wx.HORIZONTAL) - amp_vbox.Add(lvl_hbox, 0, wx.EXPAND) - amp_vbox.AddSpacer(5) - # Second row of amp controls (tx gain) - gain_hbox = wx.BoxSizer(wx.HORIZONTAL) - amp_vbox.Add(gain_hbox, 0, wx.EXPAND) - amp_vbox.AddSpacer(3) - if_gain_hbox = wx.BoxSizer(wx.HORIZONTAL) - amp_vbox.Add(if_gain_hbox, 0, wx.EXPAND) - amp_vbox.AddSpacer(3) - - self.vbox.Add(amp_vbox, 0, wx.EXPAND) - self.vbox.AddSpacer(5) - self.vbox.AddStretchSpacer() - - lvl_hbox.AddSpacer(3) - forms.text_box( - parent=self.panel, sizer=lvl_hbox, - proportion=1, - converter=forms.float_converter(), - ps=self.tb, - key=osmocom_siggen.AMPLITUDE_KEY, - label="Level (0.0-1.0)", - ) - lvl_hbox.AddSpacer(5) - forms.log_slider( - parent=self.panel, sizer=lvl_hbox, - proportion=2, - ps=self.tb, - key=osmocom_siggen.AMPLITUDE_KEY, - min_exp=-6, - max_exp=0, - base=10, - num_steps=100, - ) - lvl_hbox.AddSpacer(3) - - if self.tb[osmocom_siggen.GAIN_RANGE_KEY].start() < self.tb[osmocom_siggen.GAIN_RANGE_KEY].stop(): - gain_hbox.AddSpacer(3) - forms.text_box( - parent=self.panel, sizer=gain_hbox, - proportion=1, - converter=forms.float_converter(), - ps=self.tb, - key=osmocom_siggen.GAIN_KEY, - label="RF Gain (dB)", - ) - gain_hbox.AddSpacer(5) - forms.slider( - parent=self.panel, sizer=gain_hbox, - proportion=2, - ps=self.tb, - key=osmocom_siggen.GAIN_KEY, - minimum=self.tb[osmocom_siggen.GAIN_RANGE_KEY].start(), - maximum=self.tb[osmocom_siggen.GAIN_RANGE_KEY].stop(), - step_size=self.tb[osmocom_siggen.GAIN_RANGE_KEY].step(), - ) - gain_hbox.AddSpacer(3) - - if self.tb[osmocom_siggen.IF_GAIN_RANGE_KEY].start() < self.tb[osmocom_siggen.IF_GAIN_RANGE_KEY].stop(): - if_gain_hbox.AddSpacer(3) - forms.text_box( - parent=self.panel, sizer=if_gain_hbox, - proportion=1, - converter=forms.float_converter(), - ps=self.tb, - key=osmocom_siggen.IF_GAIN_KEY, - label="IF Gain (dB)", - ) - if_gain_hbox.AddSpacer(5) - forms.slider( - parent=self.panel, sizer=if_gain_hbox, - proportion=2, - ps=self.tb, - key=osmocom_siggen.IF_GAIN_KEY, - minimum=self.tb[osmocom_siggen.IF_GAIN_RANGE_KEY].start(), - maximum=self.tb[osmocom_siggen.IF_GAIN_RANGE_KEY].stop(), - step_size=self.tb[osmocom_siggen.IF_GAIN_RANGE_KEY].step(), - ) - if_gain_hbox.AddSpacer(3) - - ################################################## - # Bandiwdth controls - ################################################## - bwidth_vbox = forms.static_box_sizer(parent=self.panel, - label="Bandwidth", - orient=wx.VERTICAL, - bold=True) - bwidth_vbox.AddSpacer(3) - bwidth_hbox = wx.BoxSizer(wx.HORIZONTAL) - bwidth_vbox.Add(bwidth_hbox, 0, wx.EXPAND) - bwidth_vbox.AddSpacer(3) - - self.vbox.Add(bwidth_vbox, 0, wx.EXPAND) - self.vbox.AddSpacer(5) - self.vbox.AddStretchSpacer() - - if self.tb[osmocom_siggen.BWIDTH_RANGE_KEY].start() < self.tb[osmocom_siggen.BWIDTH_RANGE_KEY].stop(): - bwidth_hbox.AddSpacer(3) - forms.text_box( - parent=self.panel, sizer=bwidth_hbox, - proportion=1, - converter=forms.float_converter(), - ps=self.tb, - key=osmocom_siggen.BWIDTH_KEY, - label="Bandwidth (Hz)", - ) - bwidth_hbox.AddSpacer(5) - forms.slider( - parent=self.panel, sizer=bwidth_hbox, - proportion=2, - ps=self.tb, - key=osmocom_siggen.BWIDTH_KEY, - minimum=self.tb[osmocom_siggen.BWIDTH_RANGE_KEY].start(), - maximum=self.tb[osmocom_siggen.BWIDTH_RANGE_KEY].stop(), - step_size=self.tb[osmocom_siggen.BWIDTH_RANGE_KEY].step(), - ) - bwidth_hbox.AddSpacer(3) - - ################################################## - # Sample Rate controls - ################################################## - sam_hbox = forms.static_box_sizer(parent=self.panel, - label="Sample Rate", - orient=wx.HORIZONTAL, - bold=True) - self.vbox.Add(sam_hbox, 0, wx.EXPAND) - self.vbox.AddSpacer(5) - self.vbox.AddStretchSpacer() - sam_hbox.AddStretchSpacer(20) - forms.static_text( - parent=self.panel, sizer=sam_hbox, - label='Sample Rate (sps)', - ps=self.tb, - key=osmocom_siggen.SAMP_RATE_KEY, - converter=forms.float_converter(), - ) - sam_hbox.AddStretchSpacer(20) - -def main(): - try: - # Get command line parameters - (options, args) = osmocom_siggen.get_options() - - # Create the top block using these - tb = osmocom_siggen.top_block(options, args) - - # Create the GUI application - app = gui.app(top_block=tb, # Constructed top block - gui=app_gui, # User interface class - options=options, # Command line options - args=args, # Command line args - title="OSMOCOM Signal Generator", # Top window title - nstatus=1, # Number of status lines - start=True, # Whether to start flowgraph - realtime=True) # Whether to set realtime priority - - # And run it - app.MainLoop() - - except RuntimeError, e: - print e - sys.exit(1) - -# Make sure to create the top block (tb) within a function: That code -# in main will allow tb to go out of scope on return, which will call -# the decontructor on radio device and stop transmit. Whats odd is that -# grc works fine with tb in the __main__, perhaps its because the -# try/except clauses around tb. -if __name__ == "__main__": main() |