diff options
author | Johnathan Corgan | 2011-03-14 20:07:36 -0700 |
---|---|---|
committer | Johnathan Corgan | 2011-03-14 20:07:36 -0700 |
commit | 22deb62a872413bdeff63e4fb565b4bcce2c6508 (patch) | |
tree | 79571572f1f130b5153019d70d31b2c868cf0b97 /grc | |
parent | f3d373492fe415ced2bbf0be3f8e6da66576fcdc (diff) | |
parent | 4d5096c8b084c5832256dc2cd8bb617ee93d94a4 (diff) | |
download | gnuradio-22deb62a872413bdeff63e4fb565b4bcce2c6508.tar.gz gnuradio-22deb62a872413bdeff63e4fb565b4bcce2c6508.tar.bz2 gnuradio-22deb62a872413bdeff63e4fb565b4bcce2c6508.zip |
Merge remote branch 'jblum/mergeme/qtgui/grc' into next
* jblum/mergeme/qtgui/grc: (27 commits)
qtgui: removed python directory that was added, never used
qtgui-grc: added suport in main template for theme icon
qtgui-grc: minor tweaks to the various things
qtgui-grc: added read-only thermo widget to range block
qtgui-grc: fix for list option working in chooser block
qtgui-grc: added check for pyqwt in config
grc: added function args to probe block and documentation
grc: rework the probe blocks and how they fit into grc
qtgui-grc: moved slider to range, added knob and gui tweaks
qtgui-grc: use a vboxlayout for the top_layout
qtgui-grc: made slider widget components (counter/slider) optional
qtgui-grc: add engineering notation to entry and label + other tweaks
qtgui-grc: enable start/stop control through qt widgets
qtgui-grc: rename the text entry and label blocks
grc-qtgui: creaded check box widget with qtgui, cleanup label code
grc-qtgui: added variable text box and static text widgets
grc-qtgui: pick correct signal overload for variable chooser
grc-qtgui: added radio button support, tweaks, more options
grc-qtgui: work on variable chooser block
grc: work on generator for gui flowgraphs to simplify generation
...
Diffstat (limited to 'grc')
34 files changed, 196 insertions, 2288 deletions
diff --git a/grc/blocks/Makefile.am b/grc/blocks/Makefile.am index 9b5bda298..6f7802169 100644 --- a/grc/blocks/Makefile.am +++ b/grc/blocks/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2008, 2009 Free Software Foundation, Inc. +# Copyright 2008-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -58,7 +58,6 @@ dist_ourdata_DATA = \ blks2_tcp_sink.xml \ blks2_tcp_source.xml \ blks2_valve.xml \ - blks2_variable_sink_x.xml \ blks2_wfm_rcv.xml \ blks2_wfm_rcv_pll.xml \ blks2_wfm_tx.xml \ @@ -156,6 +155,7 @@ dist_ourdata_DATA = \ gr_probe_avg_mag_sqrd_x.xml \ gr_probe_density_b.xml \ gr_probe_mpsk_snr_c.xml \ + gr_probe_signal_f.xml \ gr_pwr_squelch_xx.xml \ gr_quadrature_demod_cf.xml \ gr_rational_resampler_base_xxx.xml \ @@ -195,12 +195,10 @@ dist_ourdata_DATA = \ import.xml \ low_pass_filter.xml \ note.xml \ - notebook.xml \ options.xml \ pad_sink.xml \ pad_source.xml \ parameter.xml \ - probe_function.xml \ random_source_x.xml \ root_raised_cosine_filter.xml \ trellis_encoder_xx.xml \ @@ -211,20 +209,9 @@ dist_ourdata_DATA = \ trellis_viterbi_combined_xx.xml \ trellis_viterbi_x.xml \ variable.xml \ - variable_check_box.xml \ - variable_chooser.xml \ variable_config.xml \ - variable_slider.xml \ - variable_static_text.xml \ - variable_text_box.xml \ + variable_function_probe.xml \ virtual_sink.xml \ virtual_source.xml \ - wxgui_constellationsink2.xml \ - wxgui_fftsink2.xml \ - wxgui_histosink2.xml \ - wxgui_numbersink2.xml \ - wxgui_scopesink2.xml \ - wxgui_termsink.xml \ - wxgui_waterfallsink2.xml \ xmlrpc_client.xml \ xmlrpc_server.xml diff --git a/grc/blocks/blks2_variable_sink_x.xml b/grc/blocks/blks2_variable_sink_x.xml deleted file mode 100644 index 5709c9f76..000000000 --- a/grc/blocks/blks2_variable_sink_x.xml +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Variable Sink: Custom blks2 block -################################################### - --> -<block> - <name>Variable Sink</name> - <key>blks2_variable_sink_x</key> - <import>from grc_gnuradio import blks2 as grc_blks2</import> - <make>grc_blks2.variable_sink_$(type.fcn)( - vlen=$vlen, - decim=$decim, - callback=self.set_$(variable()), -)</make> - <callback>set_decim($decim)</callback> - <param> - <name>Type</name> - <key>type</key> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>fcn:c</opt> - </option> - <option> - <name>Float</name> - <key>float</key> - <opt>fcn:f</opt> - </option> - <option> - <name>Int</name> - <key>int</key> - <opt>fcn:i</opt> - </option> - <option> - <name>Short</name> - <key>short</key> - <opt>fcn:s</opt> - </option> - <option> - <name>Byte</name> - <key>byte</key> - <opt>fcn:b</opt> - </option> - </param> - <param> - <name>Variable</name> - <key>variable</key> - <value></value> - <type>string</type> - </param> - <param> - <name>Decimation</name> - <key>decim</key> - <value>1</value> - <type>int</type> - </param> - <param> - <name>Vec Length</name> - <key>vlen</key> - <value>1</value> - <type>int</type> - </param> - <check>$vlen > 0</check> - <sink> - <name>in</name> - <type>$type</type> - <vlen>$vlen</vlen> - </sink> - <doc> -Read samples from the input stream and \ -write one in every decimation samples to the variable. - -The variable must be the id of an existing variable block. - </doc> -</block> diff --git a/grc/blocks/block_tree.xml b/grc/blocks/block_tree.xml index 466fb05ea..549ffbdbf 100644 --- a/grc/blocks/block_tree.xml +++ b/grc/blocks/block_tree.xml @@ -25,7 +25,6 @@ </cat> <cat> <name>Sinks</name> - <block>blks2_variable_sink_x</block> <block>gr_vector_sink_x</block> <block>gr_null_sink</block> <block>gr_file_sink</block> @@ -37,16 +36,6 @@ <block>virtual_sink</block> </cat> <cat> - <name>Graphical Sinks</name> - <block>wxgui_numbersink2</block> - <block>wxgui_scopesink2</block> - <block>wxgui_fftsink2</block> - <block>wxgui_constellationsink2</block> - <block>wxgui_waterfallsink2</block> - <block>wxgui_histosink2</block> - <block>wxgui_termsink</block> - </cat> - <cat> <name>Operators</name> <block>gr_add_xx</block> <block>gr_sub_xx</block> @@ -136,7 +125,7 @@ <block>gr_pll_freqdet_cf</block> <block>gr_pll_refout_cc</block> - <block>gr_fll_band_edge_cc</block> + <block>gr_fll_band_edge_cc</block> <block>gr_correlate_access_code_bb</block> <block>gr_pn_correlator_cc</block> @@ -260,7 +249,7 @@ <block>gr_additive_scrambler_bb</block> </cat> <cat> - <name>Vocoders</name> + <name>Vocoders</name> <block>blks2_cvsd_encode</block> <block>blks2_cvsd_decode</block> </cat> @@ -269,17 +258,13 @@ <block>gr_probe_avg_mag_sqrd_x</block> <block>gr_probe_density_b</block> <block>gr_probe_mpsk_snr_c</block> - <block>probe_function</block> + <block>gr_probe_signal_f</block> </cat> <cat> <name>Variables</name> <block>variable</block> - <block>variable_slider</block> - <block>variable_chooser</block> - <block>variable_check_box</block> - <block>variable_text_box</block> - <block>variable_static_text</block> <block>variable_config</block> + <block>variable_function_probe</block> <block>parameter</block> </cat> <cat> @@ -304,7 +289,5 @@ <block>xmlrpc_server</block> <block>xmlrpc_client</block> - - <block>notebook</block> </cat> </cat> diff --git a/grc/blocks/gr_probe_avg_mag_sqrd_x.xml b/grc/blocks/gr_probe_avg_mag_sqrd_x.xml index eb855956a..6bf706ae1 100644 --- a/grc/blocks/gr_probe_avg_mag_sqrd_x.xml +++ b/grc/blocks/gr_probe_avg_mag_sqrd_x.xml @@ -7,15 +7,10 @@ <block> <name>Probe Avg Mag^2</name> <key>gr_probe_avg_mag_sqrd_x</key> - <import>from grc_gnuradio import blks2 as grc_blks2</import> - <make>grc_blks2.probe_avg_mag_sqrd_$(type)( - threshold=$threshold, - alpha=$alpha, - probe_rate=$probe_rate, -)</make> + <import>from gnuradio import gr</import> + <make>gr.probe_avg_mag_sqrd_$(type)($threshold, $alpha)</make> <callback>set_alpha($alpha)</callback> <callback>set_threshold($threshold)</callback> - <callback>set_probe_rate($probe_rate)</callback> <param> <name>Type</name> <key>type</key> @@ -43,18 +38,13 @@ <value>1</value> <type>real</type> </param> - <param> - <name>Probe Rate</name> - <key>probe_rate</key> - <value>10</value> - <type>real</type> - </param> <sink> <name>in</name> <type>$type.input</type> </sink> - <source> - <name>out</name> - <type>float</type> - </source> + <doc> +Available functions to probe: level() + +Use with the function probe block. + </doc> </block> diff --git a/grc/blocks/gr_probe_density_b.xml b/grc/blocks/gr_probe_density_b.xml index 74d3b0a2b..3a91256aa 100644 --- a/grc/blocks/gr_probe_density_b.xml +++ b/grc/blocks/gr_probe_density_b.xml @@ -7,13 +7,9 @@ <block> <name>Probe Density</name> <key>gr_probe_density_b</key> - <import>from grc_gnuradio import blks2 as grc_blks2</import> - <make>grc_blks2.probe_density_b( - alpha=$alpha, - probe_rate=$probe_rate, -)</make> + <import>from gnuradio import gr</import> + <make>gr.probe_density_b($alpha)</make> <callback>set_alpha($alpha)</callback> - <callback>set_probe_rate($probe_rate)</callback> <param> <name>Alpha</name> <key>alpha</key> @@ -30,8 +26,9 @@ <name>in</name> <type>byte</type> </sink> - <source> - <name>out</name> - <type>float</type> - </source> + <doc> +Available functions to probe: density() + +Use with the function probe block. + </doc> </block> diff --git a/grc/blocks/gr_probe_mpsk_snr_c.xml b/grc/blocks/gr_probe_mpsk_snr_c.xml index 7f562d2f3..5687e867d 100644 --- a/grc/blocks/gr_probe_mpsk_snr_c.xml +++ b/grc/blocks/gr_probe_mpsk_snr_c.xml @@ -7,49 +7,22 @@ <block> <name>Probe MPSK SNR</name> <key>gr_probe_mpsk_snr_c</key> - <import>from grc_gnuradio import blks2 as grc_blks2</import> - <make>grc_blks2.probe_mpsk_snr_c( - type='$type', - alpha=$alpha, - probe_rate=$probe_rate, -)</make> + <import>from gnuradio import gr</import> + <make>gr.probe_mpsk_snr_c($alpha)</make> <callback>set_alpha($alpha)</callback> - <callback>set_probe_rate($probe_rate)</callback> - <param> - <name>Type</name> - <key>type</key> - <type>enum</type> - <option> - <name>SNR</name> - <key>snr</key> - </option> - <option> - <name>Signal Mean</name> - <key>signal_mean</key> - </option> - <option> - <name>Noise Variance</name> - <key>noise_variance</key> - </option> - </param> <param> <name>Alpha</name> <key>alpha</key> <value>1</value> <type>real</type> </param> - <param> - <name>Probe Rate</name> - <key>probe_rate</key> - <value>10</value> - <type>real</type> - </param> <sink> <name>in</name> <type>complex</type> </sink> - <source> - <name>out</name> - <type>float</type> - </source> + <doc> +Available functions to probe: signal_mean(), noise_variance() + +Use with the function probe block. + </doc> </block> diff --git a/grc/blocks/gr_probe_signal_f.xml b/grc/blocks/gr_probe_signal_f.xml new file mode 100644 index 000000000..5c38e816f --- /dev/null +++ b/grc/blocks/gr_probe_signal_f.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<!-- +################################################### +##Probe Signal +################################################### + --> +<block> + <name>Probe Signal</name> + <key>gr_probe_signal_f</key> + <import>from gnuradio import gr</import> + <make>gr.probe_signal_f()</make> + <sink> + <name>in</name> + <type>float</type> + </sink> + <doc> +Available functions to probe: level() + +Use with the function probe block. + </doc> +</block> diff --git a/grc/blocks/notebook.xml b/grc/blocks/notebook.xml deleted file mode 100644 index d41db9e2d..000000000 --- a/grc/blocks/notebook.xml +++ /dev/null @@ -1,69 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##WX GUI Notebook -################################################### - --> -<block> - <name>Notebook</name> - <key>notebook</key> - <import>from grc_gnuradio import wxgui as grc_wxgui</import> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -self.$(id) = wx.Notebook($(parent).GetWin(), style=$style) -#for $label in $labels() -self.$(id).AddPage(grc_wxgui.Panel(self.$(id)), "$label") -#end for -#if not $grid_pos() -$(parent).Add(self.$(id)) -#else -$(parent).GridAdd(self.$(id), $(', '.join(map(str, $grid_pos())))) -#end if</make> - <param> - <name>Tab Orientation</name> - <key>style</key> - <value>wx.NB_TOP</value> - <type>enum</type> - <option> - <name>Top</name> - <key>wx.NB_TOP</key> - </option> - <option> - <name>Right</name> - <key>wx.NB_RIGHT</key> - </option> - <option> - <name>Bottom</name> - <key>wx.NB_BOTTOM</key> - </option> - <option> - <name>Left</name> - <key>wx.NB_LEFT</key> - </option> - </param> - <param> - <name>Labels</name> - <key>labels</key> - <value>['tab1', 'tab2', 'tab3']</value> - <type>raw</type> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>isinstance($labels, (list, tuple))</check> - <check>all(map(lambda x: isinstance(x, str), $labels))</check> - <check>len($labels) > 0</check> - <doc> -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/options.xml b/grc/blocks/options.xml index 4d0dd2899..b27ea900c 100644 --- a/grc/blocks/options.xml +++ b/grc/blocks/options.xml @@ -15,6 +15,10 @@ from grc_gnuradio import wxgui as grc_wxgui import wx #end if +#if $generate_options() == 'qt_gui' +from PyQt4 import Qt +import sys +#end if #if $generate_options() != 'hb' from optparse import OptionParser from gnuradio.eng_option import eng_option @@ -56,12 +60,15 @@ else: self.stop(); self.wait()</callback> <key>generate_options</key> <value>wx_gui</value> <type>enum</type> - <hide>#if $generate_options() == 'wx_gui' then 'part' else 'none'#</hide> <option> <name>WX GUI</name> <key>wx_gui</key> </option> <option> + <name>QT GUI</name> + <key>qt_gui</key> + </option> + <option> <name>No GUI</name> <key>no_gui</key> </option> @@ -98,7 +105,7 @@ else: self.stop(); self.wait()</callback> <value>True</value> <type>bool</type> <hide> -#if $generate_options() == 'wx_gui' +#if $generate_options() in ('qt_gui', 'wx_gui') #if $run() part #else diff --git a/grc/blocks/probe_function.xml b/grc/blocks/probe_function.xml deleted file mode 100644 index ac0b3dcde..000000000 --- a/grc/blocks/probe_function.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Probe Function -################################################### - --> -<block> - <name>Probe Function</name> - <key>probe_function</key> - <import>from grc_gnuradio import blks2 as grc_blks2</import> - <make>grc_blks2.probe_function( - probe_callback=self.$(block_id()).$(function_name()), - probe_rate=$probe_rate, -)</make> - <callback>set_probe_rate($probe_rate)</callback> - <param> - <name>Block ID</name> - <key>block_id</key> - <value>my_block_0</value> - <type>string</type> - </param> - <param> - <name>Function Name</name> - <key>function_name</key> - <value>get_number</value> - <type>string</type> - </param> - <param> - <name>Probe Rate</name> - <key>probe_rate</key> - <value>10</value> - <type>real</type> - </param> - <source> - <name>out</name> - <type>float</type> - </source> - <doc> -Polls a function of an arbitrary block and writes the value to the output port. \ -The block id is the id of another block in the flow graph. \ -The function name is the name of a function in the said block. \ -The function should take no arguments and return a floating point or integer number. - </doc> -</block> diff --git a/grc/blocks/variable_check_box.xml b/grc/blocks/variable_check_box.xml deleted file mode 100644 index a703703c7..000000000 --- a/grc/blocks/variable_check_box.xml +++ /dev/null @@ -1,84 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Variable Check Box: -## a gui check box form -################################################### - --> -<block> - <name>Variable Check Box</name> - <key>variable_check_box</key> - <import>from gnuradio.wxgui import forms</import> - <var_make>self.$(id) = $(id) = $value</var_make> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -#set $win = 'self._%s_check_box'%$id -$win = forms.check_box( - parent=$(parent).GetWin(), - value=self.$id, - callback=self.set_$(id), - #if $label() - label=$label, - #else - label='$id', - #end if - true=$true, - false=$false, -) -#if not $grid_pos() -$(parent).Add($win) -#else -$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>self.set_$(id)($value)</callback> - <callback>self._$(id)_check_box.set_value($id)</callback> - <param> - <name>Label</name> - <key>label</key> - <value></value> - <type>string</type> - <hide>#if $label() then 'none' else 'part'#</hide> - </param> - <param> - <name>Default Value</name> - <key>value</key> - <value>True</value> - <type>raw</type> - </param> - <param> - <name>True</name> - <key>true</key> - <value>True</value> - <type>raw</type> - </param> - <param> - <name>False</name> - <key>false</key> - <value>False</value> - <type>raw</type> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>$value in ($true, $false)</check> - <doc> -This block creates a variable with a check box form. \ -Leave the label blank to use the variable id as the label. - -A check box form can switch between two states; \ -the default being True and False. \ -Override True and False to use alternative states. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/variable_chooser.xml b/grc/blocks/variable_chooser.xml deleted file mode 100644 index ee41f26db..000000000 --- a/grc/blocks/variable_chooser.xml +++ /dev/null @@ -1,122 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Variable Chooser: -## a gui form with enumerated choices -## radio buttons, drop down, or button -################################################### - --> -<block> - <name>Variable Chooser</name> - <key>variable_chooser</key> - <import>from gnuradio.wxgui import forms</import> - <var_make>self.$(id) = $(id) = $value</var_make> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -#set $win = 'self._%s_chooser'%$id -$win = forms.$(type)( - parent=$(parent).GetWin(), - value=self.$id, - callback=self.set_$(id), - #if $label() - label=$label, - #else - label='$id', - #end if - choices=$choices, - labels=$labels, -#if $type() == 'radio_buttons' - style=$style, -#end if -) -#if not $grid_pos() -$(parent).Add($win) -#else -$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>self.set_$(id)($value)</callback> - <callback>self._$(id)_chooser.set_value($id)</callback> - <param> - <name>Label</name> - <key>label</key> - <value></value> - <type>string</type> - <hide>#if $label() then 'none' else 'part'#</hide> - </param> - <param> - <name>Default Value</name> - <key>value</key> - <value>1</value> - <type>raw</type> - </param> - <param> - <name>Choices</name> - <key>choices</key> - <value>[1, 2, 3]</value> - <type>raw</type> - </param> - <param> - <name>Labels</name> - <key>labels</key> - <value>[]</value> - <type>raw</type> - </param> - <param> - <name>Type</name> - <key>type</key> - <value>drop_down</value> - <type>enum</type> - <option> - <name>Drop Down</name> - <key>drop_down</key> - </option> - <option> - <name>Radio Buttons</name> - <key>radio_buttons</key> - </option> - <option> - <name>Button</name> - <key>button</key> - </option> - </param> - <param> - <name>Style</name> - <key>style</key> - <value>wx.RA_HORIZONTAL</value> - <type>enum</type> - <hide>#if $type() == 'radio_buttons' then 'part' else 'all'#</hide> - <option> - <name>Horizontal</name> - <key>wx.RA_HORIZONTAL</key> - </option> - <option> - <name>Vertical</name> - <key>wx.RA_VERTICAL</key> - </option> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>$value in $choices</check> - <check>not $labels or len($labels) == len($choices)</check> - <doc> -This block creates a variable with a drop down, radio buttons, or a button. \ -Leave the label blank to use the variable id as the label. \ -The value index is the index of a particular choice, \ -which defines the default choice when the flow graph starts. \ -The choices must be a list of possible values. \ -Leave labels empty to use the choices as the labels. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/variable_function_probe.xml b/grc/blocks/variable_function_probe.xml new file mode 100644 index 000000000..269966c70 --- /dev/null +++ b/grc/blocks/variable_function_probe.xml @@ -0,0 +1,70 @@ +<?xml version="1.0"?> +<!-- +################################################### +##Variable function probe +################################################### + --> +<block> + <name>Function Probe</name> + <key>variable_function_probe</key> + <import>import time</import> + <import>import threading</import> + <var_make>self.$(id) = $(id) = $value</var_make> + <make>#slurp +def _$(id)_probe(): + while True: + val = self.$(block_id()).$(function_name())($(function_args())) + try: self.set_$(id)(val) + except AttributeError, e: pass + time.sleep(1.0/($poll_rate)) +_$(id)_thread = threading.Thread(target=_$(id)_probe) +_$(id)_thread.daemon = True +_$(id)_thread.start()</make> + <callback>self.set_$(id)($value)</callback> + <param> + <name>Value</name> + <key>value</key> + <value>0</value> + <type>raw</type> + </param> + <param> + <name>Block ID</name> + <key>block_id</key> + <value>my_block_0</value> + <type>string</type> + </param> + <param> + <name>Function Name</name> + <key>function_name</key> + <value>get_number</value> + <type>string</type> + </param> + <param> + <name>Function Args</name> + <key>function_args</key> + <value></value> + <type>string</type> + <hide>#if $function_args() then 'none' else 'part'#</hide> + </param> + <param> + <name>Poll Rate (Hz)</name> + <key>poll_rate</key> + <value>10</value> + <type>real</type> + </param> + <doc> +Periodically probe a function and set its value to this variable. + +Set the values for block ID, function name, and function args appropriately: \ +Block ID should be the ID of another block in this flow graph. \ +Function name should be the name of a class method on that block. \ +Function args are the parameters passed into that function. \ +For a function with no arguments, leave function args blank. \ +When passing a string for the function arguments, quote the string literal: '"arg"'. + +The values will used literally, and generated into the following form: +self.block_id.function_name(function_args) + +To poll a stream for a level, use this with the probe signal block. + </doc> +</block> diff --git a/grc/blocks/variable_slider.xml b/grc/blocks/variable_slider.xml deleted file mode 100644 index c13d20856..000000000 --- a/grc/blocks/variable_slider.xml +++ /dev/null @@ -1,138 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Variable Slider: -## a combined slider and text box form -################################################### - --> -<block> - <name>Variable Slider</name> - <key>variable_slider</key> - <import>from gnuradio.wxgui import forms</import> - <var_make>self.$(id) = $(id) = $value</var_make> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -#set $win = '_%s_sizer'%$id -$win = wx.BoxSizer(wx.VERTICAL) -self._$(id)_text_box = forms.text_box( - parent=$(parent).GetWin(), - sizer=$win, - value=self.$id, - callback=self.set_$(id), - #if $label() - label=$label, - #else - label='$id', - #end if - converter=forms.$(converver)(), - proportion=0, -) -self._$(id)_slider = forms.slider( - parent=$(parent).GetWin(), - sizer=$win, - value=self.$id, - callback=self.set_$(id), - minimum=$min, - maximum=$max, - num_steps=$num_steps, - style=$style, - cast=$(converver.slider_cast), - proportion=1, -) -#if not $grid_pos() -$(parent).Add($win) -#else -$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>self.set_$(id)($value)</callback> - <callback>self._$(id)_slider.set_value($id)</callback> - <callback>self._$(id)_text_box.set_value($id)</callback> - <param> - <name>Label</name> - <key>label</key> - <value></value> - <type>string</type> - <hide>#if $label() then 'none' else 'part'#</hide> - </param> - <param> - <name>Default Value</name> - <key>value</key> - <value>50</value> - <type>real</type> - </param> - <param> - <name>Minimum</name> - <key>min</key> - <value>0</value> - <type>real</type> - </param> - <param> - <name>Maximum</name> - <key>max</key> - <value>100</value> - <type>real</type> - </param> - <param> - <name>Num Steps</name> - <key>num_steps</key> - <value>100</value> - <type>int</type> - <hide>part</hide> - </param> - <param> - <name>Style</name> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> - <type>enum</type> - <hide>part</hide> - <option> - <name>Horizontal</name> - <key>wx.SL_HORIZONTAL</key> - </option> - <option> - <name>Vertical</name> - <key>wx.SL_VERTICAL</key> - </option> - </param> - <param> - <name>Converter</name> - <key>converver</key> - <value>float_converter</value> - <type>enum</type> - <option> - <name>Float</name> - <key>float_converter</key> - <opt>slider_cast:float</opt> - </option> - <option> - <name>Integer</name> - <key>int_converter</key> - <opt>slider_cast:int</opt> - </option> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>$min <= $value <= $max</check> - <check>$min < $max</check> - <check>0 < $num_steps <= 1000</check> - <doc> -This block creates a variable with a slider. \ -Leave the label blank to use the variable id as the label. \ -The value must be a real number. \ -The value must be between the minimum and the maximum. \ -The number of steps must be between 0 and 1000. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/variable_static_text.xml b/grc/blocks/variable_static_text.xml deleted file mode 100644 index c866b998d..000000000 --- a/grc/blocks/variable_static_text.xml +++ /dev/null @@ -1,97 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Variable Static Text: -## a gui static text form -################################################### - --> -<block> - <name>Variable Static Text</name> - <key>variable_static_text</key> - <import>from gnuradio.wxgui import forms</import> - <var_make>self.$(id) = $(id) = $value</var_make> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -#set $win = 'self._%s_static_text'%$id -$win = forms.static_text( - parent=$(parent).GetWin(), - value=self.$id, - callback=self.set_$(id), - #if $label() - label=$label, - #else - label='$id', - #end if - #if $formatter() - converter=forms.$(converver)(formatter=$formatter), - #else - converter=forms.$(converver)(), - #end if -) -#if not $grid_pos() -$(parent).Add($win) -#else -$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>self.set_$(id)($value)</callback> - <callback>self._$(id)_static_text.set_value($id)</callback> - <param> - <name>Label</name> - <key>label</key> - <value></value> - <type>string</type> - <hide>#if $label() then 'none' else 'part'#</hide> - </param> - <param> - <name>Default Value</name> - <key>value</key> - <value>0</value> - <type>raw</type> - </param> - <param> - <name>Converter</name> - <key>converver</key> - <value>float_converter</value> - <type>enum</type> - <option> - <name>Float</name> - <key>float_converter</key> - </option> - <option> - <name>Integer</name> - <key>int_converter</key> - </option> - <option> - <name>String</name> - <key>str_converter</key> - </option> - </param> - <param> - <name>Formatter</name> - <key>formatter</key> - <value>None</value> - <type>raw</type> - <hide>part</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <doc> -This block creates a variable with a static text form. \ -Leave the label blank to use the variable id as the label. - -Format should be a function/lambda that converts a value into a string or None for the default formatter. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/variable_text_box.xml b/grc/blocks/variable_text_box.xml deleted file mode 100644 index 1b4b4355e..000000000 --- a/grc/blocks/variable_text_box.xml +++ /dev/null @@ -1,101 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Variable Text Box: -## a gui text box form -################################################### - --> -<block> - <name>Variable Text Box</name> - <key>variable_text_box</key> - <import>from gnuradio.wxgui import forms</import> - <var_make>self.$(id) = $(id) = $value</var_make> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -#set $win = 'self._%s_text_box'%$id -$win = forms.text_box( - parent=$(parent).GetWin(), - value=self.$id, - callback=self.set_$(id), - #if $label() - label=$label, - #else - label='$id', - #end if - #if $formatter() - converter=forms.$(converver)(formatter=$formatter), - #else - converter=forms.$(converver)(), - #end if -) -#if not $grid_pos() -$(parent).Add($win) -#else -$(parent).GridAdd($win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>self.set_$(id)($value)</callback> - <callback>self._$(id)_text_box.set_value($id)</callback> - <param> - <name>Label</name> - <key>label</key> - <value></value> - <type>string</type> - <hide>#if $label() then 'none' else 'part'#</hide> - </param> - <param> - <name>Default Value</name> - <key>value</key> - <value>0</value> - <type>raw</type> - </param> - <param> - <name>Converter</name> - <key>converver</key> - <value>float_converter</value> - <type>enum</type> - <option> - <name>Float</name> - <key>float_converter</key> - </option> - <option> - <name>Integer</name> - <key>int_converter</key> - </option> - <option> - <name>String</name> - <key>str_converter</key> - </option> - <option> - <name>Evaluate</name> - <key>eval_converter</key> - </option> - </param> - <param> - <name>Formatter</name> - <key>formatter</key> - <value>None</value> - <type>raw</type> - <hide>part</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <doc> -This block creates a variable with a text box. \ -Leave the label blank to use the variable id as the label. - -Format should be a function/lambda that converts a value into a string or None for the default formatter. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/wxgui_constellationsink2.xml b/grc/blocks/wxgui_constellationsink2.xml deleted file mode 100644 index 598b55064..000000000 --- a/grc/blocks/wxgui_constellationsink2.xml +++ /dev/null @@ -1,139 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Constellation Sink -################################################### - --> -<block> - <name>Constellation Sink</name> - <key>wxgui_constellationsink2</key> - <import>from gnuradio.wxgui import constsink_gl</import> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -constsink_gl.const_sink_c( - $(parent).GetWin(), - title=$title, - sample_rate=$samp_rate, - frame_rate=$frame_rate, - const_size=$const_size, - M=$M, - theta=$theta, - alpha=$alpha, - fmax=$fmax, - mu=$mu, - gain_mu=$gain_mu, - symbol_rate=$symbol_rate, - omega_limit=$omega_limit, -#if $win_size() - size=$win_size, -#end if -) -#if not $grid_pos() -$(parent).Add(self.$(id).win) -#else -$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>set_sample_rate($samp_rate)</callback> - <param> - <name>Title</name> - <key>title</key> - <value>Constellation Plot</value> - <type>string</type> - </param> - <param> - <name>Sample Rate</name> - <key>samp_rate</key> - <value>samp_rate</value> - <type>real</type> - </param> - <param> - <name>Frame Rate</name> - <key>frame_rate</key> - <value>5</value> - <type>real</type> - </param> - <param> - <name>Constellation Size</name> - <key>const_size</key> - <value>2048</value> - <type>real</type> - </param> - <param> - <name>M</name> - <key>M</key> - <value>4</value> - <type>int</type> - </param> - <param> - <name>Theta</name> - <key>theta</key> - <value>0</value> - <type>real</type> - </param> - <param> - <name>Alpha</name> - <key>alpha</key> - <value>0.005</value> - <type>real</type> - </param> - <param> - <name>Max Freq</name> - <key>fmax</key> - <value>0.06</value> - <type>real</type> - </param> - <param> - <name>Mu</name> - <key>mu</key> - <value>0.5</value> - <type>real</type> - </param> - <param> - <name>Gain Mu</name> - <key>gain_mu</key> - <value>0.005</value> - <type>real</type> - </param> - <param> - <name>Symbol Rate</name> - <key>symbol_rate</key> - <value>samp_rate/4.</value> - <type>real</type> - </param> - <param> - <name>Omega Limit</name> - <key>omega_limit</key> - <value>0.005</value> - <type>real</type> - </param> - <param> - <name>Window Size</name> - <key>win_size</key> - <value></value> - <type>int_vector</type> - <hide>#if $win_size() then 'none' else 'part'#</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>not $win_size or len($win_size) == 2</check> - <sink> - <name>in</name> - <type>complex</type> - </sink> - <doc> -Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/wxgui_fftsink2.xml b/grc/blocks/wxgui_fftsink2.xml deleted file mode 100644 index 8df8f90d0..000000000 --- a/grc/blocks/wxgui_fftsink2.xml +++ /dev/null @@ -1,232 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##FFT Sink -################################################### - --> -<block> - <name>FFT Sink</name> - <key>wxgui_fftsink2</key> - <import>from gnuradio import window</import> - <import>from gnuradio.wxgui import fftsink2</import> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -fftsink2.$(type.fcn)( - $(parent).GetWin(), - baseband_freq=$baseband_freq, - y_per_div=$y_per_div, - y_divs=$y_divs, - ref_level=$ref_level, - ref_scale=$ref_scale, - sample_rate=$samp_rate, - fft_size=$fft_size, - fft_rate=$fft_rate, - average=$average, - avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#, - title=$title, - peak_hold=$peak_hold, -#if $win() - win=$win, -#end if -#if $win_size() - size=$win_size, -#end if -) -#if not $grid_pos() -$(parent).Add(self.$(id).win) -#else -$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>set_baseband_freq($baseband_freq)</callback> - <callback>set_sample_rate($samp_rate)</callback> - <param> - <name>Type</name> - <key>type</key> - <value>complex</value> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>fcn:fft_sink_c</opt> - </option> - <option> - <name>Float</name> - <key>float</key> - <opt>fcn:fft_sink_f</opt> - </option> - </param> - <param> - <name>Title</name> - <key>title</key> - <value>FFT Plot</value> - <type>string</type> - </param> - <param> - <name>Sample Rate</name> - <key>samp_rate</key> - <value>samp_rate</value> - <type>real</type> - </param> - <param> - <name>Baseband Freq</name> - <key>baseband_freq</key> - <value>0</value> - <type>real</type> - </param> - <param> - <name>Y per Div</name> - <key>y_per_div</key> - <value>10</value> - <type>enum</type> - <option> - <name>1 dB</name> - <key>1</key> - </option> - <option> - <name>2 dB</name> - <key>2</key> - </option> - <option> - <name>5 dB</name> - <key>5</key> - </option> - <option> - <name>10 dB</name> - <key>10</key> - </option> - <option> - <name>20 dB</name> - <key>20</key> - </option> - </param> - <param> - <name>Y Divs</name> - <key>y_divs</key> - <value>10</value> - <type>int</type> - </param> - <param> - <name>Ref Level (dB)</name> - <key>ref_level</key> - <value>50</value> - <type>real</type> - </param> - <param> - <name>Ref Scale (p2p)</name> - <key>ref_scale</key> - <value>2.0</value> - <type>real</type> - </param> - <param> - <name>FFT Size</name> - <key>fft_size</key> - <value>1024</value> - <type>int</type> - </param> - <param> - <name>Refresh Rate</name> - <key>fft_rate</key> - <value>30</value> - <type>int</type> - </param> - <param> - <name>Peak Hold</name> - <key>peak_hold</key> - <value>False</value> - <type>enum</type> - <hide>#if $peak_hold() == 'True' then 'none' else 'part'#</hide> - <option> - <name>On</name> - <key>True</key> - </option> - <option> - <name>Off</name> - <key>False</key> - </option> - </param> - <param> - <name>Average</name> - <key>average</key> - <value>False</value> - <type>enum</type> - <hide>part</hide> - <option> - <name>On</name> - <key>True</key> - </option> - <option> - <name>Off</name> - <key>False</key> - </option> - </param> - <param> - <name>Average Alpha</name> - <key>avg_alpha</key> - <value>0</value> - <type>real</type> - <hide>#if $average() == 'True' then 'none' else 'all'#</hide> - </param> - <param> - <name>Window</name> - <key>win</key> - <value>None</value> - <type>raw</type> - <hide>#if $win() is None then 'part' else 'none'#</hide> - <option> - <name>Automatic</name> - <key>None</key> - </option> - <option> - <name>Blackman-Harris</name> - <key>window.blackmanharris</key> - </option> - <option> - <name>Hamming</name> - <key>window.hamming</key> - </option> - <option> - <name>Hanning</name> - <key>window.hanning</key> - </option> - <option> - <name>Rectangular</name> - <key>window.rectangular</key> - </option> - <option> - <name>Flattop</name> - <key>window.flattop</key> - </option> - </param> - <param> - <name>Window Size</name> - <key>win_size</key> - <value></value> - <type>int_vector</type> - <hide>#if $win_size() then 'none' else 'part'#</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>not $win_size or len($win_size) == 2</check> - <sink> - <name>in</name> - <type>$type</type> - </sink> - <doc> -Set Average Alpha to 0 for automatic setting. - -Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/wxgui_histosink2.xml b/grc/blocks/wxgui_histosink2.xml deleted file mode 100644 index 9edf9650d..000000000 --- a/grc/blocks/wxgui_histosink2.xml +++ /dev/null @@ -1,77 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Histogram Sink -################################################### - --> -<block> - <name>Histo Sink</name> - <key>wxgui_histosink2</key> - <import>from gnuradio.wxgui import histosink_gl</import> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -histosink_gl.histo_sink_f( - $(parent).GetWin(), - title=$title, - num_bins=$num_bins, - frame_size=$frame_size, -#if $win_size() - size=$win_size, -#end if -) -#if not $grid_pos() -$(parent).Add(self.$(id).win) -#else -$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>set_num_bins($num_bins)</callback> - <callback>set_frame_size($frame_size)</callback> - <param> - <name>Title</name> - <key>title</key> - <value>Histogram Plot</value> - <type>string</type> - </param> - <param> - <name>Num Bins</name> - <key>num_bins</key> - <value>27</value> - <type>int</type> - </param> - <param> - <name>Frame Size</name> - <key>frame_size</key> - <value>1000</value> - <type>int</type> - </param> - <param> - <name>Window Size</name> - <key>win_size</key> - <value></value> - <type>int_vector</type> - <hide>#if $win_size() then 'none' else 'part'#</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>not $win_size or len($win_size) == 2</check> - <sink> - <name>in</name> - <type>float</type> - </sink> - <doc> -Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/wxgui_numbersink2.xml b/grc/blocks/wxgui_numbersink2.xml deleted file mode 100644 index ad93dec08..000000000 --- a/grc/blocks/wxgui_numbersink2.xml +++ /dev/null @@ -1,192 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Number Sink -################################################### - --> -<block> - <name>Number Sink</name> - <key>wxgui_numbersink2</key> - <import>from gnuradio.wxgui import numbersink2</import> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -numbersink2.$(type.fcn)( - $(parent).GetWin(), - unit=$units, - minval=$min_value, - maxval=$max_value, - factor=$factor, - decimal_places=$decimal_places, - ref_level=$ref_level, - sample_rate=$samp_rate, - number_rate=$number_rate, - average=$average, - avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#, - label=$title, - peak_hold=$peak_hold, - show_gauge=$show_gauge, -#if $win_size() - size=$win_size, -#end if -) -#if not $grid_pos() -$(parent).Add(self.$(id).win) -#else -$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <param> - <name>Type</name> - <key>type</key> - <value>complex</value> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>fcn:number_sink_c</opt> - </option> - <option> - <name>Float</name> - <key>float</key> - <opt>fcn:number_sink_f</opt> - </option> - </param> - <param> - <name>Title</name> - <key>title</key> - <value>Number Plot</value> - <type>string</type> - </param> - <param> - <name>Units</name> - <key>units</key> - <value>Units</value> - <type>string</type> - </param> - <param> - <name>Sample Rate</name> - <key>samp_rate</key> - <value>samp_rate</value> - <type>real</type> - </param> - <param> - <name>Min Value</name> - <key>min_value</key> - <value>-100</value> - <type>real</type> - </param> - <param> - <name>Max Value</name> - <key>max_value</key> - <value>100</value> - <type>real</type> - </param> - <param> - <name>Factor</name> - <key>factor</key> - <value>1.0</value> - <type>real</type> - </param> - <param> - <name>Decimal Places</name> - <key>decimal_places</key> - <value>10</value> - <type>int</type> - </param> - <param> - <name>Reference Level</name> - <key>ref_level</key> - <value>0</value> - <type>real</type> - </param> - <param> - <name>Number Rate</name> - <key>number_rate</key> - <value>15</value> - <type>int</type> - </param> - <param> - <name>Peak Hold</name> - <key>peak_hold</key> - <value>False</value> - <type>enum</type> - <hide>#if $peak_hold() == 'True' then 'none' else 'part'#</hide> - <option> - <name>On</name> - <key>True</key> - </option> - <option> - <name>Off</name> - <key>False</key> - </option> - </param> - <param> - <name>Average</name> - <key>average</key> - <value>False</value> - <type>enum</type> - <hide>part</hide> - <option> - <name>On</name> - <key>True</key> - </option> - <option> - <name>Off</name> - <key>False</key> - </option> - </param> - <param> - <name>Average Alpha</name> - <key>avg_alpha</key> - <value>0</value> - <type>real</type> - <hide>#if $average() == 'True' then 'none' else 'all'#</hide> - </param> - <param> - <name>Show Gauge</name> - <key>show_gauge</key> - <value>True</value> - <type>enum</type> - <option> - <name>Show</name> - <key>True</key> - </option> - <option> - <name>Hide</name> - <key>False</key> - </option> - </param> - <param> - <name>Window Size</name> - <key>win_size</key> - <value></value> - <type>int_vector</type> - <hide>#if $win_size() then 'none' else 'part'#</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>not $win_size or len($win_size) == 2</check> - <sink> - <name>in</name> - <type>$type</type> - </sink> - <doc> -Set Average Alpha to 0 for automatic setting. - -Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - -Incoming numbers are multiplied by the factor, and then added-to by the reference level. - </doc> -</block> diff --git a/grc/blocks/wxgui_scopesink2.xml b/grc/blocks/wxgui_scopesink2.xml deleted file mode 100644 index ef0377373..000000000 --- a/grc/blocks/wxgui_scopesink2.xml +++ /dev/null @@ -1,186 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Scope Sink -################################################### - --> -<block> - <name>Scope Sink</name> - <key>wxgui_scopesink2</key> - <import>from gnuradio.wxgui import scopesink2</import> - <import>from gnuradio import gr</import> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -scopesink2.$(type.fcn)( - $(parent).GetWin(), - title=$title, - sample_rate=$samp_rate, - v_scale=$v_scale, - v_offset=$v_offset, - t_scale=$t_scale, - ac_couple=$ac_couple, - xy_mode=$xy_mode, - num_inputs=$num_inputs, - trig_mode=$trig_mode, - y_axis_label=$y_axis_label, -#if $win_size() - size=$win_size, -#end if -) -#if not $grid_pos() -$(parent).Add(self.$(id).win) -#else -$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>set_sample_rate($samp_rate)</callback> - <param> - <name>Type</name> - <key>type</key> - <value>complex</value> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>fcn:scope_sink_c</opt> - </option> - <option> - <name>Float</name> - <key>float</key> - <opt>fcn:scope_sink_f</opt> - </option> - </param> - <param> - <name>Title</name> - <key>title</key> - <value>Scope Plot</value> - <type>string</type> - </param> - <param> - <name>Sample Rate</name> - <key>samp_rate</key> - <value>samp_rate</value> - <type>real</type> - </param> - <param> - <name>V Scale</name> - <key>v_scale</key> - <value>0</value> - <type>real</type> - <hide>#if $v_scale() then 'none' else 'part'#</hide> - </param> - <param> - <name>V Offset</name> - <key>v_offset</key> - <value>0</value> - <type>real</type> - <hide>#if $v_offset() then 'none' else 'part'#</hide> - </param> - <param> - <name>T Scale</name> - <key>t_scale</key> - <value>0</value> - <type>real</type> - <hide>#if $t_scale() then 'none' else 'part'#</hide> - </param> - <param> - <name>AC Couple</name> - <key>ac_couple</key> - <value>False</value> - <type>bool</type> - <hide>#if $ac_couple() then 'none' else 'part'#</hide> - <option> - <name>Off</name> - <key>False</key> - </option> - <option> - <name>On</name> - <key>True</key> - </option> - </param> - <param> - <name>XY Mode</name> - <key>xy_mode</key> - <value>False</value> - <type>enum</type> - <hide>#if $xy_mode() == 'True' then 'none' else 'part'#</hide> - <option> - <name>Off</name> - <key>False</key> - </option> - <option> - <name>On</name> - <key>True</key> - </option> - </param> - <param> - <name>Num Inputs</name> - <key>num_inputs</key> - <value>1</value> - <type>int</type> - </param> - <param> - <name>Window Size</name> - <key>win_size</key> - <value></value> - <type>int_vector</type> - <hide>#if $win_size() then 'none' else 'part'#</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <param> - <name>Trigger Mode</name> - <key>trig_mode</key> - <type>enum</type> - <option> - <name>Auto</name> - <key>gr.gr_TRIG_MODE_AUTO</key> - </option> - <option> - <name>Normal</name> - <key>gr.gr_TRIG_MODE_NORM</key> - </option> - <option> - <name>Freerun</name> - <key>gr.gr_TRIG_MODE_FREE</key> - </option> - <option> - <name>Stripchart</name> - <key>gr.gr_TRIG_MODE_STRIPCHART</key> - </option> - </param> - <param> - <name>Y Axis Label</name> - <key>y_axis_label</key> - <value>Counts</value> - <type>string</type> - </param> - <check>not $win_size or len($win_size) == 2</check> - <check>not $xy_mode or '$type' == 'complex' or $num_inputs != 1</check> - <sink> - <name>in</name> - <type>$type</type> - <nports>$num_inputs</nports> - </sink> - <doc> -Set the V Scale to 0 for the scope to auto-scale. - -Set the T Scale to 0 for automatic setting. - -XY Mode allows the scope to initialize as an XY plotter. - -Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/blocks/wxgui_termsink.xml b/grc/blocks/wxgui_termsink.xml deleted file mode 100644 index 985d89b58..000000000 --- a/grc/blocks/wxgui_termsink.xml +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Terminal window -################################################### - --> -<block> - <name>Terminal Sink</name> - <key>wxgui_termsink</key> - - <import>from gnuradio.wxgui import termsink</import> - - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -termsink.termsink( - parent=$(parent).GetWin(), -#if $win_size() - size=$win_size, -#end if - msgq=$(id)_msgq_in, -) -#if not $grid_pos() -$(parent).Add(self.$(id)) -#else -$(parent).GridAdd(self.$(id), $(', '.join(map(str, $grid_pos())))) -#end if</make> - - <param> - <name>Window Size</name> - <key>win_size</key> - <value></value> - <type>int_vector</type> - <hide>#if $win_size() then 'none' else 'part'#</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - - <check>not $win_size or len($win_size) == 2</check> - - <sink> - <name>in</name> - <type>msg</type> - </sink> - -</block> diff --git a/grc/blocks/wxgui_waterfallsink2.xml b/grc/blocks/wxgui_waterfallsink2.xml deleted file mode 100644 index 3de67597f..000000000 --- a/grc/blocks/wxgui_waterfallsink2.xml +++ /dev/null @@ -1,189 +0,0 @@ -<?xml version="1.0"?> -<!-- -################################################### -##Waterfall Sink -################################################### - --> -<block> - <name>Waterfall Sink</name> - <key>wxgui_waterfallsink2</key> - <import>from gnuradio import window</import> - <import>from gnuradio.wxgui import waterfallsink2</import> - <make>#set $parent = $notebook() and 'self.%s.GetPage(%s)'%$notebook() or 'self' -waterfallsink2.$(type.fcn)( - $(parent).GetWin(), - baseband_freq=$baseband_freq, - dynamic_range=$dynamic_range, - ref_level=$ref_level, - ref_scale=$ref_scale, - sample_rate=$samp_rate, - fft_size=$fft_size, - fft_rate=$fft_rate, - average=$average, - avg_alpha=#if $avg_alpha() then $avg_alpha else 'None'#, - title=$title, -#if $win() - win=$win, -#end if -#if $win_size() - size=$win_size, -#end if -) -#if not $grid_pos() -$(parent).Add(self.$(id).win) -#else -$(parent).GridAdd(self.$(id).win, $(', '.join(map(str, $grid_pos())))) -#end if</make> - <callback>set_baseband_freq($baseband_freq)</callback> - <callback>set_sample_rate($samp_rate)</callback> - <param> - <name>Type</name> - <key>type</key> - <value>complex</value> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>fcn:waterfall_sink_c</opt> - </option> - <option> - <name>Float</name> - <key>float</key> - <opt>fcn:waterfall_sink_f</opt> - </option> - </param> - <param> - <name>Title</name> - <key>title</key> - <value>Waterfall Plot</value> - <type>string</type> - </param> - <param> - <name>Sample Rate</name> - <key>samp_rate</key> - <value>samp_rate</value> - <type>real</type> - </param> - <param> - <name>Baseband Freq</name> - <key>baseband_freq</key> - <value>0</value> - <type>real</type> - </param> - <param> - <name>Dynamic Range</name> - <key>dynamic_range</key> - <value>100</value> - <type>real</type> - </param> - <param> - <name>Reference Level</name> - <key>ref_level</key> - <value>50</value> - <type>real</type> - </param> - <param> - <name>Ref Scale (p2p)</name> - <key>ref_scale</key> - <value>2.0</value> - <type>real</type> - </param> - <param> - <name>FFT Size</name> - <key>fft_size</key> - <value>512</value> - <type>int</type> - </param> - <param> - <name>FFT Rate</name> - <key>fft_rate</key> - <value>15</value> - <type>int</type> - </param> - <param> - <name>Average</name> - <key>average</key> - <value>False</value> - <type>enum</type> - <hide>part</hide> - <option> - <name>On</name> - <key>True</key> - </option> - <option> - <name>Off</name> - <key>False</key> - </option> - </param> - <param> - <name>Average Alpha</name> - <key>avg_alpha</key> - <value>0</value> - <type>real</type> - <hide>#if $average() == 'True' then 'none' else 'all'#</hide> - </param> - <param> - <name>Window</name> - <key>win</key> - <value>None</value> - <type>raw</type> - <hide>#if $win() is None then 'part' else 'none'#</hide> - <option> - <name>Automatic</name> - <key>None</key> - </option> - <option> - <name>Blackman-Harris</name> - <key>window.blackmanharris</key> - </option> - <option> - <name>Hamming</name> - <key>window.hamming</key> - </option> - <option> - <name>Hanning</name> - <key>window.hanning</key> - </option> - <option> - <name>Rectangular</name> - <key>window.rectangular</key> - </option> - <option> - <name>Flattop</name> - <key>window.flattop</key> - </option> - </param> - <param> - <name>Window Size</name> - <key>win_size</key> - <value></value> - <type>int_vector</type> - <hide>#if $win_size() then 'none' else 'part'#</hide> - </param> - <param> - <name>Grid Position</name> - <key>grid_pos</key> - <value></value> - <type>grid_pos</type> - </param> - <param> - <name>Notebook</name> - <key>notebook</key> - <value></value> - <type>notebook</type> - </param> - <check>not $win_size or len($win_size) == 2</check> - <sink> - <name>in</name> - <type>$type</type> - </sink> - <doc> -Set Average Alpha to 0 for automatic setting. - -Leave the window blank for the default size, otherwise enter a tuple of (width, height) pixels. - -Use the Grid Position (row, column, row span, column span) to position the graphical element in the window. - -Use the Notebook Param (notebook-id, page-index) to place the graphical element inside of a notebook page. - </doc> -</block> diff --git a/grc/grc_gnuradio/Makefile.am b/grc/grc_gnuradio/Makefile.am index 9187a01e0..af1d86be9 100644 --- a/grc/grc_gnuradio/Makefile.am +++ b/grc/grc_gnuradio/Makefile.am @@ -31,13 +31,5 @@ blks2_python_PYTHON = \ blks2/__init__.py \ blks2/error_rate.py \ blks2/packet.py \ - blks2/probe.py \ blks2/selector.py \ - blks2/tcp.py \ - blks2/variable_sink.py - -wxgui_pythondir = $(grc_gnuradio_prefix)/wxgui -wxgui_python_PYTHON = \ - wxgui/__init__.py \ - wxgui/panel.py \ - wxgui/top_block_gui.py + blks2/tcp.py diff --git a/grc/grc_gnuradio/blks2/__init__.py b/grc/grc_gnuradio/blks2/__init__.py index cb1196f25..fde76f256 100644 --- a/grc/grc_gnuradio/blks2/__init__.py +++ b/grc/grc_gnuradio/blks2/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2008, 2009 Free Software Foundation, Inc. +# Copyright 2008-2011 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -23,6 +23,4 @@ from packet import options, packet_encoder, packet_decoder, \ packet_mod_b, packet_mod_s, packet_mod_i, packet_mod_f, packet_mod_c, \ packet_demod_b, packet_demod_s, packet_demod_i, packet_demod_f, packet_demod_c from error_rate import error_rate -from probe import probe_function, probe_avg_mag_sqrd_c, probe_avg_mag_sqrd_f, probe_density_b, probe_mpsk_snr_c -from variable_sink import variable_sink_b, variable_sink_s, variable_sink_i, variable_sink_f, variable_sink_c from tcp import tcp_source, tcp_sink diff --git a/grc/grc_gnuradio/blks2/probe.py b/grc/grc_gnuradio/blks2/probe.py deleted file mode 100644 index 8db81f057..000000000 --- a/grc/grc_gnuradio/blks2/probe.py +++ /dev/null @@ -1,123 +0,0 @@ -# -# Copyright 2008 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 -import threading -import numpy -import time - -####################################################################################### -## Probe: Function -####################################################################################### -class probe_function(gr.hier_block2, threading.Thread): - """ - The thread polls the function for values and writes to a message source. - """ - - def __init__(self, probe_callback, probe_rate): - #init hier block - gr.hier_block2.__init__( - self, 'probe_function', - gr.io_signature(0, 0, 0), - gr.io_signature(1, 1, gr.sizeof_float), - ) - self._probe_callback = probe_callback - self.set_probe_rate(probe_rate) - #create message source - message_source = gr.message_source(gr.sizeof_float, 1) - self._msgq = message_source.msgq() - #connect - self.connect(message_source, self) - #setup thread - threading.Thread.__init__(self) - self.setDaemon(True) - self.start() - - def run(self): - """ - Infinite polling loop. - """ - while True: - time.sleep(1.0/self._probe_rate) - arr = numpy.array(self._probe_callback(), numpy.float32) - msg = gr.message_from_string(arr.tostring(), 0, gr.sizeof_float, 1) - self._msgq.insert_tail(msg) - - def set_probe_rate(self, probe_rate): - self._probe_rate = probe_rate - -class _probe_base(gr.hier_block2): - def __init__(self, probe_block, probe_callback, probe_rate): - #init hier block - gr.hier_block2.__init__( - self, 'probe', - gr.io_signature(1, 1, probe_block.input_signature().sizeof_stream_items()[0]), - gr.io_signature(1, 1, gr.sizeof_float), - ) - probe_function_block = probe_function(probe_callback, probe_rate) - #forward callbacks - self.set_probe_rate = probe_function_block.set_probe_rate - #connect - self.connect(self, probe_block) - self.connect(probe_function_block, self) - -####################################################################################### -## Probe: Average Magnitude Squared -####################################################################################### -class _probe_avg_mag_sqrd_base(_probe_base): - def __init__(self, threshold, alpha, probe_rate): - #create block - probe_block = self._probe_block_contructor[0](threshold, alpha) - #forward callbacks - self.set_alpha = probe_block.set_alpha - self.set_threshold = probe_block.set_threshold - #init - _probe_base.__init__(self, probe_block, probe_block.level, probe_rate) - -class probe_avg_mag_sqrd_c(_probe_avg_mag_sqrd_base): _probe_block_contructor = (gr.probe_avg_mag_sqrd_c,) -class probe_avg_mag_sqrd_f(_probe_avg_mag_sqrd_base): _probe_block_contructor = (gr.probe_avg_mag_sqrd_f,) - -####################################################################################### -## Probe: Density -####################################################################################### -class probe_density_b(_probe_base): - def __init__(self, alpha, probe_rate): - #create block - probe_block = gr.probe_density_b(alpha) - #forward callbacks - self.set_alpha = probe_block.set_alpha - #init - _probe_base.__init__(self, probe_block, probe_block.density, probe_rate) - -####################################################################################### -## Probe: MPSK SNR -####################################################################################### -class probe_mpsk_snr_c(_probe_base): - def __init__(self, type, alpha, probe_rate): - """ - Type can be "snr", "signal_mean", or "noise_variance" - """ - #create block - probe_block = gr.probe_mpsk_snr_c(alpha) - #forward callbacks - self.set_alpha = probe_block.set_alpha - #init - _probe_base.__init__(self, probe_block, getattr(probe_block, type), probe_rate) diff --git a/grc/grc_gnuradio/blks2/variable_sink.py b/grc/grc_gnuradio/blks2/variable_sink.py deleted file mode 100644 index cad3b8b04..000000000 --- a/grc/grc_gnuradio/blks2/variable_sink.py +++ /dev/null @@ -1,64 +0,0 @@ -# -# Copyright 2009 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 -import threading -import numpy - -class _variable_sink_base(gr.hier_block2, threading.Thread): - """ - The thread polls the message queue for values and writes to a callback. - """ - - def __init__(self, vlen, decim, callback): - self._vlen = vlen - self._callback = callback - self._item_size = self._size*self._vlen - #init hier block - gr.hier_block2.__init__( - self, 'variable_sink', - gr.io_signature(1, 1, self._item_size), - gr.io_signature(0, 0, 0), - ) - #create blocks - self._decimator = gr.keep_one_in_n(self._item_size, decim) - self._msgq = gr.msg_queue(2) - message_sink = gr.message_sink(self._item_size, self._msgq, False) - #connect - self.connect(self, self._decimator, message_sink) - #setup thread - threading.Thread.__init__(self) - self.setDaemon(True) - self.start() - - def set_decim(self, decim): self._decimator.set_n(decim) - - def run(self): - while True: #truncate to item size, convert to array, callback - msg = self._msgq.delete_head().to_string()[-self._item_size:] - arr = map(self._cast, numpy.fromstring(msg, self._numpy)) - self._callback(self._vlen > 1 and arr or arr[0]) - -class variable_sink_b(_variable_sink_base): _numpy, _size, _cast = numpy.int8, gr.sizeof_char, int -class variable_sink_s(_variable_sink_base): _numpy, _size, _cast = numpy.int16, gr.sizeof_short, int -class variable_sink_i(_variable_sink_base): _numpy, _size, _cast = numpy.int32, gr.sizeof_int, int -class variable_sink_f(_variable_sink_base): _numpy, _size, _cast = numpy.float32, gr.sizeof_float, float -class variable_sink_c(_variable_sink_base): _numpy, _size, _cast = numpy.complex64, gr.sizeof_gr_complex, complex diff --git a/grc/grc_gnuradio/wxgui/__init__.py b/grc/grc_gnuradio/wxgui/__init__.py deleted file mode 100644 index 81427253b..000000000 --- a/grc/grc_gnuradio/wxgui/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2008, 2009 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 top_block_gui import top_block_gui -from panel import Panel diff --git a/grc/grc_gnuradio/wxgui/panel.py b/grc/grc_gnuradio/wxgui/panel.py deleted file mode 100644 index e62133cac..000000000 --- a/grc/grc_gnuradio/wxgui/panel.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2009 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. -# - -import wx - -class Panel(wx.Panel): - def __init__(self, parent, orient=wx.VERTICAL): - wx.Panel.__init__(self, parent) - self._box = wx.BoxSizer(orient) - self._grid = wx.GridBagSizer(5, 5) - self.Add(self._grid) - self.SetSizer(self._box) - - def GetWin(self): return self - - def Add(self, win): - """ - Add a window to the wx vbox. - @param win the wx window - """ - self._box.Add(win, 0, wx.EXPAND) - - def GridAdd(self, win, row, col, row_span=1, col_span=1): - """ - Add a window to the wx grid at the given position. - @param win the wx window - @param row the row specification (integer >= 0) - @param col the column specification (integer >= 0) - @param row_span the row span specification (integer >= 1) - @param col_span the column span specification (integer >= 1) - """ - self._grid.Add(win, wx.GBPosition(row, col), wx.GBSpan(row_span, col_span), wx.EXPAND) diff --git a/grc/grc_gnuradio/wxgui/top_block_gui.py b/grc/grc_gnuradio/wxgui/top_block_gui.py deleted file mode 100644 index 333ccf1c1..000000000 --- a/grc/grc_gnuradio/wxgui/top_block_gui.py +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright 2008, 2009 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. -# - -import wx -from gnuradio import gr -import panel - -default_gui_size = (200, 100) - -class top_block_gui(gr.top_block): - """gr top block with wx gui app and grid sizer.""" - - def __init__(self, title='', size=default_gui_size): - """ - Initialize the gr top block. - Create the wx gui elements. - @param title the main window title - @param size the main window size tuple in pixels - @param icon the file path to an icon or None - """ - #initialize - gr.top_block.__init__(self) - self._size = size - #create gui elements - self._app = wx.App() - self._frame = wx.Frame(None, title=title) - self._panel = panel.Panel(self._frame) - self.Add = self._panel.Add - self.GridAdd = self._panel.GridAdd - self.GetWin = self._panel.GetWin - - def SetIcon(self, *args, **kwargs): self._frame.SetIcon(*args, **kwargs) - - def Run(self, start=True): - """ - Setup the wx gui elements. - Start the gr top block. - Block with the wx main loop. - """ - #set minimal window size - self._frame.SetSizeHints(*self._size) - #create callback for quit - def _quit(event): - self.stop(); self.wait() - self._frame.Destroy() - #setup app - self._frame.Bind(wx.EVT_CLOSE, _quit) - self._sizer = wx.BoxSizer(wx.VERTICAL) - self._sizer.Add(self._panel, 0, wx.EXPAND) - self._frame.SetSizerAndFit(self._sizer) - self._frame.SetAutoLayout(True) - self._frame.Show(True) - self._app.SetTopWindow(self._frame) - #start flow graph - if start: self.start() - #blocking main loop - self._app.MainLoop() diff --git a/grc/python/Generator.py b/grc/python/Generator.py index d53802bef..b669fa65a 100644 --- a/grc/python/Generator.py +++ b/grc/python/Generator.py @@ -1,5 +1,5 @@ """ -Copyright 2008, 2009, 2010 Free Software Foundation, Inc. +Copyright 2008-2011 Free Software Foundation, Inc. This file is part of GNU Radio GNU Radio Companion is free software; you can redistribute it and/or @@ -90,18 +90,20 @@ Add a Misc->Throttle block to your flow graph to avoid CPU congestion.''') imports = self._flow_graph.get_imports() variables = self._flow_graph.get_variables() parameters = self._flow_graph.get_parameters() - #list of variables with controls - controls = filter(lambda v: v.get_make(), variables) #list of blocks not including variables and imports and parameters and disabled - blocks = sorted(self._flow_graph.get_enabled_blocks(), lambda x, y: cmp(x.get_id(), y.get_id())) - probes = filter(lambda b: b.get_key().startswith('probe_'), blocks) #ensure probes are last in the block list - #get a list of notebooks and sort them according dependencies - notebooks = expr_utils.sort_objects( - filter(lambda b: b.get_key() == 'notebook', blocks), - lambda n: n.get_id(), lambda n: n.get_param('notebook').get_value(), + def _get_block_sort_text(block): + code = block.get_make().replace(block.get_id(), ' ') + try: code += block.get_param('notebook').get_value() #older gui markup w/ wxgui + except: pass + try: code += block.get_param('gui_hint').get_value() #newer gui markup w/ qtgui + except: pass + return code + blocks = expr_utils.sort_objects( + self._flow_graph.get_enabled_blocks(), + lambda b: b.get_id(), _get_block_sort_text ) #list of regular blocks (all blocks minus the special ones) - blocks = filter(lambda b: b not in (imports + parameters + variables + probes + notebooks), blocks) + probes + blocks = filter(lambda b: b not in (imports + parameters), blocks) #list of connections where each endpoint is enabled connections = filter(lambda c: not c.is_msg(), self._flow_graph.get_enabled_connections()) messages = filter(lambda c: c.is_msg(), self._flow_graph.get_enabled_connections()) @@ -125,8 +127,6 @@ Add a Misc->Throttle block to your flow graph to avoid CPU congestion.''') 'imports': imports, 'flow_graph': self._flow_graph, 'variables': variables, - 'notebooks': notebooks, - 'controls': controls, 'parameters': parameters, 'blocks': blocks, 'connections': connections, diff --git a/grc/python/Param.py b/grc/python/Param.py index 6dd008d1d..303ab3ed8 100644 --- a/grc/python/Param.py +++ b/grc/python/Param.py @@ -1,5 +1,5 @@ """ -Copyright 2008, 2009, 2010 Free Software Foundation, Inc. +Copyright 2008-2011 Free Software Foundation, Inc. This file is part of GNU Radio GNU Radio Companion is free software; you can redistribute it and/or @@ -99,7 +99,7 @@ class Param(_Param, _GUIParam): 'hex', 'string', 'bool', 'file_open', 'file_save', 'id', 'stream_id', - 'grid_pos', 'notebook', + 'grid_pos', 'notebook', 'gui_hint', 'import', ) @@ -354,6 +354,29 @@ class Param(_Param, _GUIParam): except: raise Exception, 'Stream ID "%s" is not found.'%v return v ######################### + # GUI Position/Hint + ######################### + elif t == 'gui_hint': + if ':' in v: tab, pos = v.split(':') + elif '@' in v: tab, pos = v, '' + else: tab, pos = '', v + + if '@' in tab: tab, index = tab.split('@') + else: index = '?' + + widget_str = ({ + (True, True): 'self.%(tab)s_grid_layout_%(index)s.addWidget(%(widget)s, %(pos)s)', + (True, False): 'self.%(tab)s_layout_%(index)s.addWidget(%(widget)s)', + (False, True): 'self.top_grid_layout.addWidget(%(widget)s, %(pos)s)', + (False, False): 'self.top_layout.addWidget(%(widget)s)', + }[bool(tab), bool(pos)])%{'tab': tab, 'index': index, 'widget': '%s', 'pos': pos} + + def gui_hint(ws, w): + if 'layout' in w: ws = ws.replace('addWidget', 'addLayout') + return ws%w + + return lambda w: gui_hint(widget_str, w) + ######################### # Grid Position Type ######################### elif t == 'grid_pos': diff --git a/grc/python/Platform.py b/grc/python/Platform.py index 04db0b9b0..ec3f94096 100644 --- a/grc/python/Platform.py +++ b/grc/python/Platform.py @@ -1,5 +1,5 @@ """ -Copyright 2008, 2009, 2010 Free Software Foundation, Inc. +Copyright 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is part of GNU Radio GNU Radio Companion is free software; you can redistribute it and/or diff --git a/grc/python/flow_graph.tmpl b/grc/python/flow_graph.tmpl index a1a9308aa..5aaa99793 100644 --- a/grc/python/flow_graph.tmpl +++ b/grc/python/flow_graph.tmpl @@ -5,8 +5,6 @@ ##@param imports the import statements ##@param flow_graph the flow_graph ##@param variables the variable blocks -##@param notebooks a list of notebook blocks -##@param controls the variables with gui controls ##@param parameters the paramater blocks ##@param blocks the signal blocks ##@param connections the connections @@ -59,6 +57,17 @@ class $(class_name)(grc_wxgui.top_block_gui): _icon_path = "$icon.get_filename()" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) #end if +#elif $generate_options == 'qt_gui' +class $(class_name)(gr.top_block, Qt.QWidget): + + def __init__($param_str): + gr.top_block.__init__(self, "$title") + Qt.QWidget.__init__(self) + self.setWindowTitle("$title") + self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) + self.top_layout = Qt.QVBoxLayout(self) + self.top_grid_layout = Qt.QGridLayout() + self.top_layout.addLayout(self.top_grid_layout) #elif $generate_options == 'no_gui' class $(class_name)(gr.top_block): @@ -112,30 +121,6 @@ gr.io_signaturev($(len($io_sigs)), $(len($io_sigs)), [$(', '.join($size_strs))]) $indent($var.get_var_make()) #end for ######################################################## -##Create Notebooks -######################################################## -#if $notebooks - - $DIVIDER - # Notebooks - $DIVIDER -#end if -#for $notebook in $notebooks - $indent($notebook.get_make()) -#end for -######################################################## -##Create Controls -######################################################## -#if $controls - - $DIVIDER - # Controls - $DIVIDER -#end if -#for $ctrl in $controls - $indent($ctrl.get_make()) -#end for -######################################################## ##Create Message Queues ######################################################## #if $messages @@ -157,7 +142,11 @@ gr.io_signaturev($(len($io_sigs)), $(len($io_sigs)), [$(', '.join($size_strs))]) $DIVIDER #end if #for $blk in filter(lambda b: b.get_make(), $blocks) + #if $blk in $variables + $indent($blk.get_make()) + #else self.$blk.get_id() = $indent($blk.get_make()) + #end if #end for ######################################################## ##Create Connections @@ -196,6 +185,9 @@ self.$port.get_parent().get_id()#slurp ######################################################## #for $var in $parameters + $variables #set $id = $var.get_id() + def get_$(id)(self): + return self.$id + def set_$(id)(self, $id): self.$id = $id #for $callback in $var_id2cbs[$id] @@ -239,12 +231,21 @@ if __name__ == '__main__': if gr.enable_realtime_scheduling() != gr.RT_OK: print "Error: failed to enable realtime scheduling." #end if - tb = $(class_name)($(', '.join($params_eq_list))) #if $generate_options == 'wx_gui' + tb = $(class_name)($(', '.join($params_eq_list))) tb.Run($flow_graph.get_option('run')) + #elif $generate_options == 'qt_gui' + qapp = Qt.QApplication(sys.argv) + tb = $(class_name)($(', '.join($params_eq_list))) + #if $flow_graph.get_option('run') + tb.start() + #end if + tb.show() + qapp.exec_() #elif $generate_options == 'no_gui' #set $run_options = $flow_graph.get_option('run_options') #if $run_options == 'prompt' + tb = $(class_name)($(', '.join($params_eq_list))) tb.start() raw_input('Press Enter to quit: ') tb.stop() |