示例#1
0
    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), 0)
        vbox.Add(hbox, 0, wx.EXPAND)
    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), 0)
        vbox.Add(hbox, 0, wx.EXPAND)
示例#3
0
    def _create_write_fpga(self):

        def _write_fpga(kv):
            return self.flexrf._u._write_fpga_reg(kv['regno'], kv['value'])

        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
        sbs.Add((5,0), 0.1)       # stretchy space
        sbs.Add(wx.StaticText(self.panel, -1, "write_fpga_reg "), 0, 0)
        sbs.Add((5,0), 0.1)       # stretchy space
        myform = form.form()
        myform['regno'] = form.int_field(self.panel, sbs, "regno")
        sbs.Add((5,0), 0.1)       # stretchy space
        myform['value'] = form.int_field(self.panel, sbs, "value")
        sbs.Add((5,0), 0.1)       # stretchy space
        sbs.Add(form.button_with_callback(self.panel, "Do It!",
                                          self._generic_doit(_write_fpga, myform)), 1, wx.EXPAND)
        sbs.Add((5,0), 0.1)       # stretchy space
        self.vbox.Add(sbs, 0, wx.EXPAND)
示例#4
0
    def _create_write_fpga(self):
        def _write_fpga(kv):
            return self.flexrf._u._write_fpga_reg(kv['regno'], kv['value'])

        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
        sbs.Add((5, 0), 0.1)  # stretchy space
        sbs.Add(wx.StaticText(self.panel, -1, "write_fpga_reg "), 0, 0)
        sbs.Add((5, 0), 0.1)  # stretchy space
        myform = form.form()
        myform['regno'] = form.int_field(self.panel, sbs, "regno")
        sbs.Add((5, 0), 0.1)  # stretchy space
        myform['value'] = form.int_field(self.panel, sbs, "value")
        sbs.Add((5, 0), 0.1)  # stretchy space
        sbs.Add(
            form.button_with_callback(self.panel, "Do It!",
                                      self._generic_doit(_write_fpga, myform)),
            1, wx.EXPAND)
        sbs.Add((5, 0), 0.1)  # stretchy space
        self.vbox.Add(sbs, 0, wx.EXPAND)
示例#5
0
    def _create_write_all(self):

        def _write_all(kv):
            self.flexrf._write_all(kv['R'], kv['control'], kv['N'])   # void
            return  True

        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
        sbs.Add((5,0), 0.1)       # stretchy space
        sbs.Add(wx.StaticText(self.panel, -1, "write_all "), 0, 0)
        sbs.Add((5,0), 0.1)       # stretchy space
        myform = form.form()
        myform['R'] = form.int_field(self.panel, sbs, "R")
        sbs.Add((5,0), 0.1)       # stretchy space
        myform['control'] = form.int_field(self.panel, sbs, "control")
        sbs.Add((5,0), 0.1)       # stretchy space
        myform['N'] = form.int_field(self.panel, sbs, "N")
        sbs.Add((5,0), 0.1)       # stretchy space
        sbs.Add(form.button_with_callback(self.panel, "Do It!",
                                          self._generic_doit(_write_all, myform)), 1, wx.EXPAND)
        sbs.Add((5,0), 0.1)       # stretchy space
        self.vbox.Add(sbs, 0, wx.EXPAND)
示例#6
0
    def _create_write_all(self):
        def _write_all(kv):
            self.flexrf._write_all(kv['R'], kv['control'], kv['N'])  # void
            return True

        sbs = wx.StaticBoxSizer(wx.StaticBox(self.panel), wx.HORIZONTAL)
        sbs.Add((5, 0), 0.1)  # stretchy space
        sbs.Add(wx.StaticText(self.panel, -1, "write_all "), 0, 0)
        sbs.Add((5, 0), 0.1)  # stretchy space
        myform = form.form()
        myform['R'] = form.int_field(self.panel, sbs, "R")
        sbs.Add((5, 0), 0.1)  # stretchy space
        myform['control'] = form.int_field(self.panel, sbs, "control")
        sbs.Add((5, 0), 0.1)  # stretchy space
        myform['N'] = form.int_field(self.panel, sbs, "N")
        sbs.Add((5, 0), 0.1)  # stretchy space
        sbs.Add(
            form.button_with_callback(self.panel, "Do It!",
                                      self._generic_doit(_write_all, myform)),
            1, wx.EXPAND)
        sbs.Add((5, 0), 0.1)  # stretchy space
        self.vbox.Add(sbs, 0, wx.EXPAND)
