1 #ifndef __fftviewer_frFFTviewer__ 2 #define __fftviewer_frFFTviewer__ 3 4 /** 5 @file 6 Subclass of frFFTviewer, which is generated by wxFormBuilder. 7 */ 8 #include <thread> 9 #include <atomic> 10 #include <vector> 11 #include "fftviewer_wxgui.h" 12 #include "lime/LimeSuite.h" 13 #include <wx/timer.h> 14 #include <mutex> 15 //// end generated include 16 17 /** Implementing frFFTviewer */ 18 class fftviewer_frFFTviewer : public frFFTviewer 19 { 20 protected: 21 std::atomic<bool> enableTransmitter; 22 std::atomic<int> windowFunctionID; 23 std::atomic<bool> captureSamples; 24 std::atomic<int> averageCount; 25 std::atomic<bool> updateGUI; 26 std::atomic<bool> enableFFT; 27 std::string captureFilename; 28 // Handlers for frFFTviewer events. 29 void OnWindowFunctionChanged( wxCommandEvent& event ); 30 void OnbtnStartStop( wxCommandEvent& event ); 31 void OnChannelVisibilityChange(wxCommandEvent& event); 32 void OnStreamChange(wxCommandEvent& event); 33 void OnEnTx( wxCommandEvent& event); 34 void OnEnPwr(wxCommandEvent& event); 35 void OnFmtChange(wxCommandEvent& event); 36 void OnAvgChange(wxSpinEvent& event); 37 void OnAvgChangeEnter(wxCommandEvent& event); 38 void OnWindowFunctionChange(wxCommandEvent& event); 39 static void StreamingLoop(fftviewer_frFFTviewer* pthis, const unsigned int fftSize, const int channelsCount, const uint32_t format); 40 41 void OnUpdateStats(wxTimerEvent& event); 42 void OnUpdatePlots(wxThreadEvent& event); 43 public: 44 /** Constructor */ 45 fftviewer_frFFTviewer( wxWindow* parent ); 46 ~fftviewer_frFFTviewer(); 47 //// end generated class members 48 void Initialize(lms_device_t* pDataPort); 49 void SetNyquistFrequency(); 50 51 void StartStreaming(); 52 void StopStreaming(); 53 void OnbtnCaptureClick(wxCommandEvent& event); 54 55 protected: 56 static const int cMaxChCount = 2; 57 struct DataToGUI 58 { 59 std::vector<float> samplesI[cMaxChCount]; 60 std::vector<float> samplesQ[cMaxChCount]; 61 std::vector<float> fftBins[cMaxChCount]; 62 float nyquist_Hz; 63 float rxDataRate_Bps; 64 float txDataRate_Bps; 65 66 DataToGUI& operator=(DataToGUI& src) 67 { 68 for (int ch = 0; ch < cMaxChCount; ++ch) 69 { 70 this->samplesI[ch].swap(src.samplesI[ch]); 71 this->samplesQ[ch].swap(src.samplesQ[ch]); 72 this->fftBins[ch].swap(src.fftBins[ch]); 73 this->nyquist_Hz = src.nyquist_Hz; 74 this->rxDataRate_Bps = src.rxDataRate_Bps; 75 this->txDataRate_Bps = src.txDataRate_Bps; 76 } 77 return *this; 78 } 79 }streamData; 80 81 std::vector<float> fftFreqAxis; 82 std::vector<float> timeXAxis; 83 std::atomic<bool> mStreamRunning; 84 std::atomic<bool> stopProcessing; 85 std::thread threadProcessing; 86 wxString printDataRate(float dataRate); 87 88 lms_stream_t rxStreams[cMaxChCount]; 89 lms_stream_t txStreams[cMaxChCount]; 90 91 lms_device_t* lmsControl; 92 wxTimer* mGUIupdater; 93 unsigned lmsIndex; 94 }; 95 96 #endif // __fftviewer_frFFTviewer__ 97