diff --git a/src/include/psk.h b/src/include/psk.h index ccb5ff08..aaebbc4a 100644 --- a/src/include/psk.h +++ b/src/include/psk.h @@ -31,6 +31,8 @@ #include "filters.h" #include "pskcoeff.h" #include "pskvaricode.h" +#include "viewpsk.h" +#include "pskeval.h" //===================================================================== #define PskSampleRate (8000) @@ -87,6 +89,9 @@ private: complex quality; int acquire; + viewpsk* pskviewer; + pskeval* evalpsk; + void rx_symbol(complex symbol); void rx_bit(int bit); void rx_qpsk(int bits); diff --git a/src/include/viewpsk.h b/src/include/viewpsk.h index f07429f5..62f73bbb 100644 --- a/src/include/viewpsk.h +++ b/src/include/viewpsk.h @@ -29,6 +29,7 @@ #include "trx.h" #include "filters.h" #include "fldigi-config.h" +#include "pskeval.h" //===================================================================== #define VPSKSAMPLERATE (8000) @@ -69,6 +70,8 @@ private: time_t now; time_t timeout[MAXCHANNELS]; + pskeval* evalpsk; + void rx_symbol(int ch, complex symbol); void rx_bit(int ch, int bit); @@ -76,7 +79,7 @@ private: void afc(int); public: - viewpsk(trx_mode mode); + viewpsk(pskeval* eval, trx_mode mode); ~viewpsk(); void init(); void restart(trx_mode mode); diff --git a/src/psk/psk.cxx b/src/psk/psk.cxx index bb88c2f8..640d4d3e 100644 --- a/src/psk/psk.cxx +++ b/src/psk/psk.cxx @@ -60,7 +60,6 @@ extern waterfall *wf; char pskmsg[80]; viewpsk *pskviewer = (viewpsk *)0; -pskeval *evalpsk = (pskeval *)0; void psk::tx_init(SoundBase *sc) { @@ -92,9 +91,7 @@ void psk::rx_init() void psk::restart() { - if (!pskviewer) pskviewer = new viewpsk(mode); - else pskviewer->restart(mode); - if (!evalpsk) evalpsk = new pskeval; + pskviewer->restart(mode); evalpsk->setbw(bandwidth); } @@ -118,6 +115,10 @@ psk::~psk() if (fir2) delete fir2; if (snfilt) delete snfilt; if (imdfilt) delete imdfilt; + if (::pskviewer == pskviewer) + ::pskviewer = 0; + delete pskviewer; + delete evalpsk; } psk::psk(trx_mode pskmode) : modem() @@ -235,7 +236,10 @@ psk::psk(trx_mode pskmode) : modem() syncbuf[i] = 0.0; E1 = E2 = E3 = 0.0; acquire = 0; - + + evalpsk = new pskeval; + ::pskviewer = pskviewer = new viewpsk(evalpsk, mode); + init(); } diff --git a/src/psk/viewpsk.cxx b/src/psk/viewpsk.cxx index fd381936..e0b0aaf5 100644 --- a/src/psk/viewpsk.cxx +++ b/src/psk/viewpsk.cxx @@ -43,20 +43,20 @@ #include "qrunner.h" extern waterfall *wf; -extern pskeval *evalpsk; //===================================================================== // Change the following for DCD low pass filter adjustment #define SQLCOEFF 0.01 //===================================================================== -viewpsk::viewpsk(trx_mode pskmode) +viewpsk::viewpsk(pskeval* eval, trx_mode pskmode) { for (int i = 0; i < MAXCHANNELS; i++) { fir1[i] = (C_FIR_filter *)0; fir2[i] = (C_FIR_filter *)0; } - + + evalpsk = eval; viewmode = MODE_PREV; restart(pskmode); }