示例#7
0
 def _make_plot_common(self, sizer):
     hbox = wx.BoxSizer(wx.HORIZONTAL)
     # idbox = wx.BoxSizer(wx.HORIZONTAL)
     # cbox  = wx.BoxSizer(wx.HORIZONTAL)
     # sbox  = wx.BoxSizer(wx.HORIZONTAL)
     ## Add int box for Stream ID
     self.sidfield = form.int_field(self.win, hbox, "SID", self.SID, self.SetSID)
     self.sidfield.f.SetToolTipString("Select Spatial Stream")
     ## Add choice box for color
     self.cfield = choicebox_field(
         self.win, hbox, callback=self.SetColor, value=self.color, choices=Plotter.color_choices
     )
     self.cfield.f.SetToolTipString("Select Marker Color")
     ## Add choice box for shape
     self.sfield = choicebox_field(
         self.win, hbox, callback=self.SetShape, value=self.shape, choices=Plotter.shape_choices
     )
     self.sfield.f.SetToolTipString("Select Marker Shape")
     self.SetColor(self.color)
     self.SetShape(self.shape)
     sizer.Add(hbox, 0, wx.ALIGN_LEFT | wx.LEFT, border=10)
示例#8
0
    def make_control(self):
        bspace = 10
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        """ Frequency """
        nbox = wx.BoxSizer(wx.HORIZONTAL)
        self.make_label("Carrier Frequency", nbox, 46)
        self.freq = form.float_field (self, nbox, \
                value=default_control_setup.d_options['freq'], callback=self.SetFreq)
        self.AddParam('freq',self.SetFreq)
        self.SetParam('freq', self.options.freq)
        vbox.AddSpacer((10,10) )
        vbox.Add(nbox, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)
        
        """ Sample Rate """
        nbox = wx.BoxSizer(wx.HORIZONTAL)
        self.make_label("Sample Rate", nbox, 80)
        self.sample_rate = form.float_field (self, nbox, \
                value=self.options.sample_rate, callback=self.SetSampleRate)
        self.AddParam('sample_rate', self.SetSampleRate)
        self.SetParam('sample_rate', self.options.sample_rate)
        vbox.Add(nbox, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)
        
        """ Upsampling Factor """
        nbox = wx.BoxSizer(wx.HORIZONTAL)
        self.make_label("Upsampling Factor", nbox, 43)
        self.upsample = form.int_field (self, nbox, \
                value=self.options.upsample, callback=self.SetUpsample)
        self.AddParam('upsampling_factor', self.SetUpsample)
        self.SetParam('upsampling_factor', self.options.upsample)
        vbox.Add(nbox, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)
        self.upsamplebox = nbox

        """ TxGain """
        box = wx.BoxSizer(wx.HORIZONTAL)
        self.txgain = form.slider_field(self, box, "Transmit Gain",\
                value=self.options.tx_gain, callback=self.SetTxGain,
                min=0, max=10000.0)
        box.AddSpacer((10,10) )
        self.autotxgain = form.checkbox_field(self, box, "auto", \
                value=self.options.auto_tx_gain, callback=self.SetAutoTxGain, \
                weight=0)
        box.GetItem(self.autotxgain.f).SetFlag(wx.ALIGN_LEFT|wx.ALIGN_BOTTOM)
        self.AddParam('auto_tx_gain', self.SetAutoTxGain)
        self.SetParam('auto_tx_gain', self.options.auto_tx_gain)
        self.AddParam('tx_gain', self.SetTxGain)
        self.SetParam('tx_gain', self.options.tx_gain)
        vbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)
        self.txgainbox = box

        """ RxGain """
        box = wx.BoxSizer(wx.HORIZONTAL)
        self.rxgain = form.slider_field(self, box, "Receive Gain", \
                value=self.options.rx_gain, callback=self.SetRxGain,
                min=0, max=75)
        self.AddParam('rx_gain', self.SetRxGain)
        self.SetParam('rx_gain', self.options.rx_gain)
        vbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)

        self.topbox.Add(vbox, 0, wx.GROW)
        self.cbox = vbox
        self.Fit()
