diff options
author | Tom Rondeau <trondeau@vt.edu> | 2013-02-20 17:33:05 -0500 |
---|---|---|
committer | Tom Rondeau <trondeau@vt.edu> | 2013-02-20 18:36:45 -0500 |
commit | 844a6e15b34d8106752bbf3783b3eb8b65728cac (patch) | |
tree | 9af8e62eac7668ce950c7c555d0299499b491880 /gnuradio-core/src | |
parent | 11746e7de98462a6d6a9917e0500077ed063a1d7 (diff) |
ctrlport: made display type in ControlPort setup field into an options mask.
Options are used to determine default plot type, type of plots available, initial states.
qtgui: fixed enabling stem plot to properly check the menu option.
Diffstat (limited to 'gnuradio-core/src')
12 files changed, 143 insertions, 83 deletions
diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc b/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc index 1b78a9cbc3..ca6667a214 100644 --- a/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc +++ b/gnuradio-core/src/lib/general/gr_ctrlport_probe2_c.cc @@ -138,7 +138,8 @@ gr_ctrlport_probe2_c::setup_rpc() pmt::make_c32vector(0,-2), pmt::make_c32vector(0,2), pmt::make_c32vector(0,0), - "volts", d_desc.c_str(), RPC_PRIVLVL_MIN, DISPXYSCATTER))); + "volts", d_desc.c_str(), RPC_PRIVLVL_MIN, + DISPXY | DISPOPTSCATTER))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_ctrlport_probe2_c, int>( diff --git a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc b/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc index e06f27eb70..253d4c380e 100644 --- a/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc +++ b/gnuradio-core/src/lib/general/gr_ctrlport_probe_c.cc @@ -90,6 +90,7 @@ gr_ctrlport_probe_c::setup_rpc() pmt::make_c32vector(0,-2), pmt::make_c32vector(0,2), pmt::make_c32vector(0,0), - "volts", d_desc.c_str(), RPC_PRIVLVL_MIN, DISPXYSCATTER))); + "volts", d_desc.c_str(), RPC_PRIVLVL_MIN, + DISPXY | DISPOPTSCATTER))); #endif /* GR_CTRLPORT */ } diff --git a/gnuradio-core/src/lib/general/gr_throttle.cc b/gnuradio-core/src/lib/general/gr_throttle.cc index d293e1c540..1c6c8cf893 100644 --- a/gnuradio-core/src/lib/general/gr_throttle.cc +++ b/gnuradio-core/src/lib/general/gr_throttle.cc @@ -89,12 +89,14 @@ private: rpcbasic_sptr(new rpcbasic_register_get<gr_throttle_impl, double>( alias(), "sample_rate", &gr_throttle_impl::sample_rate, pmt::mp(0.0), pmt::mp(100.0e6), pmt::mp(0.0), - "Hz", "Sample Rate", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "Hz", "Sample Rate", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_set<gr_throttle_impl, double>( alias(), "sample_rate", &gr_throttle_impl::set_sample_rate, pmt::mp(0.0), pmt::mp(100.0e6), pmt::mp(0.0), - "Hz", "Sample Rate", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "Hz", "Sample Rate", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); #endif } }; diff --git a/gnuradio-core/src/lib/runtime/gnuradio.ice b/gnuradio-core/src/lib/runtime/gnuradio.ice index 8fa909417e..e17d91901b 100644 --- a/gnuradio-core/src/lib/runtime/gnuradio.ice +++ b/gnuradio-core/src/lib/runtime/gnuradio.ice @@ -52,23 +52,23 @@ enum KnobType { KNOBBOOL, KNOBCHAR, KNOBINT, KNOBFLOAT, KNOBVECCHAR, KNOBVECINT, KNOBVECFLOAT, KNOBVECDOUBLE, KNOBVECSTRING, KNOBVECLONG }; -enum DisplayType { - DISPNULL, - DISPTIMESERIESF, - DISPTIMESERIESC, - DISPXYSCATTER, - DISPXYLINE, - DISPLOGTIMESERIESF, - DISPLOGTIMESERIESC, - DISPSTRIPCHARTF, - DISPSTRIPCHARTC, -}; +const int DISPNULL = 0x0000; +const int DISPTIME = 0x0001; +const int DISPXY = 0x0002; +const int DISPPSD = 0x0004; +const int DISPSPEC = 0x0008; +const int DISPRAST = 0x0010; +const int DISPOPTCPLX = 0x0100; +const int DISPOPTLOG = 0x0200; +const int DISPOPTSTEM = 0x0400; +const int DISPOPTSTRIP = 0x0800; +const int DISPOPTSCATTER = 0x1000; struct KnobProp { KnobType type; string units; string description; - DisplayType display; + int display; Knob min; Knob max; Knob defaultvalue; diff --git a/gnuradio-core/src/lib/runtime/gr_block.cc b/gnuradio-core/src/lib/runtime/gr_block.cc index fb39909ab8..ce92c88975 100644 --- a/gnuradio-core/src/lib/runtime/gr_block.cc +++ b/gnuradio-core/src/lib/runtime/gr_block.cc @@ -442,61 +442,71 @@ gr_block::setup_pc_rpc() rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( alias(), "avg noutput_items", &gr_block::pc_noutput_items, pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Average noutput items", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Average noutput items", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( alias(), "var noutput_items", &gr_block::pc_noutput_items_var, pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Var. noutput items", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Var. noutput items", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( alias(), "avg nproduced", &gr_block::pc_nproduced, pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Average items produced", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Average items produced", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( alias(), "var nproduced", &gr_block::pc_nproduced_var, pmt::mp(0), pmt::mp(32768), pmt::mp(0), - "", "Var. items produced", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Var. items produced", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( alias(), "avg work time", &gr_block::pc_work_time, pmt::mp(0), pmt::mp(1e9), pmt::mp(0), - "", "Average clock cycles in call to work", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Average clock cycles in call to work", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, float>( alias(), "var work time", &gr_block::pc_work_time_var, pmt::mp(0), pmt::mp(1e9), pmt::mp(0), - "", "Var. clock cycles in call to work", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Var. clock cycles in call to work", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( alias(), "avg input \% full", &gr_block::pc_input_buffers_full, pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Average of how full input buffers are", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Average of how full input buffers are", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( alias(), "var input \% full", &gr_block::pc_input_buffers_full_var, pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Var. of how full input buffers are", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Var. of how full input buffers are", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( alias(), "avg output \% full", &gr_block::pc_output_buffers_full, pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Average of how full output buffers are", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Average of how full output buffers are", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_rpc_vars.push_back( rpcbasic_sptr(new rpcbasic_register_get<gr_block, std::vector<float> >( alias(), "var output \% full", &gr_block::pc_output_buffers_full_var, pmt::make_c32vector(0,0), pmt::make_c32vector(0,1), pmt::make_c32vector(0,0), - "", "Var. of how full output buffers are", RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Var. of how full output buffers are", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); #endif /* GR_CTRLPORT */ } diff --git a/gnuradio-core/src/lib/runtime/nop_impl.cc b/gnuradio-core/src/lib/runtime/nop_impl.cc index 6df2c0391d..def1740678 100644 --- a/gnuradio-core/src/lib/runtime/nop_impl.cc +++ b/gnuradio-core/src/lib/runtime/nop_impl.cc @@ -90,15 +90,15 @@ namespace gr { (new get_32i_t(d_name, "a", this, unique_id(), &nop_impl::a, pmt::mp(-128), pmt::mp(127), pmt::mp(0), - "", "Value of a", - RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Value of a", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_get_32i_rpcs.push_back(get_32i_sptr (new get_32i_t(d_name, "b", this, unique_id(), &nop_impl::b, pmt::mp(-128), pmt::mp(127), pmt::mp(0), - "", "Value of b", - RPC_PRIVLVL_MIN, DISPSTRIPCHARTF))); + "", "Value of b", RPC_PRIVLVL_MIN, + DISPTIME | DISPOPTSTRIP))); d_set_32i_rpcs.push_back(set_32i_sptr (new set_32i_t(d_name, "a", this, unique_id(), diff --git a/gnuradio-core/src/lib/runtime/rpccallbackregister_base.h b/gnuradio-core/src/lib/runtime/rpccallbackregister_base.h index a9a3925d94..dbfda4ed47 100644 --- a/gnuradio-core/src/lib/runtime/rpccallbackregister_base.h +++ b/gnuradio-core/src/lib/runtime/rpccallbackregister_base.h @@ -26,17 +26,22 @@ #include <gruel/msg_accepter.h> #include <gruel/msg_producer.h> -enum DisplayType { - DISPNULL, - DISPTIMESERIESF, - DISPTIMESERIESC, - DISPXYSCATTER, - DISPXYLINE, - DISPLOGTIMESERIESF, - DISPLOGTIMESERIESC, - DISPSTRIPCHARTF, - DISPSTRIPCHARTC, -}; +typedef uint32_t DisplayType; + +// DisplayType Plotting types +const uint32_t DISPNULL = 0x0000; +const uint32_t DISPTIME = 0x0001; +const uint32_t DISPXY = 0x0002; +const uint32_t DISPPSD = 0x0004; +const uint32_t DISPSPEC = 0x0008; +const uint32_t DISPRAST = 0x0010; + +// DisplayType Options +const uint32_t DISPOPTCPLX = 0x0100; +const uint32_t DISPOPTLOG = 0x0200; +const uint32_t DISPOPTSTEM = 0x0400; +const uint32_t DISPOPTSTRIP = 0x0800; +const uint32_t DISPOPTSCATTER = 0x1000; enum priv_lvl_t { RPC_PRIVLVL_ALL = 0, diff --git a/gnuradio-core/src/lib/runtime/rpcserver_ice.h b/gnuradio-core/src/lib/runtime/rpcserver_ice.h index 98847bbe05..66ed8d5156 100644 --- a/gnuradio-core/src/lib/runtime/rpcserver_ice.h +++ b/gnuradio-core/src/lib/runtime/rpcserver_ice.h @@ -162,7 +162,7 @@ private: prop.description = p.second.description; prop.min = rpcpmtconverter::from_pmt(p.second.min, c); prop.max = rpcpmtconverter::from_pmt(p.second.max, c); - prop.display = static_cast<GNURadio::DisplayType>(p.second.display); + prop.display = static_cast<uint32_t>(p.second.display); outknobs[p.first] = prop; } else { @@ -197,7 +197,7 @@ private: prop.description = iter->second.description; prop.min = rpcpmtconverter::from_pmt(iter->second.min, c); prop.max = rpcpmtconverter::from_pmt(iter->second.max, c); - prop.display = static_cast<GNURadio::DisplayType>(iter->second.display); + prop.display = static_cast<uint32_t>(iter->second.display); //outknobs[iter->first] = prop; outknobs[p] = prop; } diff --git a/gnuradio-core/src/lib/runtime/runtime.i b/gnuradio-core/src/lib/runtime/runtime.i index ea6b7f79ac..c3510a65e2 100644 --- a/gnuradio-core/src/lib/runtime/runtime.i +++ b/gnuradio-core/src/lib/runtime/runtime.i @@ -71,17 +71,22 @@ #ifdef GR_CTRLPORT -enum DisplayType { - DISPNULL, - DISPTIMESERIESF, - DISPTIMESERIESC, - DISPXYSCATTER, - DISPXYLINE, - DISPLOGTIMESERIESF, - DISPLOGTIMESERIESC, - DISPSTRIPCHARTF, - DISPSTRIPCHARTC, -}; +typedef uint32_t DisplayType; + +// DisplayType Plotting types +const uint32_t DISPNULL = 0x0000; +const uint32_t DISPTIME = 0x0001; +const uint32_t DISPXY = 0x0002; +const uint32_t DISPPSD = 0x0004; +const uint32_t DISPSPEC = 0x0008; +const uint32_t DISPRAST = 0x0010; + +// DisplayType Options +const uint32_t DISPOPTCPLX = 0x0100; +const uint32_t DISPOPTLOG = 0x0200; +const uint32_t DISPOPTSTEM = 0x0400; +const uint32_t DISPOPTSTRIP = 0x0800; +const uint32_t DISPOPTSCATTER = 0x1000; enum priv_lvl_t { RPC_PRIVLVL_ALL = 0, diff --git a/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py b/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py index 1990e21aa4..27858b575b 100644 --- a/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py +++ b/gnuradio-core/src/python/gnuradio/ctrlport/GrDataPlotter.py @@ -68,6 +68,9 @@ class GrDataPlotterC(gr.top_block): def semilogy(self, en=True): self.snk.enable_semilogy(en) + def stem(self, en=True): + self.snk.enable_stem_plot(en) + def update(self, data): # Ask GUI if there has been a change in nsamps npts = self.snk.nsamps() @@ -147,6 +150,9 @@ class GrDataPlotterF(gr.top_block): def semilogy(self, en=True): self.snk.enable_semilogy(en) + def stem(self, en=True): + self.snk.enable_stem_plot(en) + def update(self, data): # Ask GUI if there has been a change in nsamps npts = self.snk.nsamps() @@ -219,6 +225,12 @@ class GrDataPlotterConst(gr.top_block): def name(self): return self._name + def scatter(self, en=True): + if(en): + self.snk.set_line_style(0, 0) + else: + self.snk.set_line_style(0, 1) + def update(self, data): # Ask GUI if there has been a change in nsamps npts = self.snk.nsamps() diff --git a/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor b/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor index 4625a2d863..60a810b04e 100755 --- a/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor +++ b/gnuradio-core/src/python/gnuradio/ctrlport/gr-ctrlport-monitor @@ -115,17 +115,28 @@ class MAINWindow(QtGui.QMainWindow): else: pmax = 1.1*pmax + # Use display option mask of item to set up available plot + # types and default options. + disp = self.knobprops[uid][key].display + cplx = disp & gr.DISPOPTCPLX | disp & gr.DISPXY + strip = disp & gr.DISPOPTSTRIP + stem = disp & gr.DISPOPTSTEM + log = disp & gr.DISPOPTLOG + scatter = disp & gr.DISPOPTSCATTER + def newUpdaterProxy(): self.newUpdater(key, radio) def newPlotterFProxy(): - self.newPlotF(key, uid, title, pmin, pmax) + self.newPlotF(key, uid, title, pmin, pmax, + log, strip, stem) def newPlotterCProxy(): - self.newPlotC(key, uid, title, pmin, pmax) + self.newPlotC(key, uid, title, pmin, pmax, + log, strip, stem) def newPlotterConstProxy(): - self.newPlotConst(key, uid, title, pmin, pmax) + self.newPlotConst(key, uid, title, pmin, pmax, scatter) def newPlotterPsdFProxy(): self.newPlotPsdF(key, uid, title) @@ -147,13 +158,15 @@ class MAINWindow(QtGui.QMainWindow): menu.addAction("Properties", newUpdaterProxy) # displays available - menu.addAction("Plot Time", newPlotterFProxy) - menu.addAction("Plot Time (cpx)", newPlotterCProxy) - menu.addAction("Plot PSD", newPlotterPsdFProxy) - menu.addAction("Plot PSD cpx", newPlotterPsdCProxy) - menu.addAction("Plot Constellation", newPlotterConstProxy) - menu.addAction("Plot Raster (real)", newPlotterRasterFProxy) - #menu.addAction("Plot Raster (bits)", newPlotterRasterBProxy) + if(cplx == 0): + menu.addAction("Plot Time", newPlotterFProxy) + menu.addAction("Plot PSD", newPlotterPsdFProxy) + menu.addAction("Plot Raster (real)", newPlotterRasterFProxy) + #menu.addAction("Plot Raster (bits)", newPlotterRasterBProxy) + else: + menu.addAction("Plot Time", newPlotterCProxy) + menu.addAction("Plot PSD", newPlotterPsdCProxy) + menu.addAction("Plot Constellation", newPlotterConstProxy) menu.popup(QtGui.QCursor.pos()) @@ -182,20 +195,27 @@ class MAINWindow(QtGui.QMainWindow): else: pmax = 1.1*pmax - if(knobprop.display == GNURadio.DisplayType.DISPXYSCATTER): - self.newPlotConst(tag, uid, title, pmin, pmax) - elif(knobprop.display == GNURadio.DisplayType.DISPTIMESERIESF): - self.newPlotF(tag, uid, title, pmin, pmax) - elif(knobprop.display == GNURadio.DisplayType.DISPTIMESERIESC): - self.newPlotC(tag, uid, title, pmin, pmax) - elif(knobprop.display == GNURadio.DisplayType.DISPLOGTIMESERIESF): - self.newPlotF(tag, uid, title, pmin, pmax, True) - elif(knobprop.display == GNURadio.DisplayType.DISPLOGTIMESERIESC): - self.newPlotC(tag, uid, title, pmin, pmax, True) - elif(knobprop.display == GNURadio.DisplayType.DISPSTRIPCHARTF): - self.newPlotC(tag, uid, title, pmin, pmax, False, True) - elif(knobprop.display == GNURadio.DisplayType.DISPSTRIPCHARTC): - self.newPlotC(tag, uid, title, pmin, pmax, False, True) + disp = knobprop.display + if(disp & gr.DISPTIME): + strip = disp & gr.DISPOPTSTRIP + stem = disp & gr.DISPOPTSTEM + log = disp & gr.DISPOPTLOG + if(disp & gr.DISPOPTCPLX == 0): + self.newPlotF(tag, uid, title, pmin, pmax, + log, strip, stem) + else: + self.newPlotC(tag, uid, title, pmin, pmax, + log, strip, stem) + + elif(disp & gr.DISPXY): + scatter = disp & gr.DISPOPTSCATTER + self.newPlotConst(tag, uid, title, pmin, pmax, scatter) + + elif(disp & gr.DISPPSD): + if(disp & gr.DISPOPTCPLX == 0): + self.newPlotPsdF(tag, uid, title) + else: + self.newPlotPsdC(tag, uid, title) def createPlot(self, plot, uid, title): plot.start() @@ -216,20 +236,24 @@ class MAINWindow(QtGui.QMainWindow): plots.remove(p) break - def newPlotConst(self, tag, uid, title="", pmin=None, pmax=None): + def newPlotConst(self, tag, uid, title="", pmin=None, pmax=None, + scatter=False): plot = GrDataPlotterConst(tag, 32e6, pmin, pmax) + plot.scatter(scatter) self.createPlot(plot, uid, title) def newPlotF(self, tag, uid, title="", pmin=None, pmax=None, - logy=False, stripchart=False): + logy=False, stripchart=False, stem=False): plot = GrDataPlotterF(tag, 32e6, pmin, pmax, stripchart) plot.semilogy(logy) + plot.stem(stem) self.createPlot(plot, uid, title) def newPlotC(self, tag, uid, title="", pmin=None, pmax=None, - logy=False, stripchart=False): + logy=False, stripchart=False, stem=False): plot = GrDataPlotterC(tag, 32e6, pmin, pmax, stripchart) plot.semilogy(logy) + plot.stem(stem) self.createPlot(plot, uid, title) def newPlotPsdF(self, tag, uid, title="", pmin=None, pmax=None): diff --git a/gnuradio-core/src/python/gnuradio/ctrlport/qa_cpp_py_binding.py b/gnuradio-core/src/python/gnuradio/ctrlport/qa_cpp_py_binding.py index a8b6de8c53..6de5d5fc9f 100755 --- a/gnuradio-core/src/python/gnuradio/ctrlport/qa_cpp_py_binding.py +++ b/gnuradio-core/src/python/gnuradio/ctrlport/qa_cpp_py_binding.py @@ -98,12 +98,12 @@ class test_cpp_py_binding(gr_unittest.TestCase): v5 = gr.RPC_get_vector_float("pyland", "fvec", "unit_5_float_vector", "Python Exported Float Vector", [], [], [], - gr.DISPTIMESERIESC) + gr.DISPTIME | gr.DISPOPTCPLX) v5.activate(get5) v6 = gr.RPC_get_vector_gr_complex("pyland", "cvec", "unit_6_gr_complex_vector", "Python Exported Complex Vector", [], [], [], - gr.DISPXYSCATTER) + gr.DISPXY | gr.DISPOPTSCATTER) v6.activate(get6) # print some variables locally |