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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/* -*- c++ -*- */
/*
* Copyright 2008-2011 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
*/
#ifndef SPECTRUM_GUI_CLASS_HPP
#define SPECTRUM_GUI_CLASS_HPP
#include <gnuradio/qtgui/spectrumUpdateEvents.h>
#include <gnuradio/thread/thread.h>
#include <qapplication.h>
#include <qlabel.h>
#include <qslider.h>
#include <qwidget.h>
class SpectrumDisplayForm;
#include <gnuradio/qtgui/spectrumdisplayform.h>
#include <cmath>
#include <complex>
#include <string>
#include <vector>
/*!
* \brief QWidget class for controlling plotting.
* \ingroup qtgui_blk
*/
class SpectrumGUIClass
{
public:
SpectrumGUIClass(const uint64_t maxDataSize,
const uint64_t fftSize,
const double newCenterFrequency,
const double newStartFrequency,
const double newStopFrequency);
~SpectrumGUIClass();
// Disable copy/move because of raw QT pointers.
SpectrumGUIClass(const SpectrumGUIClass&) = delete;
SpectrumGUIClass(SpectrumGUIClass&&) = delete;
SpectrumGUIClass& operator=(const SpectrumGUIClass&) = delete;
SpectrumGUIClass& operator=(SpectrumGUIClass&&) = delete;
void reset();
void openSpectrumWindow(QWidget*,
const bool frequency = true,
const bool waterfall = true,
const bool time = true,
const bool constellation = true);
void setDisplayTitle(const std::string);
bool getWindowOpenFlag();
void setWindowOpenFlag(const bool);
void setFrequencyRange(const double, const double, const double);
double getStartFrequency();
double getStopFrequency();
double getCenterFrequency();
void updateWindow(const bool,
const float*,
const uint64_t,
const float*,
const uint64_t,
const float*,
const uint64_t,
const gr::high_res_timer_type,
const bool);
float getPowerValue();
void setPowerValue(const float);
int getWindowType();
void setWindowType(const int);
int getFFTSize();
int getFFTSizeIndex();
void setFFTSize(const int);
gr::high_res_timer_type getLastGUIUpdateTime();
void setLastGUIUpdateTime(const gr::high_res_timer_type);
unsigned int getPendingGUIUpdateEvents();
void incrementPendingGUIUpdateEvents();
void decrementPendingGUIUpdateEvents();
void resetPendingGUIUpdateEvents();
static const long MAX_FFT_SIZE;
static const long MIN_FFT_SIZE;
static const long DEFAULT_FFT_SIZE;
QWidget* qwidget();
void setTimeDomainAxis(double min, double max);
void setConstellationAxis(double xmin, double xmax, double ymin, double ymax);
void setConstellationPenSize(int size);
void setFrequencyAxis(double min, double max);
void setUpdateTime(double t);
void enableRFFreq(bool en);
bool checkClicked();
float getClickedFreq();
protected:
private:
gr::thread::mutex d_mutex;
const int64_t _dataPoints;
std::string _title;
double _centerFrequency;
double _startFrequency;
double _stopFrequency;
float _powerValue = 1;
bool _windowOpennedFlag = false;
int _windowType = 5;
int64_t _lastDataPointCount;
int _fftSize;
gr::high_res_timer_type _lastGUIUpdateTime = 0;
unsigned int _pendingGUIUpdateEventsCount = 0;
int _droppedEntriesCount = 0;
double _updateTime;
SpectrumDisplayForm* _spectrumDisplayForm = nullptr; // Deleted by QT.
std::vector<float> _fftPoints;
std::vector<double> _realTimeDomainPoints;
std::vector<double> _imagTimeDomainPoints;
};
#endif /* SPECTRUM_GUI_CLASS_HPP */
|