示例#9
0
    def make_layout(self):
        bspace=10
        self.topbox.SetOrientation(wx.HORIZONTAL)
        self.controlbox = wx.BoxSizer(wx.VERTICAL)
        self.AddPlot()
        
        ## Create divider
        self.divider = Divider(self)
        self.divider.SetBackgroundColour(wx.Colour(200,200,200) )
        self.topbox.Add(self.divider, 0, wx.EXPAND|wx.GROW)

        # Get PHY RX
        if hasattr(self.GetParent(), 'phy'):
            if hasattr(self.GetParent().phy, 'rx'):
                self.phyrx = self.GetParent().phy.rx

        """ Subchannel """
        self.set_subchannel = lambda *args: None
        self.subchannel = 0
        if hasattr(self.phyrx, 'lfb_subchannel'):
            self.subchannel = self.phyrx.lfb_subchannel()
        if hasattr(self.phyrx, 'set_lfb_subchannel'):
            self.set_subchannel = self.phyrx.set_lfb_subchannel
        box = wx.BoxSizer(wx.VERTICAL)
        self.make_label("Subchannel", box)
        self.fsubchannel = form.int_field(self, box, value=self.subchannel, \
                                      callback=self.SetSubchannel)
        self.AddParam('subchannel', self.SetSubchannel)
        self.controlbox.Add(box, 0, wx.TOP, border=bspace)

        """ Period """
        self.set_period = lambda *args: None
        self.period = 0
        if hasattr(self.phyrx, 'lfb_period'):
            self.period = self.phyrx.lfb_period()
        if hasattr(self.phyrx, 'set_lfb_period'):
            self.set_period = self.phyrx.set_lfb_period
        box = wx.BoxSizer(wx.VERTICAL)
        self.make_label("Period", box)
        self.fperiod = form.int_field(self, box, value=self.period, \
                                      callback=self.SetPeriod)
        self.AddParam('period', self.SetPeriod)
        self.controlbox.Add(box, 0, wx.TOP|wx.BOTTOM, border=bspace)

        """ Codebook """
        self.set_codebook = lambda *args: None
        self.codebook = 0
        if hasattr(self.phyrx, 'lfb_codebook'):
            self.codebook = self.phyrx.lfb_codebook()
        if hasattr(self.phyrx, 'set_lfb_codebook'):
            self.set_codebook = self.phyrx.set_lfb_codebook
        box = wx.BoxSizer(wx.HORIZONTAL)
        self.fcodebook = choicebox_field(self, box, \
                value=MimoCSI.CODEBOOK_CHOICES[0], callback=self.SetCodebook, \
                choices = MimoCSI.CODEBOOK_CHOICES)
        self.fcodebook.f.SetToolTipString("Set limited feedback codebook")
        self.AddParam('codebook', self.SetCodebook)
        self.controlbox.Add(box, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.TOP|wx.BOTTOM, border=bspace)

        """ Codebook Bits """
        self.set_codebit = lambda *args: None
        self.codebits = 3
        if hasattr(self.phyrx, 'lfb_codebits'):
            self.codebits = self.phyrx.lfb_codebits()
        if hasattr(self.phyrx, 'set_lfb_codebits'):
            self.set_codebits = self.phyrx.set_lfb_codebits
        box = wx.BoxSizer(wx.VERTICAL)
        self.make_label("Codebook Bits", box)
        self.fcodebits = form.int_field(self, box, value=self.codebits, \
                                      callback=self.SetCodebits)
        self.AddParam('codebits', self.SetCodebits)
        self.controlbox.Add(box, 0, wx.TOP, border=bspace)

        self.AddParam('data', self.SetData)
        self.topbox.Add(self.controlbox, 0, wx.ALL, border=bspace)
