From 6703d4850de984519fc579d197dade9f9293a929 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 3 Jul 2012 20:07:37 +0000 Subject: [PATCH] Cleaning up the soundin routine. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/jtms3@2480 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- mainwindow.cpp | 28 -------- soundin.cpp | 187 ++++--------------------------------------------- soundin.h | 15 ---- 3 files changed, 12 insertions(+), 218 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 429a49f15..91b5366f6 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -194,13 +194,6 @@ MainWindow::MainWindow(QWidget *parent) : // Assign input device and start input thread soundInThread.setInputDevice(m_paInDevice); - if(m_fs96000) soundInThread.setRate(96000.0); - if(!m_fs96000) soundInThread.setRate(95238.1); - soundInThread.setBufSize(10*7056); - soundInThread.setNetwork(m_network); - soundInThread.setPort(m_udpPort); - if(!m_xpol) soundInThread.setNrx(1); - if(m_xpol) soundInThread.setNrx(2); soundInThread.start(QThread::HighestPriority); // Assign output device and start output thread @@ -363,20 +356,12 @@ void MainWindow::readSettings() m_dPhi=settings.value("dPhi",0).toInt(); m_fCal=settings.value("Fcal",0).toInt(); m_fAdd=settings.value("FAdd",0).toDouble(); - soundInThread.setFadd(m_fAdd); m_network = settings.value("NetworkInput",true).toBool(); m_fs96000 = settings.value("FSam96000",true).toBool(); m_nDevIn = settings.value("SoundInIndex", 0).toInt(); m_paInDevice = settings.value("paInDevice",0).toInt(); m_nDevOut = settings.value("SoundOutIndex", 0).toInt(); m_paOutDevice = settings.value("paOutDevice",0).toInt(); - m_IQswap = settings.value("IQswap",false).toBool(); - m_10db = settings.value("Plus10dB",false).toBool(); - m_initIQplus = settings.value("InitIQplus",false).toBool(); - m_udpPort = settings.value("UDPport",50004).toInt(); - soundInThread.setSwapIQ(m_IQswap); - soundInThread.set10db(m_10db); - soundInThread.setPort(m_udpPort); ui->actionCuteSDR->setChecked(settings.value( "PaletteCuteSDR",true).toBool()); ui->actionLinrad->setChecked(settings.value( @@ -556,20 +541,10 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog m_paInDevice=dlg.m_paInDevice; m_nDevOut=dlg.m_nDevOut; m_paOutDevice=dlg.m_paOutDevice; - g_pWideGraph->m_mult570=m_mult570; - g_pWideGraph->m_cal570=m_cal570; - soundInThread.setSwapIQ(m_IQswap); - soundInThread.set10db(m_10db); if(dlg.m_restartSoundIn) { soundInThread.quit(); soundInThread.wait(1000); - soundInThread.setNetwork(m_network); - if(m_fs96000) soundInThread.setRate(96000.0); - if(!m_fs96000) soundInThread.setRate(95238.1); - soundInThread.setFadd(m_fAdd); - if(!m_xpol) soundInThread.setNrx(1); - if(m_xpol) soundInThread.setNrx(2); soundInThread.setInputDevice(m_paInDevice); soundInThread.start(QThread::HighestPriority); } @@ -1310,8 +1285,6 @@ void MainWindow::guiUpdate() } if(nsec != m_sec0) { //Once per second - soundInThread.setForceCenterFreqMHz(g_pWideGraph->m_dForceCenterFreq); - soundInThread.setForceCenterFreqBool(g_pWideGraph->m_bForceCenterFreq); if(m_pctZap>30.0 and !m_transmitting) { lab4->setStyleSheet("QLabel{background-color: #ff0000}"); @@ -1332,7 +1305,6 @@ void MainWindow::guiUpdate() lab1->setText(s); } else if(m_monitoring) { lab1->setStyleSheet("QLabel{background-color: #00ff00}"); - m_nrx=soundInThread.nrx(); khsym=soundInThread.mhsym(); QString t; if(m_network) { diff --git a/soundin.cpp b/soundin.cpp index a6d4b24c6..9b067df33 100644 --- a/soundin.cpp +++ b/soundin.cpp @@ -71,6 +71,8 @@ extern "C" int a2dCallback( const void *inputBuffer, void *outputBuffer, float tmp; float fac; + if(framesToProcess != -99) return paContinue; //### + if( (statusFlags&paInputOverflow) != 0) { qDebug() << "Input Overflow"; } @@ -135,15 +137,8 @@ void SoundInThread::run() //SoundInThread::run() { quitExecution = false; - if (m_net) { -// qDebug() << "Start inputUDP()"; - inputUDP(); -// qDebug() << "Finished inputUDP()"; - return; - } - //---------------------------------------------------- Soundcard Setup -// qDebug() << "Start souncard input"; + qDebug() << "Start souncard input"; PaError paerr; PaStreamParameters inParam; @@ -152,17 +147,14 @@ void SoundInThread::run() //SoundInThread::run() udata.kin=0; //Buffer pointer udata.bzero=false; //Flag to request reset of kin - udata.nrx=m_nrx; //Number of polarizations - udata.iqswap=m_IQswap; - udata.b10db=m_10db; inParam.device=m_nDevIn; //### Input Device Number ### - inParam.channelCount=2*m_nrx; //Number of analog channels + inParam.channelCount=2; //Number of analog channels inParam.sampleFormat=paFloat32; //Get floats from Portaudio inParam.suggestedLatency=0.05; inParam.hostApiSpecificStreamInfo=NULL; - paerr=Pa_IsFormatSupported(&inParam,NULL,96000.0); + paerr=Pa_IsFormatSupported(&inParam,NULL,48000.0); if(paerr<0) { emit error("PortAudio says requested soundcard format not supported."); // return; @@ -170,7 +162,7 @@ void SoundInThread::run() //SoundInThread::run() paerr=Pa_OpenStream(&inStream, //Input stream &inParam, //Input parameters NULL, //No output parameters - 96000.0, //Sample rate + 48000.0, //Sample rate FRAMES_PER_BUFFER, //Frames per buffer // paClipOff+paDitherOff, //No clipping or dithering paClipOff, //No clipping @@ -185,10 +177,10 @@ void SoundInThread::run() //SoundInThread::run() // const PaStreamInfo* p=Pa_GetStreamInfo(inStream); bool qe = quitExecution; - int n60z=99; + int n30z=99; int k=0; int nsec; - int n60; + int n30; int nBusy=0; int nhsym0=0; @@ -198,206 +190,51 @@ void SoundInThread::run() //SoundInThread::run() if (qe) break; qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; nsec = ms/1000; // Time according to this computer - n60 = nsec % 60; + n30 = nsec % 30; // Reset buffer pointer and symbol number at start of minute - if(n60 < n60z or !m_monitoring) { + if(n30 < n30z or !m_monitoring) { nhsym0=0; udata.bzero=true; } k=udata.kin; - udata.iqswap=m_IQswap; - udata.b10db=m_10db; if(m_monitoring) { - if(m_bForceCenterFreq) { - datcom_.fcenter=m_dForceCenterFreq;\ - } else { - datcom_.fcenter=144.125; - } m_hsym=(k-2048)*11025.0/(2048.0*m_rate); if(m_hsym != nhsym0) { if(m_dataSinkBusy) { nBusy++; } else { m_dataSinkBusy=true; - emit readyForFFT(k); //Signal to compute new FFTs +// emit readyForFFT(k); //Signal to compute new FFTs } nhsym0=m_hsym; } } msleep(100); - n60z=n60; + n30z=n30; } Pa_StopStream(inStream); Pa_CloseStream(inStream); } -void SoundInThread::setSwapIQ(bool b) -{ - m_IQswap=b; -} - -void SoundInThread::set10db(bool b) -{ - m_10db=b; -} -void SoundInThread::setPort(int n) //setPort() -{ - if (isRunning()) return; - this->m_udpPort=n; -} - void SoundInThread::setInputDevice(int n) //setInputDevice() { if (isRunning()) return; this->m_nDevIn=n; } -void SoundInThread::setRate(double rate) //setRate() -{ - if (isRunning()) return; - this->m_rate = rate; -} - -void SoundInThread::setBufSize(unsigned n) //setBufSize() -{ - if (isRunning()) return; - this->bufSize = n; -} - -void SoundInThread::setFadd(double x) -{ - m_fAdd=x; -} - - void SoundInThread::quit() //quit() { quitExecution = true; } -void SoundInThread::setNetwork(bool b) //setNetwork() -{ - m_net = b; -} - void SoundInThread::setMonitoring(bool b) //setMonitoring() { m_monitoring = b; } -void SoundInThread::setForceCenterFreqBool(bool b) -{ - m_bForceCenterFreq=b; - -} - -void SoundInThread::setForceCenterFreqMHz(double d) -{ - m_dForceCenterFreq=d; -} - -void SoundInThread::setNrx(int n) //setNrx() -{ - m_nrx = n; -} - -int SoundInThread::nrx() -{ - return m_nrx; -} int SoundInThread::mhsym() { return m_hsym; } - -//--------------------------------------------------------------- inputUDP() -void SoundInThread::inputUDP() -{ - udpSocket = new QUdpSocket(); - if(!udpSocket->bind(m_udpPort,QUdpSocket::ShareAddress) ) - { - emit error(tr("UDP Socket bind failed.")); - return; - } - - // Set this socket's total buffer space for received UDP packets - int v=141600; - ::setsockopt(udpSocket->socketDescriptor(), SOL_SOCKET, SO_RCVBUF, - (char *)&v, sizeof(v)); - - bool qe = quitExecution; - struct linradBuffer { - double cfreq; - int msec; - float userfreq; - int iptr; - quint16 iblk; - qint8 nrx; - char iusb; - double d8[174]; - } b; - - int n60z=99; - int k=0; - int nsec; - int n60; - int nhsym0=0; - int iz=174; - int nBusy=0; - - // Main loop for input of UDP packets over the network: - while (!qe) { - qe = quitExecution; - if (qe) break; - if (!udpSocket->hasPendingDatagrams()) { - msleep(2); // Sleep if no packet available - } else { - int nBytesRead = udpSocket->readDatagram((char *)&b,1416); - if (nBytesRead != 1416) qDebug() << "UDP Read Error:" << nBytesRead; - - qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; - nsec = ms/1000; // Time according to this computer - n60 = nsec % 60; - -// Reset buffer pointer and symbol number at start of minute - if(n60 < n60z) { - k=0; - nhsym0=0; - } - n60z=n60; - - if(m_monitoring) { - m_nrx=b.nrx; - if(m_nrx == +1) iz=348; //One RF channel, i*2 data - if(m_nrx == -1 or m_nrx == +2) iz=174; //One Rf channel, r*4 data - // or 2 RF channels, i*2 data - if(m_nrx == -2) iz=87; // Two RF channels, r*4 data - - // If buffer will not overflow, move data into datcom_ - if ((k+iz) <= 60*96000) { - int nsam=-1; - recvpkt_(&nsam, &b.iblk, &b.nrx, &k, b.d8, b.d8, b.d8); - if(m_bForceCenterFreq) { - datcom_.fcenter=m_dForceCenterFreq; - } else { - datcom_.fcenter=b.cfreq + m_fAdd; - } - } - - m_hsym=(k-2048)*11025.0/(2048.0*m_rate); - if(m_hsym != nhsym0) { - if(m_dataSinkBusy) { - nBusy++; - } else { - m_dataSinkBusy=true; - emit readyForFFT(k); //Signal to compute new FFTs - } - nhsym0=m_hsym; - } - } - } - } - delete udpSocket; -} diff --git a/soundin.h b/soundin.h index db8d71016..7d70d31fa 100644 --- a/soundin.h +++ b/soundin.h @@ -2,7 +2,6 @@ #define SOUNDIN_H #include -#include #include #include @@ -35,19 +34,8 @@ public: { } - void setSwapIQ(bool b); - void set10db(bool b); - void setPort(qint32 n); void setInputDevice(qint32 n); - void setRate(double rate); - void setBufSize(unsigned bufSize); - void setNetwork(bool b); void setMonitoring(bool b); - void setFadd(double x); - void setNrx(int n); - void setForceCenterFreqBool(bool b); - void setForceCenterFreqMHz(double d); - int nrx(); int mhsym(); signals: @@ -60,7 +48,6 @@ public slots: void quit(); private: - void inputUDP(); double m_fAdd; bool m_net; @@ -72,9 +59,7 @@ private: qint32 m_nrx; qint32 m_hsym; qint32 m_nDevIn; - qint32 m_udpPort; - QUdpSocket *udpSocket; }; extern "C" {