summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnuradio-core/src/examples/ctrlport/pfb_sync_test-qt.grc183
-rw-r--r--gr-qtgui/grc/qtgui_time_raster_x.xml2
-rw-r--r--gr-qtgui/lib/TimeRasterDisplayPlot.cc64
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);