示例#10
0
    def build_gui(self):
        self.myform = myform = form.form()

        # Baseband controls
        bb_sbox = wx.StaticBox(parent=self.panel, label="Baseband Modulation")
        bb_vbox = wx.StaticBoxSizer(
            bb_sbox, wx.VERTICAL)  # Holds all baseband controls as unit

        # First row of baseband controls (modulation type)
        mod_hbox = wx.BoxSizer(wx.HORIZONTAL)
        mod_hbox.Add((10, 0), 0, 0)
        myform['type'] = form.radiobox_field(
            parent=self.panel,
            label="Type",
            sizer=mod_hbox,
            value=None,
            callback=self.evt_set_waveform_type,
            weight=1,
            major_dimension=0,
            choices=usrp2_siggen.waveforms.values())
        bb_vbox.Add((0, 10), 0, 0)
        bb_vbox.Add(mod_hbox, 0, wx.EXPAND)

        # Second row of baseband controls (frequencies)
        bbf_hbox = wx.BoxSizer(wx.HORIZONTAL)
        bbf_hbox.Add((10, 0), 0, 0)
        myform['w1freq'] = form.float_field(
            parent=self.panel,
            sizer=bbf_hbox,
            label="Frequency 1 (Hz)",
            weight=1,
            callback=myform.check_input_and_call(self.evt_set_freq1,
                                                 self.evt_set_status_msg))
        bbf_hbox.Add((10, 0), 0, 0)
        myform['w2freq'] = form.float_field(
            parent=self.panel,
            sizer=bbf_hbox,
            label="Frequency 2 (Hz)",
            weight=1,
            callback=myform.check_input_and_call(self.evt_set_freq2,
                                                 self.evt_set_status_msg))
        bbf_hbox.Add((10, 0), 0, 0)

        bb_vbox.Add((0, 10), 0, 0)
        bb_vbox.Add(bbf_hbox, 0, wx.EXPAND)

        # Add baseband controls to top window sizer
        self.vbox.Add((0, 10), 0, 0)
        self.vbox.Add(bb_vbox, 0, wx.EXPAND)

        # Frequency controls
        fc_sbox = wx.StaticBox(parent=self.panel, label="Center Frequency")
        fc_vbox = wx.StaticBoxSizer(
            fc_sbox, wx.VERTICAL)  # Holds all frequency controls as unit

        # First row of frequency controls (center frequency)
        freq_hbox = wx.BoxSizer(wx.HORIZONTAL)
        freq_hbox.Add((10, 0), 0, 0)
        myform['freq'] = form.float_field(parent=self.panel,
                                          sizer=freq_hbox,
                                          label=None,
                                          weight=1,
                                          callback=myform.check_input_and_call(
                                              self.evt_set_freq,
                                              self.evt_set_status_msg))
        freq_hbox.Add((10, 0), 0, 0)
        myform['freq_slider'] = form.quantized_slider_field(
            parent=self.panel,
            sizer=freq_hbox,
            label="Min-Max",
            weight=4,
            range=(self.min_freq, self.max_freq, self.freq_step),
            callback=self.evt_set_freq)
        freq_hbox.Add((10, 0), 0, 0)

        fc_vbox.Add((10, 0), 0, 0)
        fc_vbox.Add(freq_hbox, 0, wx.EXPAND)

        # Second row of frequency controls (results)
        tr_hbox = wx.BoxSizer(wx.HORIZONTAL)
        tr_hbox.Add((10, 0), 0, 0)
        myform['analog'] = form.static_float_field(parent=self.panel,
                                                   sizer=tr_hbox,
                                                   label="Daughterboard: (Hz)",
                                                   weight=1)
        tr_hbox.Add((10, 0), 0, 0)
        myform['DDC'] = form.static_float_field(parent=self.panel,
                                                sizer=tr_hbox,
                                                label="USRP2 DDC (Hz)",
                                                weight=1)
        tr_hbox.Add((10, 0), 0, 0)
        fc_vbox.Add(tr_hbox, 0, wx.EXPAND)

        # Add frequency controls to top window sizer
        self.vbox.Add((0, 10), 0, 0)
        self.vbox.Add(fc_vbox, 0, wx.EXPAND)

        # Amplitude row
        amp_sbox = wx.StaticBox(parent=self.panel, label="Amplitude")
        amp_hbox = wx.StaticBoxSizer(amp_sbox, wx.HORIZONTAL)
        amp_hbox.Add((10, 0), 0, 0)
        myform['amp'] = form.float_field(parent=self.panel,
                                         sizer=amp_hbox,
                                         label="Linear\n(0.0-1.0)",
                                         weight=1,
                                         callback=myform.check_input_and_call(
                                             self.evt_set_amplitude,
                                             self.evt_set_status_msg))
        amp_hbox.Add((10, 0), 0, 0)
        myform['amp_slider'] = form.quantized_slider_field(
            parent=self.panel,
            sizer=amp_hbox,
            label="dB Full Scale\n(-100-0)",
            weight=4,
            range=(-100.0, 0.0, 1),
            callback=self.evt_set_amplitude)
        amp_hbox.Add((10, 0), 0, 0)
        self.vbox.Add((0, 10), 0, 0)
        self.vbox.Add(amp_hbox, 0, wx.EXPAND)

        # Sample rate row
        sam_sbox = wx.StaticBox(parent=self.panel, label="Sample Rate")
        sam_hbox = wx.StaticBoxSizer(sam_sbox, wx.HORIZONTAL)
        sam_hbox.Add((10, 0), 0, 0)
        myform['interp'] = form.int_field(parent=self.panel,
                                          sizer=sam_hbox,
                                          label="Interpolation",
                                          weight=1,
                                          callback=self.evt_set_interp)
        sam_hbox.Add((10, 0), 0, 0)
        myform['eth'] = form.static_float_field(parent=self.panel,
                                                sizer=sam_hbox,
                                                label="Sample Rate (sps)",
                                                weight=1)
        sam_hbox.Add((10, 0), 0, 0)
        myform['gbe'] = form.static_float_field(parent=self.panel,
                                                sizer=sam_hbox,
                                                label="GbE Rate (bits/sec)",
                                                weight=1)
        sam_hbox.Add((10, 0), 0, 0)
        self.vbox.Add((0, 10), 0, 0)
        self.vbox.Add(sam_hbox, 0, wx.EXPAND)

        # USRP2 row
        u2_sbox = wx.StaticBox(parent=self.panel, label="USRP2 Hardware")
        u2_hbox = wx.StaticBoxSizer(u2_sbox, wx.HORIZONTAL)
        u2_hbox.Add((10, 0), 0, 0)
        myform['ifc'] = form.static_text_field(parent=self.panel,
                                               sizer=u2_hbox,
                                               label="Interface",
                                               weight=2)
        u2_hbox.Add((10, 0), 0, 0)
        myform['mac'] = form.static_text_field(parent=self.panel,
                                               sizer=u2_hbox,
                                               label="MAC Address",
                                               weight=2)
        u2_hbox.Add((10, 0), 0, 0)
        myform['dbid'] = form.static_text_field(parent=self.panel,
                                                sizer=u2_hbox,
                                                label="Daughterboard ID",
                                                weight=1)
        self.vbox.Add((0, 10), 0, 0)
        self.vbox.Add(u2_hbox, 0, wx.EXPAND)
        self.vbox.Add((0, 20), 0, 0)
