From f41530726eb2ef70a4683faa9f5e4760b67d7d5f Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Thu, 21 Apr 2011 19:11:03 -0400 Subject: gr-qtgui: adding time-domain only plotter. --- gr-qtgui/lib/timedisplayform.cc | 180 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 gr-qtgui/lib/timedisplayform.cc (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc new file mode 100644 index 000000000..809c88a9b --- /dev/null +++ b/gr-qtgui/lib/timedisplayform.cc @@ -0,0 +1,180 @@ +/* -*- c++ -*- */ +/* + * Copyright 2011 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. + */ + +#include <cmath> +#include <QColorDialog> +#include <QMessageBox> +#include <timedisplayform.h> + +TimeDisplayForm::TimeDisplayForm(QWidget* parent) + : QWidget(parent) +{ + _systemSpecifiedFlag = false; + _intValidator = new QIntValidator(this); + _intValidator->setBottom(0); + _timeDomainDisplayPlot = new TimeDomainDisplayPlot(this); + + _numRealDataPoints = 1024; + + Reset(); + + // Create a timer to update plots at the specified rate + displayTimer = new QTimer(this); + connect(displayTimer, SIGNAL(timeout()), this, SLOT(UpdateGuiTimer())); + + connect(_timeDomainDisplayPlot, SIGNAL(plotPointSelected(const QPointF)), + this, SLOT(onTimePlotPointSelected(const QPointF))); +} + +TimeDisplayForm::~TimeDisplayForm() +{ + // Qt deletes children when parent is deleted + + // Don't worry about deleting Display Plots - they are deleted when parents are deleted + delete _intValidator; + + displayTimer->stop(); + delete displayTimer; +} + +void +TimeDisplayForm::newData( const TimeUpdateEvent* spectrumUpdateEvent) +{ + const gr_complex* timeDomainDataPoints = spectrumUpdateEvent->getTimeDomainPoints(); + const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints(); + const timespec generatedTimestamp = spectrumUpdateEvent->getDataTimestamp(); + + // FIXME: make time domain display take complex inputs + double *real = new double[numTimeDomainDataPoints]; + double *imag = new double[numTimeDomainDataPoints]; + for(uint64_t i = 0; i < numTimeDomainDataPoints; i++) { + real[i] = timeDomainDataPoints[i].real(); + imag[i] = timeDomainDataPoints[i].imag(); + } + + _timeDomainDisplayPlot->PlotNewData(real, imag, + numTimeDomainDataPoints, + d_update_time); + + // Tell the system the GUI has been updated + //if(_systemSpecifiedFlag){ + // _system->SetLastGUIUpdateTime(generatedTimestamp); + // _system->DecrementPendingGUIUpdateEvents(); + //} + + delete [] real; + delete [] imag; +} + +void +TimeDisplayForm::resizeEvent( QResizeEvent *e ) +{ + QSize s(0,0); + //s.setWidth(TimeDomainDisplayFrame->width()); + //s.setHeight(TimeDomainDisplayFrame->height()); + emit _timeDomainDisplayPlot->resizeSlot(&s); +} + +void +TimeDisplayForm::customEvent( QEvent * e) +{ + if(e->type() == 10005) { + TimeUpdateEvent* timeUpdateEvent = (TimeUpdateEvent*)e; + newData(timeUpdateEvent); + } + //else if(e->type() == 10008){ + //setWindowTitle(((SpectrumWindowCaptionEvent*)e)->getLabel()); + //} + //else if(e->type() == 10009){ + //Reset(); + //if(_systemSpecifiedFlag){ + // _system->ResetPendingGUIUpdateEvents(); + //} + //} +} + +void +TimeDisplayForm::UpdateGuiTimer() +{ + _timeDomainDisplayPlot->canvas()->update(); +} + +void +TimeDisplayForm::onTimePlotPointSelected(const QPointF p) +{ + emit plotPointSelected(p, 3); +} + +void +TimeDisplayForm::SetFrequencyRange(const double newCenterFrequency, + const double newStartFrequency, + const double newStopFrequency) +{ + double fdiff = std::max(fabs(newStartFrequency), fabs(newStopFrequency)); + + if(fdiff > 0) { + std::string strtime[4] = {"sec", "ms", "us", "ns"}; + double units10 = floor(log10(fdiff)); + double units3 = std::max(floor(units10 / 3.0), 0.0); + double units = pow(10, (units10-fmod(units10, 3.0))); + int iunit = static_cast<int>(units3); + + _startFrequency = newStartFrequency; + _stopFrequency = newStopFrequency; + + _timeDomainDisplayPlot->SetSampleRate(_stopFrequency - _startFrequency, + units, strtime[iunit]); + } +} + +void +TimeDisplayForm::Reset() +{ +} + + +void +TimeDisplayForm::closeEvent( QCloseEvent *e ) +{ + //if(_systemSpecifiedFlag){ + // _system->SetWindowOpenFlag(false); + //} + + qApp->processEvents(); + + QWidget::closeEvent(e); +} + +void +TimeDisplayForm::SetTimeDomainAxis(double min, double max) +{ + _timeDomainDisplayPlot->set_yaxis(min, max); +} + +void +TimeDisplayForm::SetUpdateTime(double t) +{ + d_update_time = t; + // QTimer class takes millisecond input + displayTimer->start(d_update_time*1000); +} + -- cgit From ca8e6096da49c825c14ac05962bb7747f84c2ba6 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sat, 23 Apr 2011 11:01:10 -0400 Subject: gr-qtgui: time domain sink now shows and receives updates. --- gr-qtgui/lib/timedisplayform.cc | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index 809c88a9b..e90eaab06 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -24,6 +24,7 @@ #include <QColorDialog> #include <QMessageBox> #include <timedisplayform.h> +#include <iostream> TimeDisplayForm::TimeDisplayForm(QWidget* parent) : QWidget(parent) @@ -31,10 +32,15 @@ TimeDisplayForm::TimeDisplayForm(QWidget* parent) _systemSpecifiedFlag = false; _intValidator = new QIntValidator(this); _intValidator->setBottom(0); + + _layout = new QGridLayout(this); _timeDomainDisplayPlot = new TimeDomainDisplayPlot(this); + _layout->addWidget(_timeDomainDisplayPlot, 0, 0); _numRealDataPoints = 1024; - + + setLayout(_layout); + Reset(); // Create a timer to update plots at the specified rate @@ -75,12 +81,6 @@ TimeDisplayForm::newData( const TimeUpdateEvent* spectrumUpdateEvent) numTimeDomainDataPoints, d_update_time); - // Tell the system the GUI has been updated - //if(_systemSpecifiedFlag){ - // _system->SetLastGUIUpdateTime(generatedTimestamp); - // _system->DecrementPendingGUIUpdateEvents(); - //} - delete [] real; delete [] imag; } @@ -88,10 +88,7 @@ TimeDisplayForm::newData( const TimeUpdateEvent* spectrumUpdateEvent) void TimeDisplayForm::resizeEvent( QResizeEvent *e ) { - QSize s(0,0); - //s.setWidth(TimeDomainDisplayFrame->width()); - //s.setHeight(TimeDomainDisplayFrame->height()); - emit _timeDomainDisplayPlot->resizeSlot(&s); + emit _timeDomainDisplayPlot->resizeSlot(&size()); } void -- cgit From 01f44f64c916b4aa38bc81662d2c8b82c4cc0b57 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sat, 23 Apr 2011 14:30:32 -0400 Subject: gr-qtgui: moving towards allowing time plot to have multiple connections. --- gr-qtgui/lib/timedisplayform.cc | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index e90eaab06..65940b013 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -26,7 +26,7 @@ #include <timedisplayform.h> #include <iostream> -TimeDisplayForm::TimeDisplayForm(QWidget* parent) +TimeDisplayForm::TimeDisplayForm(int nplots, QWidget* parent) : QWidget(parent) { _systemSpecifiedFlag = false; @@ -34,8 +34,8 @@ TimeDisplayForm::TimeDisplayForm(QWidget* parent) _intValidator->setBottom(0); _layout = new QGridLayout(this); - _timeDomainDisplayPlot = new TimeDomainDisplayPlot(this); - _layout->addWidget(_timeDomainDisplayPlot, 0, 0); + _timeDomainDisplayPlot = new TimeDomainDisplayPlot(nplots, this); + _layout->addWidget(_timeDomainDisplayPlot, 0, 0, 100, 100); _numRealDataPoints = 1024; @@ -65,24 +65,15 @@ TimeDisplayForm::~TimeDisplayForm() void TimeDisplayForm::newData( const TimeUpdateEvent* spectrumUpdateEvent) { - const gr_complex* timeDomainDataPoints = spectrumUpdateEvent->getTimeDomainPoints(); + const int which = spectrumUpdateEvent->which(); + const double* timeDomainDataPoints = spectrumUpdateEvent->getTimeDomainPoints(); const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints(); const timespec generatedTimestamp = spectrumUpdateEvent->getDataTimestamp(); - - // FIXME: make time domain display take complex inputs - double *real = new double[numTimeDomainDataPoints]; - double *imag = new double[numTimeDomainDataPoints]; - for(uint64_t i = 0; i < numTimeDomainDataPoints; i++) { - real[i] = timeDomainDataPoints[i].real(); - imag[i] = timeDomainDataPoints[i].imag(); - } - _timeDomainDisplayPlot->PlotNewData(real, imag, + //std::cout << "TimeDisplayForm: which: " << which << std::endl; + _timeDomainDisplayPlot->PlotNewData(which, timeDomainDataPoints, numTimeDomainDataPoints, d_update_time); - - delete [] real; - delete [] imag; } void -- cgit From 0877adb2e194c9dfad2484519b2979e2bed93958 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sat, 23 Apr 2011 15:11:17 -0400 Subject: gr-qtgui: Passing vectors of data to update plot for stability; also moving responsibility of keeping track of plot updates out to qtgui_sink instead of inside plot qidget. --- gr-qtgui/lib/timedisplayform.cc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index 65940b013..368e47c95 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -65,13 +65,11 @@ TimeDisplayForm::~TimeDisplayForm() void TimeDisplayForm::newData( const TimeUpdateEvent* spectrumUpdateEvent) { - const int which = spectrumUpdateEvent->which(); - const double* timeDomainDataPoints = spectrumUpdateEvent->getTimeDomainPoints(); + const std::vector<double*> timeDomainDataPoints = spectrumUpdateEvent->getTimeDomainPoints(); const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints(); - const timespec generatedTimestamp = spectrumUpdateEvent->getDataTimestamp(); + const timespec generatedTimestamp = {0,0}; - //std::cout << "TimeDisplayForm: which: " << which << std::endl; - _timeDomainDisplayPlot->PlotNewData(which, timeDomainDataPoints, + _timeDomainDisplayPlot->PlotNewData(timeDomainDataPoints, numTimeDomainDataPoints, d_update_time); } -- cgit From e251c885f19281ef918987e09c2aac1af6a952c2 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sun, 24 Apr 2011 00:31:39 -0400 Subject: gr-qtgui: provide function and slot for setting the labels of a time curve. --- gr-qtgui/lib/timedisplayform.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index 368e47c95..816331771 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -164,3 +164,8 @@ TimeDisplayForm::SetUpdateTime(double t) displayTimer->start(d_update_time*1000); } +void +TimeDisplayForm::SetTitle(int which, QString title) +{ + _timeDomainDisplayPlot->set_title(which, title); +} -- cgit From 43a3a7296412dc52216e7f63856a86945f4ba438 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sun, 24 Apr 2011 01:30:08 -0400 Subject: gr-qtgui: clean up --- gr-qtgui/lib/timedisplayform.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index 816331771..05baee7f9 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -35,7 +35,7 @@ TimeDisplayForm::TimeDisplayForm(int nplots, QWidget* parent) _layout = new QGridLayout(this); _timeDomainDisplayPlot = new TimeDomainDisplayPlot(nplots, this); - _layout->addWidget(_timeDomainDisplayPlot, 0, 0, 100, 100); + _layout->addWidget(_timeDomainDisplayPlot, 0, 0); _numRealDataPoints = 1024; @@ -67,7 +67,6 @@ TimeDisplayForm::newData( const TimeUpdateEvent* spectrumUpdateEvent) { const std::vector<double*> timeDomainDataPoints = spectrumUpdateEvent->getTimeDomainPoints(); const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints(); - const timespec generatedTimestamp = {0,0}; _timeDomainDisplayPlot->PlotNewData(timeDomainDataPoints, numTimeDomainDataPoints, @@ -77,7 +76,8 @@ TimeDisplayForm::newData( const TimeUpdateEvent* spectrumUpdateEvent) void TimeDisplayForm::resizeEvent( QResizeEvent *e ) { - emit _timeDomainDisplayPlot->resizeSlot(&size()); + QSize s = size(); + emit _timeDomainDisplayPlot->resizeSlot(&s); } void @@ -153,7 +153,7 @@ TimeDisplayForm::closeEvent( QCloseEvent *e ) void TimeDisplayForm::SetTimeDomainAxis(double min, double max) { - _timeDomainDisplayPlot->set_yaxis(min, max); + _timeDomainDisplayPlot->setYaxis(min, max); } void @@ -167,5 +167,5 @@ TimeDisplayForm::SetUpdateTime(double t) void TimeDisplayForm::SetTitle(int which, QString title) { - _timeDomainDisplayPlot->set_title(which, title); + _timeDomainDisplayPlot->setTitle(which, title); } -- cgit From 11de76b9214a59930ac8d8c031880b5bd293973d Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sun, 24 Apr 2011 01:47:05 -0400 Subject: gr-qtgui: adding function and slot to set a time display curve's color. --- gr-qtgui/lib/timedisplayform.cc | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index 05baee7f9..c2bb9f75d 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -169,3 +169,9 @@ TimeDisplayForm::SetTitle(int which, QString title) { _timeDomainDisplayPlot->setTitle(which, title); } + +void +TimeDisplayForm::SetColor(int which, QString color) +{ + _timeDomainDisplayPlot->setColor(which, color); +} -- cgit From 83c1463ef9aa550d8c44cd259cf14dea433e1973 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Sun, 24 Apr 2011 01:59:10 -0400 Subject: gr-qtgui: making (somewhat more) consistent case for function names. --- gr-qtgui/lib/timedisplayform.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'gr-qtgui/lib/timedisplayform.cc') diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index c2bb9f75d..cc4ac9951 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -45,7 +45,7 @@ TimeDisplayForm::TimeDisplayForm(int nplots, QWidget* parent) // Create a timer to update plots at the specified rate displayTimer = new QTimer(this); - connect(displayTimer, SIGNAL(timeout()), this, SLOT(UpdateGuiTimer())); + connect(displayTimer, SIGNAL(timeout()), this, SLOT(updateGuiTimer())); connect(_timeDomainDisplayPlot, SIGNAL(plotPointSelected(const QPointF)), this, SLOT(onTimePlotPointSelected(const QPointF))); @@ -99,7 +99,7 @@ TimeDisplayForm::customEvent( QEvent * e) } void -TimeDisplayForm::UpdateGuiTimer() +TimeDisplayForm::updateGuiTimer() { _timeDomainDisplayPlot->canvas()->update(); } @@ -111,7 +111,7 @@ TimeDisplayForm::onTimePlotPointSelected(const QPointF p) } void -TimeDisplayForm::SetFrequencyRange(const double newCenterFrequency, +TimeDisplayForm::setFrequencyRange(const double newCenterFrequency, const double newStartFrequency, const double newStopFrequency) { @@ -151,13 +151,13 @@ TimeDisplayForm::closeEvent( QCloseEvent *e ) } void -TimeDisplayForm::SetTimeDomainAxis(double min, double max) +TimeDisplayForm::setTimeDomainAxis(double min, double max) { _timeDomainDisplayPlot->setYaxis(min, max); } void -TimeDisplayForm::SetUpdateTime(double t) +TimeDisplayForm::setUpdateTime(double t) { d_update_time = t; // QTimer class takes millisecond input @@ -165,13 +165,13 @@ TimeDisplayForm::SetUpdateTime(double t) } void -TimeDisplayForm::SetTitle(int which, QString title) +TimeDisplayForm::setTitle(int which, QString title) { _timeDomainDisplayPlot->setTitle(which, title); } void -TimeDisplayForm::SetColor(int which, QString color) +TimeDisplayForm::setColor(int which, QString color) { _timeDomainDisplayPlot->setColor(which, color); } -- cgit