diff --git a/q65w/devsetup.cpp b/q65w/devsetup.cpp index fe9d14a95..d895a7b86 100644 --- a/q65w/devsetup.cpp +++ b/q65w/devsetup.cpp @@ -12,7 +12,6 @@ DevSetup::DevSetup(QWidget *parent) : QDialog(parent) { ui.setupUi(this); //setup the dialog form m_restartSoundIn=false; - m_restartSoundOut=false; } DevSetup::~DevSetup() @@ -149,9 +148,6 @@ void DevSetup::accept() m_xpol!=ui.cbXpol->isChecked() or m_udpPort!=ui.sbPort->value()) m_restartSoundIn=true; - if(m_nDevOut!=ui.comboBoxSndOut->currentIndex() or - m_paOutDevice!=m_outDevList[m_nDevOut]) m_restartSoundOut=true; - m_myCall=ui.myCallEntry->text(); m_myGrid=ui.myGridEntry->text(); m_idInt=ui.idIntSpinBox->value(); diff --git a/q65w/devsetup.h b/q65w/devsetup.h index c32a83e96..ce697388c 100644 --- a/q65w/devsetup.h +++ b/q65w/devsetup.h @@ -39,7 +39,6 @@ public: bool m_xpol; bool m_IQswap; bool m_restartSoundIn; - bool m_restartSoundOut; bool m_initIQplus; bool m_bIQxt; diff --git a/q65w/soundout.cpp b/q65w/soundout.cpp deleted file mode 100644 index e74d0549d..000000000 --- a/q65w/soundout.cpp +++ /dev/null @@ -1,207 +0,0 @@ -#include "soundout.h" - -#ifdef Q_OS_WIN32 -#include -#endif - -#define FRAMES_PER_BUFFER 256 - -#include - -extern float gran(); //Noise generator (for tests only) - -extern short int iwave[2*60*11025]; //Wave file for Tx audio -extern int nwave; -extern bool btxok; -extern bool bTune; -extern bool bIQxt; -extern int iqAmp; -extern int iqPhase; -extern int txPower; -extern double outputLatency; - -typedef struct //Parameters sent to or received from callback function -{ - int nTRperiod; -} paUserData; - -//--------------------------------------------------------------- d2aCallback -extern "C" int d2aCallback(const void * /*inputBuffer*/, void *outputBuffer, - unsigned long framesToProcess, - const PaStreamCallbackTimeInfo* /*timeInfo*/, - PaStreamCallbackFlags /*statusFlags*/, - void *userData ) -{ - paUserData *udata=(paUserData*)userData; - short *wptr = (short*)outputBuffer; - unsigned int i; - static int n; - static int ic=0; - static bool btxok0=false; - static bool bTune0=false; - static int nStart=0; - static double phi=0.; - double tsec,tstart,dphi; - int nsec; - int nTRperiod=udata->nTRperiod; - - // Get System time - qint64 ms = QDateTime::currentMSecsSinceEpoch() % 86400000; - tsec = 0.001*ms; - nsec = ms/1000; - qreal dPhase=iqPhase/5729.57795131; - qreal amp=1.0 + 0.0001*iqAmp; - qreal xAmp=txPower*295.00*qSqrt(2.0 - amp*amp); - qreal yAmp=txPower*295.00*amp; - static int nsec0=0; - - if(bTune) { - ic=0; - dphi=6.28318530718*1270.46/11025.0; - } - if(bTune0 and !bTune) btxok=false; - bTune0=bTune; - - if(nsec!=nsec0) { -// qDebug() << txPower << iqAmp << iqPhase << amp << xAmp << yAmp << dPhase << bTune; -// qDebug() << "A" << nsec%60 << bTune << btxok; -// ic=0; - nsec0=nsec; - } - - if(btxok and !btxok0) { //Start (or re-start) a transmission - n=nsec/nTRperiod; - tstart=tsec - n*nTRperiod - 1.0; - - if(tstart<1.0) { - ic=0; //Start of Tx cycle, set starting index to 0 - nStart=n; - } else { - if(n != nStart) { //Late start in new Tx cycle: compute starting index - ic=(int)(tstart*11025.0); - ic=2*ic; - nStart=n; - } - } - } - btxok0=btxok; - - if(btxok) { - for(i=0 ; i nwave) {i2a=0; i2b=0;} -// i2 = 500.0*(i2/32767.0 + 5.0*gran()); //Add noise (tests only!) -// if(bIQxt) { - if(1) { - if(bTune) { - phi += dphi; - } else { - phi=qAtan2(qreal(i2b),qreal(i2a)); - } - i2a=xAmp*qCos(phi); - i2b=yAmp*qSin(phi + dPhase); -// qDebug() << xAmp << yAmp << phi << i2a << i2b; - } -// i2a=0.01*txPower*i2a; -// i2b=0.01*txPower*i2b; - *wptr++ = i2b; //left - *wptr++ = i2a; //right - } - } else { - for(i=0 ; i nwave) { - btxok=0; - ic=0; - } - return 0; -} - -namespace -{ - struct COMWrapper - { - explicit COMWrapper () - { -#ifdef Q_OS_WIN32 - // required because Qt only does this for GUI thread - CoInitializeEx (nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); -#endif - } - ~COMWrapper () - { -#ifdef Q_OS_WIN32 - CoUninitialize (); -#endif - } - }; -} - -void SoundOutThread::run() -{ - COMWrapper c; - - PaError paerr; - PaStreamParameters outParam; - PaStream *outStream; - paUserData udata; - quitExecution = false; - - auto device_info = Pa_GetDeviceInfo (m_nDevOut); - - outParam.device=m_nDevOut; //Output device number - outParam.channelCount=2; //Number of analog channels - outParam.sampleFormat=paInt16; //Send short ints to PortAudio - outParam.suggestedLatency=device_info->defaultLowOutputLatency; - outParam.hostApiSpecificStreamInfo=NULL; - - udata.nTRperiod=m_TRperiod; - paerr=Pa_IsFormatSupported(NULL,&outParam,11025.0); - if(paerr<0) { - qDebug() << "PortAudio says requested output format not supported."; - qDebug() << paerr; - return; - } - paerr=Pa_OpenStream(&outStream, //Output stream - NULL, //No input parameters - &outParam, //Output parameters - 11025.0, //Sample rate - FRAMES_PER_BUFFER, //Frames per buffer - paClipOff, //No clipping - d2aCallback, //output callbeck routine - &udata); //userdata - - paerr=Pa_StartStream(outStream); - if(paerr<0) { - qDebug() << "Failed to start audio output stream."; - return; - } - const PaStreamInfo* p=Pa_GetStreamInfo(outStream); - outputLatency = p->outputLatency; - bool qe = quitExecution; - -//---------------------------------------------- Soundcard output loop - while (!qe) { - qe = quitExecution; - if (qe) break; - msleep(100); - } - Pa_StopStream(outStream); - Pa_CloseStream(outStream); -} - -void SoundOutThread::setOutputDevice(int n) //setOutputDevice() -{ - if (isRunning()) return; - this->m_nDevOut=n; -} - -void SoundOutThread::setPeriod(int n) -{ - m_TRperiod=n; -} diff --git a/q65w/soundout.h b/q65w/soundout.h deleted file mode 100644 index 294c6fa5f..000000000 --- a/q65w/soundout.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef SOUNDOUT_H -#define SOUNDOUT_H -#include -#include - -// An instance of this thread sends audio data to a specified soundcard. -// Output can be muted while underway, preserving waveform timing when -// transmission is resumed. - -class SoundOutThread : public QThread -{ - Q_OBJECT - -protected: - virtual void run(); - -public: -// Constructs (but does not start) a SoundOutThread - SoundOutThread() - : quitExecution(false) // Initialize some private members - , m_rate(0) - , m_nwave(48*11025) - , m_txOK(false) - , m_txMute(false) - { - } - -public: - void setOutputDevice(qint32 n); - void setPeriod(int n); - bool quitExecution; //If true, thread exits gracefully - - -// Private members -private: - double m_rate; //Sample rate - qint32 m_nDevOut; //Output device number - qint32 m_nwave; //Length of wave file - qint32 m_TRperiod; //T/R period (30 or 60 s) - bool m_txOK; //Enable Tx audio - bool m_txMute; //Mute temporarily -}; - -#endif diff --git a/q65w/txtune.cpp b/q65w/txtune.cpp deleted file mode 100644 index b1d7fb71d..000000000 --- a/q65w/txtune.cpp +++ /dev/null @@ -1,116 +0,0 @@ -#include "txtune.h" -#include "ui_txtune.h" -#include - -extern int txPower; -extern int iqAmp; -extern int iqPhase; -extern bool bTune; - -TxTune::TxTune(QWidget *parent) : - QDialog(parent), - ui(new Ui::TxTune) -{ - ui->setupUi(this); -} - -TxTune::~TxTune() -{ - delete ui; -} - -void TxTune::accept() -{ - if(bTune) on_pbTune_clicked(); - QDialog::accept(); -} - -void TxTune::reject() -{ - if(bTune) on_pbTune_clicked(); - set_iqAmp(m_saveAmp); - set_iqPhase(m_savePha); - set_txPower(m_saveTxPower); - QDialog::reject(); -} - -void TxTune::on_pwrSlider_valueChanged(int n) -{ - txPower=n; - ui->labPower->setText (QString {"%1 %"}.arg (n)); -} - -void TxTune::on_ampSlider_valueChanged(int n) -{ - m_iqAmp1=n; - iqAmp=10*m_iqAmp1 + m_iqAmp2; - ui->labAmpReal->setText (QString::number (1.0 + 0.0001 * iqAmp, 'f', 4)); -} - -void TxTune::on_fineAmpSlider_valueChanged(int n) -{ - m_iqAmp2=n; - iqAmp=10*m_iqAmp1 + m_iqAmp2; - ui->labAmpReal->setText (QString::number (1.0 + 0.0001*iqAmp, 'f', 4)); -} - -void TxTune::on_phaSlider_valueChanged(int n) -{ - m_iqPha1=n; - iqPhase=10*m_iqPha1 + m_iqPha2; - ui->labPhaReal->setText (QString::number (0.01*iqPhase, 'f', 2)); -} - -void TxTune::on_finePhaSlider_valueChanged(int n) -{ - m_iqPha2=n; - iqPhase=10*m_iqPha1 + m_iqPha2; - ui->labPhaReal->setText (QString::number (0.01*iqPhase, 'f', 2)); -} - -void TxTune::set_iqAmp(int n) -{ - m_saveAmp=n; - m_iqAmp1=n/10; - m_iqAmp2=n%10; - ui->ampSlider->setValue(m_iqAmp1); - ui->fineAmpSlider->setValue(m_iqAmp2); -} - -void TxTune::set_iqPhase(int n) -{ - m_savePha=n; - m_iqPha1=n/10; - m_iqPha2=n%10; - ui->phaSlider->setValue(m_iqPha1); - ui->finePhaSlider->setValue(m_iqPha2); -} - -void TxTune::set_txPower(int n) -{ - m_saveTxPower=n; - ui->pwrSlider->setValue(n); -} - -void TxTune::on_cbTxImage_toggled(bool b) -{ - ui->ampSlider->setEnabled(b); - ui->fineAmpSlider->setEnabled(b); - ui->labAmp->setEnabled(b); - ui->labFineAmp->setEnabled(b); - ui->phaSlider->setEnabled(b); - ui->finePhaSlider->setEnabled(b); - ui->labPha->setEnabled(b); - ui->labFinePha->setEnabled(b); -} - -void TxTune::on_pbTune_clicked() -{ - bTune = !bTune; - if(bTune) { - QString style="QPushButton{background-color: red;}"; - ui->pbTune->setStyleSheet(style); - } else { - ui->pbTune->setStyleSheet(""); - } -} diff --git a/q65w/txtune.h b/q65w/txtune.h deleted file mode 100644 index e60015726..000000000 --- a/q65w/txtune.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef TXTUNE_H -#define TXTUNE_H - -#include - -namespace Ui { -class TxTune; -} - -class TxTune : public QDialog -{ - Q_OBJECT - -public: - explicit TxTune(QWidget *parent = 0); - ~TxTune(); - -public slots: - void accept(); - void reject(); - -private slots: - void on_pwrSlider_valueChanged(int n); - void on_ampSlider_valueChanged(int n); - void on_phaSlider_valueChanged(int n); - void on_cbTxImage_toggled(bool b); - void on_pbTune_clicked(); - void on_fineAmpSlider_valueChanged(int n); - void on_finePhaSlider_valueChanged(int n); - -public: - void set_iqAmp(int n); - void set_iqPhase(int n); - void set_txPower(int n); - -private: - qint32 m_iqAmp1; - qint32 m_iqAmp2; - qint32 m_iqPha1; - qint32 m_iqPha2; - qint32 m_saveAmp; - qint32 m_savePha; - qint32 m_saveTxPower; - - Ui::TxTune *ui; -}; - -#endif // TXTUNE_H diff --git a/q65w/txtune.ui b/q65w/txtune.ui deleted file mode 100644 index af78cd418..000000000 --- a/q65w/txtune.ui +++ /dev/null @@ -1,302 +0,0 @@ - - - TxTune - - - - 0 - 0 - 400 - 300 - - - - Tx Tune - - - - - 30 - 240 - 341 - 32 - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - false - - - - - - 13 - 38 - 351 - 191 - - - - - - - - 70 - 0 - - - - Tx Power: - - - - - - - 100 - - - 100 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 10 - - - - - - - Enable Tx I/Q Adjustment - - - - - - - false - - - - 70 - 0 - - - - I/Q Amplitude: - - - - - - - false - - - -100 - - - 100 - - - 0 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - false - - - Fine: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - -100 - - - 100 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - false - - - - 70 - 0 - - - - I/Q Phase: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - -100 - - - 100 - - - 0 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - false - - - Fine: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - false - - - -100 - - - 100 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - - - - - 1.0000 - - - Qt::AlignCenter - - - - - - - 0.000 - - - Qt::AlignCenter - - - - - - - Tune - - - - - - - 100 % - - - Qt::AlignCenter - - - - - - - - - - buttonBox - accepted() - TxTune - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - TxTune - reject() - - - 316 - 260 - - - 286 - 274 - - - - -