示例#11
0
    def make_layout(self):
        bspace=10
        self.topbox.SetOrientation(wx.HORIZONTAL)
        self.controlbox = wx.BoxSizer(wx.VERTICAL)
        self.AddPlot()
        
        ## Create divider
        self.divider = Divider(self)
        self.divider.SetBackgroundColour(wx.Colour(200,200,200) )
        self.topbox.Add(self.divider, 0, wx.EXPAND|wx.GROW)

        # Get PHY RX
        if hasattr(self.GetParent(), 'phy'):
            if hasattr(self.GetParent().phy, 'rx'):
                self.phyrx = self.GetParent().phy.rx

        bspace = 5 

        """ Window Size """
        self.set_window_size = lambda *args: None
        self.window_size = 0
        if hasattr(self.phyrx, 'sa_window_size'):
            window_size = self.phyrx.sa_window_size()
            self.window_size = None
            print "[MIMOSELFADAPTATION] window size from phyrx = ",  self.window_size
        if hasattr(self.phyrx, 'set_sa_window_size'):
            self.set_window_size = self.phyrx.set_sa_window_size
        box = wx.BoxSizer(wx.HORIZONTAL)
        self.make_label("Window Size", box, 42)
        self.fwindow_size = form.int_field(self, box, value=window_size, \
                                      callback=self.SetSAWindowSize)
        self.AddParam('window size', self.SetSAWindowSize)
        self.controlbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)

        """ Update Interval """
        self.set_update_interval = lambda *args: None
        self.update_interval = 0
        if hasattr(self.phyrx, 'sa_update_interval'):
            self.update_interval = self.phyrx.sa_update_interval()
        if hasattr(self.phyrx, 'set_sa_update_interval'):
            self.set_update_interval = self.phyrx.set_sa_update_interval
        box = wx.BoxSizer(wx.HORIZONTAL)
        self.make_label("Update Interval", box, 27)
        self.fupdate_interval = form.int_field(self, box, value=self.update_interval, \
                                      callback=self.SetUpdateInterval)
        self.AddParam('update interval', self.SetUpdateInterval)
        self.controlbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)

        """ PER and Tput Format """
        self.fformat = {}
        fcount = 0
        flabel = ["PER Format", "Tput Format"]
        foffset = [50, 47]
        for param in ['per', 'tput']:
            if param not in self.format:
                self.format[param] = MimoSelfAdaptation.FORMAT[fcount]
            box = wx.BoxSizer(wx.HORIZONTAL)
            self.make_label(flabel[fcount], box, foffset[fcount])
            self.fformat[param] = choicebox_field(self, box, \
                        callback=lambda *args: self.SetFormat(param, *args),  \
                        value=self.format[param],   \
                        choices=MimoSelfAdaptation.FORMAT)
            self.fformat[param].f.SetToolTipString("Select Plot Format")
            self.controlbox.Add(box, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)
            fcount += 1

        """ Database parameters """
        self.set_dbsize = lambda *args: None
        self.set_errdbsize = lambda *args: None
        self.dbsize, self.errdbsize = 200, 100
        if hasattr(self.phyrx, 'sa_dbsize'):
            self.dbsize = self.phyrx.sa_dbsize()
        if hasattr(self.phyrx, 'sa_errdbsize'):
            self.errdbsize = self.phyrx.sa_errdbsize()
        if hasattr(self.phyrx, 'set_sa_dbsize'):
            self.set_dbsize = self.phyrx.set_sa_dbsize
        if hasattr(self.phyrx, 'set_sa_errdbsize'):
            self.set_errdbsize = self.phyrx.set_sa_errdbsize
        self.controlbox.AddSpacer( (10,10) )
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        self.make_label("Database Size", hbox, 27)
        self.fdbsize = form.int_field(self, hbox, value=self.dbsize, \
                                      callback=self.SetDbSize)
        self.controlbox.Add(hbox, 0, wx.ALIGN_LEFT|wx.LEFT|wx.RIGHT, border=bspace)
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        self.make_label("Error Size", hbox, 57)
        self.ferrdbsize = form.int_field(self, hbox, value=self.errdbsize, \
                                      callback=self.SetErrDbSize)
        self.controlbox.Add(hbox, 0, wx.ALIGN_LEFT|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)
        self.AddParam('dbsize', self.SetDbSize)
        self.AddParam('errdbsize', self.SetErrDbSize)
        self.controlbox.AddSpacer( (10,10) )

        """ Reset, Load, and Save Database """
        self.load_database = lambda *args: None
        self.save_database = lambda *args: None
        if hasattr(self.phyrx, 'sa_load_database'):
            self.load_database = self.phyrx.sa_load_database
        if hasattr(self.phyrx, 'sa_save_database'):
            self.save_database = self.phyrx.sa_save_database
        id_reset, id_load, id_save = wx.NewId(), wx.NewId(), wx.NewId()
        self.reset_button = wx.Button(self, id_reset, "Reset")
        self.load_button  = wx.Button(self, id_load, "Load")
        self.save_button  = wx.Button(self, id_save, "Save")
        self.reset_button.SetToolTipString("Reset database from Database and Error Size parameters.")
        self.load_button.SetToolTipString( "Load database from a file.")
        self.save_button.SetToolTipString( "Save database to a file.")
        wx.EVT_BUTTON(self, id_reset, self.ResetDatabase)
        wx.EVT_BUTTON(self, id_load,  self.LoadDatabase)
        wx.EVT_BUTTON(self, id_save,  self.SaveDatabase)
        self.controlbox.Add(self.reset_button, 0, wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT, border=bspace)
        self.controlbox.Add(self.load_button,  0, wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT, border=bspace)
        self.controlbox.Add(self.save_button,  0, wx.ALIGN_CENTER|wx.BOTTOM|wx.LEFT|wx.RIGHT, border=bspace)

        self.AddParam('per', self.SetPER)
        self.AddParam('tput', self.SetThroughput)
        self.AddParam('addper', self.AddPER)
        self.AddParam('addtput', self.AddThroughput)
        self.AddParam('ratehist', self.SetRateHistogram)
        self.topbox.Add(self.controlbox, 0, wx.ALL, border=bspace)
        self.Fit()
        self.SetClientSize(self.topbox.GetSize())
        self.SetParam('window size', window_size)
