diff options
-rw-r--r-- | gr-qtgui/lib/TimeDomainDisplayPlot.cc | 30 | ||||
-rw-r--r-- | gr-qtgui/lib/TimeDomainDisplayPlot.h | 4 | ||||
-rw-r--r-- | gr-qtgui/lib/qtgui_time_sink_c.cc | 24 | ||||
-rw-r--r-- | gr-qtgui/lib/qtgui_time_sink_c.h | 3 | ||||
-rw-r--r-- | gr-qtgui/lib/spectrumUpdateEvents.cc | 48 | ||||
-rw-r--r-- | gr-qtgui/lib/spectrumUpdateEvents.h | 16 | ||||
-rw-r--r-- | gr-qtgui/lib/spectrumdisplayform.cc | 15 | ||||
-rw-r--r-- | gr-qtgui/lib/timedisplayform.cc | 8 |
8 files changed, 57 insertions, 91 deletions
diff --git a/gr-qtgui/lib/TimeDomainDisplayPlot.cc b/gr-qtgui/lib/TimeDomainDisplayPlot.cc index c9973fbc22..e3c773e4cd 100644 --- a/gr-qtgui/lib/TimeDomainDisplayPlot.cc +++ b/gr-qtgui/lib/TimeDomainDisplayPlot.cc @@ -95,8 +95,6 @@ private: TimeDomainDisplayPlot::TimeDomainDisplayPlot(int nplots, QWidget* parent) : QwtPlot(parent), _nplots(nplots) { - timespec_reset(&_lastReplot); - resize(parent->width(), parent->height()); _numPoints = 1024; @@ -215,36 +213,30 @@ TimeDomainDisplayPlot::resizeSlot( QSize *s ) resize(s->width(), s->height()); } -void TimeDomainDisplayPlot::PlotNewData(const int which, - const double* dataPoints, +void TimeDomainDisplayPlot::PlotNewData(const std::vector<double*> dataPoints, const int64_t numDataPoints, const double timeInterval) { - if((numDataPoints > 0) && - (diff_timespec(get_highres_clock(), _lastReplot) > timeInterval)) { - + if((numDataPoints > 0)) { if(numDataPoints != _numPoints){ _numPoints = numDataPoints; - delete[] _dataPoints[which]; - _dataPoints[which] = new double[_numPoints]; - delete[] _xAxisPoints; _xAxisPoints = new double[_numPoints]; - - _plot_curve[which]->setRawData(_xAxisPoints, _dataPoints[which], _numPoints); + for(int i = 0; i < _nplots; i++) { + delete[] _dataPoints[i]; + _dataPoints[i] = new double[_numPoints]; + _plot_curve[i]->setRawData(_xAxisPoints, _dataPoints[i], _numPoints); + } + set_xaxis(0, numDataPoints); - _resetXAxisPoints(); } - std::cout << "DisplayPlot: " << which << std::endl; - memcpy(_dataPoints[which], dataPoints, numDataPoints*sizeof(double)); - std::cout << "after" << std::endl; - - if(which == _nplots-1) - _lastReplot = get_highres_clock(); + for(int i = 0; i < _nplots; i++) { + memcpy(_dataPoints[i], dataPoints[i], numDataPoints*sizeof(double)); + } } } diff --git a/gr-qtgui/lib/TimeDomainDisplayPlot.h b/gr-qtgui/lib/TimeDomainDisplayPlot.h index 3a983a924b..fbfba584b1 100644 --- a/gr-qtgui/lib/TimeDomainDisplayPlot.h +++ b/gr-qtgui/lib/TimeDomainDisplayPlot.h @@ -47,7 +47,7 @@ public: TimeDomainDisplayPlot(int nplots, QWidget*); virtual ~TimeDomainDisplayPlot(); - void PlotNewData(const int which, const double* dataPoints, + void PlotNewData(const std::vector<double*> dataPoints, const int64_t numDataPoints, const double timeInterval); virtual void replot(); @@ -87,8 +87,6 @@ private: double _sampleRate; - timespec _lastReplot; - int64_t _numPoints; }; diff --git a/gr-qtgui/lib/qtgui_time_sink_c.cc b/gr-qtgui/lib/qtgui_time_sink_c.cc index 2c8ff86e5e..434a9dffc8 100644 --- a/gr-qtgui/lib/qtgui_time_sink_c.cc +++ b/gr-qtgui/lib/qtgui_time_sink_c.cc @@ -142,26 +142,26 @@ qtgui_time_sink_c::general_work (int noutput_items, for(int i=0; i < noutput_items; i+=d_size) { unsigned int datasize = noutput_items - i; unsigned int resid = d_size-d_index; - - // If we have enough input for one full FFT, do it + + // If we have enough input for one full plot, do it if(datasize >= resid) { - const timespec currentTime = get_highres_clock(); + d_current_time = get_highres_clock(); - // Fill up residbufs with d_fftsize number of items + // Fill up residbufs with d_size number of items for(n = 0; n < d_nconnections; n+=2) { for(unsigned int k = 0; k < resid; k++) { d_residbufs[n][d_index+k] = in[j+k].real(); d_residbufs[n+1][d_index+k] = in[j+k].imag(); } + } + // Update the plot if its time + if(diff_timespec(d_current_time, d_last_time) > d_update_time) { + d_last_time = d_current_time; d_qApplication->postEvent(d_main_gui, - new TimeUpdateEvent(n, d_residbufs[n], d_size, - currentTime, true)); - //d_qApplication->postEvent(d_main_gui, - // new TimeUpdateEvent(n+1, d_residbufs[n+1], d_size, - // currentTime, true)); + new TimeUpdateEvent(d_residbufs, d_size)); } - + d_index = 0; j += resid; } @@ -169,8 +169,8 @@ qtgui_time_sink_c::general_work (int noutput_items, else { for(n = 0; n < d_nconnections; n+=2) { for(unsigned int k = 0; k < resid; k++) { - d_residbufs[n][d_index+k] = in[j+k].real(); - d_residbufs[n+1][d_index+k] = in[j+k].imag(); + d_residbufs[n][d_index+k] = in[j+k].real(); + d_residbufs[n+1][d_index+k] = in[j+k].imag(); } } d_index += datasize; diff --git a/gr-qtgui/lib/qtgui_time_sink_c.h b/gr-qtgui/lib/qtgui_time_sink_c.h index 67687061b0..be057d5082 100644 --- a/gr-qtgui/lib/qtgui_time_sink_c.h +++ b/gr-qtgui/lib/qtgui_time_sink_c.h @@ -67,6 +67,9 @@ private: QWidget *d_parent; TimeDisplayForm *d_main_gui; + timespec d_current_time; + timespec d_last_time; + public: ~qtgui_time_sink_c(); void exec_(); diff --git a/gr-qtgui/lib/spectrumUpdateEvents.cc b/gr-qtgui/lib/spectrumUpdateEvents.cc index 0372257603..6730ae51d4 100644 --- a/gr-qtgui/lib/spectrumUpdateEvents.cc +++ b/gr-qtgui/lib/spectrumUpdateEvents.cc @@ -180,14 +180,10 @@ SpectrumFrequencyRangeEvent::GetStopFrequency() const /***************************************************************************/ #include <iostream> -TimeUpdateEvent::TimeUpdateEvent(const int which, - const double *timeDomainPoints, - const uint64_t numTimeDomainDataPoints, - const timespec dataTimestamp, - const bool repeatDataFlag) +TimeUpdateEvent::TimeUpdateEvent(const std::vector<double*> timeDomainPoints, + const uint64_t numTimeDomainDataPoints) : QEvent(QEvent::Type(10005)) { - _which = which; if(numTimeDomainDataPoints < 1) { _numTimeDomainDataPoints = 1; } @@ -195,29 +191,25 @@ TimeUpdateEvent::TimeUpdateEvent(const int which, _numTimeDomainDataPoints = numTimeDomainDataPoints; } - _dataTimeDomainPoints = new double[_numTimeDomainDataPoints]; - memset(_dataTimeDomainPoints, 0x0, _numTimeDomainDataPoints*sizeof(double)); - if(numTimeDomainDataPoints > 0) { - memcpy(_dataTimeDomainPoints, timeDomainPoints, - numTimeDomainDataPoints*sizeof(double)); - } + _nplots = timeDomainPoints.size(); + for(size_t i = 0; i < _nplots; i++) { + _dataTimeDomainPoints.push_back(new double[_numTimeDomainDataPoints]); - _dataTimestamp = dataTimestamp; - _repeatDataFlag = repeatDataFlag; + if(numTimeDomainDataPoints > 0) { + memcpy(_dataTimeDomainPoints[i], timeDomainPoints[i], + numTimeDomainDataPoints*sizeof(double)); + } + } } TimeUpdateEvent::~TimeUpdateEvent() { - delete[] _dataTimeDomainPoints; -} - -int -TimeUpdateEvent::which() const -{ - return _which; + for(size_t i = 0; i < _nplots; i++) { + delete[] _dataTimeDomainPoints[i]; + } } -const double* +const std::vector<double*> TimeUpdateEvent::getTimeDomainPoints() const { return _dataTimeDomainPoints; @@ -229,16 +221,4 @@ TimeUpdateEvent::getNumTimeDomainDataPoints() const return _numTimeDomainDataPoints; } -timespec -TimeUpdateEvent::getDataTimestamp() const -{ - return _dataTimestamp; -} - -bool -TimeUpdateEvent::getRepeatDataFlag() const -{ - return _repeatDataFlag; -} - #endif /* SPECTRUM_UPDATE_EVENTS_C */ diff --git a/gr-qtgui/lib/spectrumUpdateEvents.h b/gr-qtgui/lib/spectrumUpdateEvents.h index 09771571c9..a5e359a4c9 100644 --- a/gr-qtgui/lib/spectrumUpdateEvents.h +++ b/gr-qtgui/lib/spectrumUpdateEvents.h @@ -5,6 +5,7 @@ #include <QEvent> #include <QString> #include <complex> +#include <vector> #include <highResTimeFunctions.h> class SpectrumUpdateEvent:public QEvent{ @@ -92,16 +93,13 @@ private: class TimeUpdateEvent: public QEvent { public: - TimeUpdateEvent(const int which, - const double *timeDomainPoints, - const uint64_t numTimeDomainDataPoints, - const timespec dataTimestamp, - const bool repeatDataFlag); + TimeUpdateEvent(const std::vector<double*> timeDomainPoints, + const uint64_t numTimeDomainDataPoints); ~TimeUpdateEvent(); int which() const; - const double *getTimeDomainPoints() const; + const std::vector<double*> getTimeDomainPoints() const; uint64_t getNumTimeDomainDataPoints() const; timespec getDataTimestamp() const; bool getRepeatDataFlag() const; @@ -109,11 +107,9 @@ public: protected: private: - int _which; - double *_dataTimeDomainPoints; + size_t _nplots; + std::vector<double*> _dataTimeDomainPoints; uint64_t _numTimeDomainDataPoints; - timespec _dataTimestamp; - bool _repeatDataFlag; }; diff --git a/gr-qtgui/lib/spectrumdisplayform.cc b/gr-qtgui/lib/spectrumdisplayform.cc index 2c666871de..2d2d8648f8 100644 --- a/gr-qtgui/lib/spectrumdisplayform.cc +++ b/gr-qtgui/lib/spectrumdisplayform.cc @@ -141,13 +141,17 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate //_lastSpectrumEvent = (SpectrumUpdateEvent)(*spectrumUpdateEvent); const std::complex<float>* complexDataPoints = spectrumUpdateEvent->getFFTPoints(); const uint64_t numFFTDataPoints = spectrumUpdateEvent->getNumFFTDataPoints(); - const double* realTimeDomainDataPoints = spectrumUpdateEvent->getRealTimeDomainPoints(); - const double* imagTimeDomainDataPoints = spectrumUpdateEvent->getImagTimeDomainPoints(); const uint64_t numTimeDomainDataPoints = spectrumUpdateEvent->getNumTimeDomainDataPoints(); const timespec dataTimestamp = spectrumUpdateEvent->getDataTimestamp(); const bool repeatDataFlag = spectrumUpdateEvent->getRepeatDataFlag(); const bool lastOfMultipleUpdatesFlag = spectrumUpdateEvent->getLastOfMultipleUpdateFlag(); const timespec generatedTimestamp = spectrumUpdateEvent->getEventGeneratedTimestamp(); + double* realTimeDomainDataPoints = (double*)spectrumUpdateEvent->getRealTimeDomainPoints(); + double* imagTimeDomainDataPoints = (double*)spectrumUpdateEvent->getImagTimeDomainPoints(); + + std::vector<double*> timeDomainDataPoints; + timeDomainDataPoints.push_back(realTimeDomainDataPoints); + timeDomainDataPoints.push_back(imagTimeDomainDataPoints); // REMEMBER: The dataTimestamp is NOT valid when the repeat data flag is true... ResizeBuffers(numFFTDataPoints, numTimeDomainDataPoints); @@ -232,14 +236,9 @@ SpectrumDisplayForm::newFrequencyData( const SpectrumUpdateEvent* spectrumUpdate _peakAmplitude, d_update_time); } if(tabindex == d_plot_time) { - _timeDomainDisplayPlot->PlotNewData(0, - realTimeDomainDataPoints, + _timeDomainDisplayPlot->PlotNewData(timeDomainDataPoints, numTimeDomainDataPoints, d_update_time); - _timeDomainDisplayPlot->PlotNewData(1, - imagTimeDomainDataPoints, - numTimeDomainDataPoints, - d_update_time); } if(tabindex == d_plot_constellation) { _constellationDisplayPlot->PlotNewData(realTimeDomainDataPoints, diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index 65940b0130..368e47c956 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); } |