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)
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)
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)
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)
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)
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)
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()
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)
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)
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)
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)