示例#12
0
    def build_gui(self):
        self.myform = myform = form.form()

        # Baseband controls
        bb_sbox = wx.StaticBox(parent=self.panel, label="Baseband Modulation")
        bb_vbox = wx.StaticBoxSizer(bb_sbox, wx.VERTICAL) # Holds all baseband controls as unit

        # First row of baseband controls (modulation type)
        mod_hbox = wx.BoxSizer(wx.HORIZONTAL)
        mod_hbox.Add((10,0), 0, 0)
        myform['type'] = form.radiobox_field(
            parent=self.panel, label="Type", sizer=mod_hbox, value=None,
            callback=self.evt_set_waveform_type, weight=1, major_dimension=0,
            choices=usrp2_siggen.waveforms.values() )
        bb_vbox.Add((0,10), 0, 0)
        bb_vbox.Add(mod_hbox, 0, wx.EXPAND)

        # Second row of baseband controls (frequencies)
        bbf_hbox = wx.BoxSizer(wx.HORIZONTAL)
        bbf_hbox.Add((10,0), 0, 0)
        myform['w1freq'] = form.float_field(
            parent=self.panel, sizer=bbf_hbox, label="Frequency 1 (Hz)", weight=1,
            callback=myform.check_input_and_call(self.evt_set_freq1, self.evt_set_status_msg) )
        bbf_hbox.Add((10,0), 0, 0)
        myform['w2freq'] = form.float_field(
            parent=self.panel, sizer=bbf_hbox, label="Frequency 2 (Hz)", weight=1,
            callback=myform.check_input_and_call(self.evt_set_freq2, self.evt_set_status_msg) )
        bbf_hbox.Add((10,0), 0, 0)
        
        bb_vbox.Add((0,10), 0, 0)
        bb_vbox.Add(bbf_hbox, 0, wx.EXPAND)

        # Add baseband controls to top window sizer
        self.vbox.Add((0,10), 0, 0)
        self.vbox.Add(bb_vbox, 0, wx.EXPAND)

        # Frequency controls
        fc_sbox = wx.StaticBox(parent=self.panel, label="Center Frequency")
        fc_vbox = wx.StaticBoxSizer(fc_sbox, wx.VERTICAL) # Holds all frequency controls as unit

        # First row of frequency controls (center frequency)
        freq_hbox = wx.BoxSizer(wx.HORIZONTAL)
        freq_hbox.Add((10,0), 0, 0)
        myform['freq'] = form.float_field(
            parent=self.panel, sizer=freq_hbox, label=None, weight=1,
            callback=myform.check_input_and_call(self.evt_set_freq, self.evt_set_status_msg) )
        freq_hbox.Add((10,0), 0, 0)
        myform['freq_slider'] = form.quantized_slider_field(
            parent=self.panel, sizer=freq_hbox, label="Min-Max", weight=4,
            range = (self.min_freq, self.max_freq, self.freq_step),
            callback=self.evt_set_freq)
        freq_hbox.Add((10,0), 0, 0)

        fc_vbox.Add((10,0), 0, 0)
        fc_vbox.Add(freq_hbox, 0, wx.EXPAND)

        # Second row of frequency controls (results)
        tr_hbox = wx.BoxSizer(wx.HORIZONTAL)
        tr_hbox.Add((10,0), 0, 0)
        myform['analog'] = form.static_float_field(
            parent=self.panel, sizer=tr_hbox, label="Daughterboard: (Hz)", weight=1)
        tr_hbox.Add((10,0), 0, 0)
        myform['DDC'] = form.static_float_field(
            parent=self.panel, sizer=tr_hbox, label="USRP2 DDC (Hz)", weight=1)
        tr_hbox.Add((10,0), 0, 0)
        fc_vbox.Add(tr_hbox, 0, wx.EXPAND)

        # Add frequency controls to top window sizer
        self.vbox.Add((0,10), 0, 0)
        self.vbox.Add(fc_vbox, 0, wx.EXPAND)

        # Amplitude row
        amp_sbox = wx.StaticBox(parent=self.panel, label="Amplitude")
        amp_hbox = wx.StaticBoxSizer(amp_sbox, wx.HORIZONTAL)
        amp_hbox.Add((10,0), 0, 0)
        myform['amp'] = form.float_field(
            parent=self.panel, sizer=amp_hbox, label="Linear\n(0.0-1.0)", weight=1,
            callback=myform.check_input_and_call(self.evt_set_amplitude, self.evt_set_status_msg) )
        amp_hbox.Add((10,0), 0, 0)
        myform['amp_slider'] = form.quantized_slider_field(
            parent=self.panel, sizer=amp_hbox, label="dB Full Scale\n(-100-0)", weight=4,
            range=(-100.0, 0.0, 1), callback=self.evt_set_amplitude)
        amp_hbox.Add((10,0), 0, 0)
        self.vbox.Add((0,10), 0, 0)
        self.vbox.Add(amp_hbox, 0, wx.EXPAND)

        # Sample rate row
        sam_sbox = wx.StaticBox(parent=self.panel, label="Sample Rate")
        sam_hbox = wx.StaticBoxSizer(sam_sbox, wx.HORIZONTAL)
        sam_hbox.Add((10,0), 0, 0)
        myform['interp'] = form.int_field(
            parent=self.panel, sizer=sam_hbox, label="Interpolation", weight=1,
            callback=self.evt_set_interp)
        sam_hbox.Add((10,0), 0, 0)
        myform['eth'] = form.static_float_field(
            parent=self.panel, sizer=sam_hbox, label="Sample Rate (sps)", weight=1)
        sam_hbox.Add((10,0), 0, 0)
        myform['gbe'] = form.static_float_field(
            parent=self.panel, sizer=sam_hbox, label="GbE Rate (bits/sec)", weight=1)
        sam_hbox.Add((10,0), 0, 0)
        self.vbox.Add((0,10), 0, 0)
        self.vbox.Add(sam_hbox, 0, wx.EXPAND)

        # USRP2 row
        u2_sbox = wx.StaticBox(parent=self.panel, label="USRP2 Hardware")
        u2_hbox = wx.StaticBoxSizer(u2_sbox, wx.HORIZONTAL)
        u2_hbox.Add((10,0), 0, 0)
        myform['ifc'] = form.static_text_field(parent=self.panel, sizer=u2_hbox, 
                                               label="Interface", weight=2)
        u2_hbox.Add((10,0), 0, 0)
        myform['mac'] = form.static_text_field(parent=self.panel, sizer=u2_hbox, 
                                               label="MAC Address", weight=2)
        u2_hbox.Add((10,0), 0, 0)
        myform['dbid'] = form.static_text_field(parent=self.panel, sizer=u2_hbox, 
                                                label="Daughterboard ID", weight=1)
        self.vbox.Add((0,10), 0, 0)
        self.vbox.Add(u2_hbox, 0, wx.EXPAND)
        self.vbox.Add((0,20), 0, 0)