diff options
-rw-r--r-- | gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc | 183 | ||||
-rw-r--r-- | gr-qtgui/grc/qtgui_time_raster_x.xml | 2 | ||||
-rw-r--r-- | gr-qtgui/lib/TimeRasterDisplayPlot.cc | 64 |
3 files changed, 160 insertions, 89 deletions
diff --git a/gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc b/gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc index 2dadddb6df..5891500860 100644 --- a/gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc +++ b/gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Wed Feb 6 17:01:06 2013</timestamp> + <timestamp>Thu Feb 14 15:27:16 2013</timestamp> <block> <key>options</key> <param> @@ -161,76 +161,6 @@ </param> </block> <block> - <key>gr_file_source</key> - <param> - <key>id</key> - <value>gr_file_source_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>file</key> - <value>/dev/urandom</value> - </param> - <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>repeat</key> - <value>True</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(228, 56)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>gr_packed_to_unpacked_xx</key> - <param> - <key>id</key> - <value>gr_packed_to_unpacked_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>byte</value> - </param> - <param> - <key>bits_per_chunk</key> - <value>8</value> - </param> - <param> - <key>endianness</key> - <value>gr.GR_MSB_FIRST</value> - </param> - <param> - <key>num_ports</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(408, 56)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>variable</key> <param> <key>id</key> @@ -709,6 +639,111 @@ <value>0</value> </param> </block> + <block> + <key>gr_file_source</key> + <param> + <key>id</key> + <value>gr_file_source_0</value> + </param> + <param> + <key>_enabled</key> + <value>False</value> + </param> + <param> + <key>file</key> + <value>/dev/urandom</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(228, 56)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gr_vector_source_x</key> + <param> + <key>id</key> + <value>gr_vector_source_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>vector</key> + <value>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(235, 126)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>gr_packed_to_unpacked_xx</key> + <param> + <key>id</key> + <value>gr_packed_to_unpacked_xx_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>bits_per_chunk</key> + <value>8</value> + </param> + <param> + <key>endianness</key> + <value>gr.GR_MSB_FIRST</value> + </param> + <param> + <key>num_ports</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(408, 56)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> <connection> <source_block_id>gr_packed_to_unpacked_xx_0</source_block_id> <sink_block_id>gr_throttle_0</sink_block_id> @@ -769,4 +804,10 @@ <source_key>0</source_key> <sink_key>0</sink_key> </connection> + <connection> + <source_block_id>gr_vector_source_x_0</source_block_id> + <sink_block_id>gr_packed_to_unpacked_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> </flow_graph> diff --git a/gr-qtgui/grc/qtgui_time_raster_x.xml b/gr-qtgui/grc/qtgui_time_raster_x.xml index 76f47853bd..7d880ab084 100644 --- a/gr-qtgui/grc/qtgui_time_raster_x.xml +++ b/gr-qtgui/grc/qtgui_time_raster_x.xml @@ -47,7 +47,7 @@ $(gui_hint()($win))</make> <param> <name>Sample Rate</name> <key>samp_rate</key> - <value>1</value> + <value>samp_rate</value> <type>real</type> </param> <param> diff --git a/gr-qtgui/lib/TimeRasterDisplayPlot.cc b/gr-qtgui/lib/TimeRasterDisplayPlot.cc index c6e037386c..537a7e4ef7 100644 --- a/gr-qtgui/lib/TimeRasterDisplayPlot.cc +++ b/gr-qtgui/lib/TimeRasterDisplayPlot.cc @@ -93,15 +93,41 @@ private: double _rows; }; +class TimePrecisionClass +{ +public: + TimePrecisionClass(const int timePrecision) + { + _timePrecision = timePrecision; + } + + virtual ~TimePrecisionClass() + { + } + + virtual unsigned int getTimePrecision() const + { + return _timePrecision; + } + + virtual void setTimePrecision(const unsigned int newPrecision) + { + _timePrecision = newPrecision; + } +protected: + unsigned int _timePrecision; +}; /*********************************************************************** * Widget to provide mouse pointer coordinate text **********************************************************************/ -class TimeRasterZoomer: public QwtPlotZoomer, public TimeScaleData +class TimeRasterZoomer: public QwtPlotZoomer, public TimePrecisionClass, + public TimeScaleData { public: - TimeRasterZoomer(QwtPlotCanvas* canvas, double rows, double cols) - : QwtPlotZoomer(canvas), TimeScaleData(), + TimeRasterZoomer(QwtPlotCanvas* canvas, double rows, double cols, + const unsigned int timePrecision) + : QwtPlotZoomer(canvas), TimePrecisionClass(timePrecision), TimeScaleData(), d_rows(static_cast<double>(rows)), d_cols(static_cast<double>(cols)) { setTrackerMode(QwtPicker::AlwaysOn); @@ -139,8 +165,9 @@ protected: double x = dp.x() * getSecondsPerLine(); //double y = dp.y() * getSecondsPerLine() * d_cols; double y = floor(d_rows - dp.y()); - QwtText t(QString("%1 s, %2") - .arg(x, 0, 'f', 2) + QwtText t(QString("%1 %2, %3") + .arg(x, 0, 'f', getTimePrecision()) + .arg(_unitType.c_str()) .arg(y, 0, 'f', 0)); return t; } @@ -171,13 +198,6 @@ TimeRasterDisplayPlot::TimeRasterDisplayPlot(int nplots, setAxisScaleDraw(QwtPlot::xBottom, new QwtXScaleDraw()); setAxisScaleDraw(QwtPlot::yLeft, new QwtYScaleDraw()); - double sec_per_samp = 1.0/d_samp_rate; - QwtYScaleDraw* yScale = (QwtYScaleDraw*)axisScaleDraw(QwtPlot::yLeft); - yScale->setRows(d_rows); - - QwtXScaleDraw* xScale = (QwtXScaleDraw*)axisScaleDraw(QwtPlot::xBottom); - xScale->setSecondsPerLine(sec_per_samp); - for(int i = 0; i < _nplots; i++) { d_data.push_back(new TimeRasterData(d_rows, d_cols)); d_raster.push_back(new PlotTimeRaster("Raster")); @@ -200,7 +220,7 @@ TimeRasterDisplayPlot::TimeRasterDisplayPlot(int nplots, // MidButton for the panning // RightButton: zoom out by 1 // Ctrl+RighButton: zoom out to full size - _zoomer = new TimeRasterZoomer(canvas(), d_rows, d_cols); + _zoomer = new TimeRasterZoomer(canvas(), d_rows, d_cols, 0); #if QWT_VERSION < 0x060000 _zoomer->setSelectionFlags(QwtPicker::RectSelection | QwtPicker::DragSelection); #endif @@ -238,22 +258,32 @@ TimeRasterDisplayPlot::reset() d_data[i]->reset(); } - setAxisScale(QwtPlot::xBottom, 0, d_rows); - setAxisScale(QwtPlot::yLeft, 0, d_cols); + // Update zoomer/picker text units + std::string strunits[4] = {"sec", "ms", "us", "ns"}; + double units10 = floor(log10(d_samp_rate)); + double units3 = std::max(floor(units10/3), 0.0); + double units = pow(10, (units10-fmod(units10, 3.0))); + int iunit = static_cast<int>(units3); + + double sec_per_samp = units/d_samp_rate; - double sec_per_samp = 1.0/d_samp_rate; QwtYScaleDraw* yScale = (QwtYScaleDraw*)axisScaleDraw(QwtPlot::yLeft); yScale->setRows(d_rows); QwtXScaleDraw* xScale = (QwtXScaleDraw*)axisScaleDraw(QwtPlot::xBottom); xScale->setSecondsPerLine(sec_per_samp); + setAxisTitle(QwtPlot::xBottom, QString("Time (%1)") + .arg(strunits[iunit].c_str())); + xScale->initiateUpdate(); // Load up the new base zoom settings if(_zoomer) { + double display_units = 4; ((TimeRasterZoomer*)_zoomer)->setColumns(d_cols); ((TimeRasterZoomer*)_zoomer)->setRows(d_rows); ((TimeRasterZoomer*)_zoomer)->setSecondsPerLine(sec_per_samp); - //((TimeRasterZoomer*)_zoomer)-sSetUnitType(strunits); + ((TimeRasterZoomer*)_zoomer)->setTimePrecision(display_units); + ((TimeRasterZoomer*)_zoomer)->setUnitType(strunits[iunit]); QwtDoubleRect newSize = _zoomer->zoomBase(); newSize.setLeft(0); |