diff --git a/JAERO/audioreceiver.cpp b/JAERO/audioreceiver.cpp index cae0dd7..2cffb7d 100644 --- a/JAERO/audioreceiver.cpp +++ b/JAERO/audioreceiver.cpp @@ -1,9 +1,5 @@ #include "audioreceiver.h" #include "QDebug" -#include -#include "QDataStream" -#include "QDateTime" - #include void AudioReceiver::ZMQaudioStart(QString address, QString topic) @@ -13,7 +9,6 @@ void AudioReceiver::ZMQaudioStart(QString address, QString topic) setParameters(address,topic); future = QtConcurrent::run([=]() { process(); - qDebug()<<"Thread finished"; return; }); //wait till the thread is running so ZMQaudioStop functions correctly @@ -37,17 +32,21 @@ void AudioReceiver::process() char buf [recsize]; char topic[20]; + unsigned char rate[4]; + quint32 sampleRate; running = true; while(running) { zmq_recv(subscriber, topic, 20, 0); - int received = zmq_recv(subscriber, buf, recsize, ZMQ_DONTWAIT); + int received = zmq_recv(subscriber, rate, 4, ZMQ_DONTWAIT); + memcpy(&sampleRate, rate, 4); + received = zmq_recv(subscriber, buf, recsize, ZMQ_DONTWAIT); if(received>=0) { QByteArray qdata(buf, received); - emit recAudio(qdata); + emit recAudio(qdata,sampleRate); } else { diff --git a/JAERO/audioreceiver.h b/JAERO/audioreceiver.h index af2348a..9ff13b7 100644 --- a/JAERO/audioreceiver.h +++ b/JAERO/audioreceiver.h @@ -49,7 +49,7 @@ public slots: QFuture future; signals: - void recAudio(const QByteArray & audio); + void recAudio(const QByteArray & audio,quint32 sampleRate); }; diff --git a/JAERO/burstmskdemodulator.cpp b/JAERO/burstmskdemodulator.cpp index 2b739e7..48841a8 100644 --- a/JAERO/burstmskdemodulator.cpp +++ b/JAERO/burstmskdemodulator.cpp @@ -759,9 +759,11 @@ void BurstMskDemodulator::DCDstatSlot(bool _dcd) dcd=_dcd; } -void BurstMskDemodulator::dataReceived(const QByteArray &audio) +void BurstMskDemodulator::dataReceived(const QByteArray &audio,quint32 sampleRate) { - + if(sampleRate!=Fs) + { + qDebug()<<"Sample rate not supported by demodulator"; + } writeData(audio, audio.length()); - } diff --git a/JAERO/burstmskdemodulator.h b/JAERO/burstmskdemodulator.h index f4dd064..51aa633 100644 --- a/JAERO/burstmskdemodulator.h +++ b/JAERO/burstmskdemodulator.h @@ -213,7 +213,7 @@ class BurstMskDemodulator : public QIODevice public slots: void CenterFreqChangedSlot(double freq_center); void DCDstatSlot(bool dcd); - void dataReceived(const QByteArray &audio); + void dataReceived(const QByteArray &audio, quint32 sampleRate); }; diff --git a/JAERO/burstoqpskdemodulator.cpp b/JAERO/burstoqpskdemodulator.cpp index 2d3a82e..6c9a388 100644 --- a/JAERO/burstoqpskdemodulator.cpp +++ b/JAERO/burstoqpskdemodulator.cpp @@ -303,11 +303,13 @@ qint64 BurstOqpskDemodulator::writeData(const char *data, qint64 len) return len; } -void BurstOqpskDemodulator::dataReceived(const QByteArray &audio) +void BurstOqpskDemodulator::dataReceived(const QByteArray &audio,quint32 sampleRate) { - + if(sampleRate!=Fs) + { + qDebug()<<"Sample rate not supported by demodulator"; + } writeData(audio, audio.length()); - } void BurstOqpskDemodulator::writeDataSlot(const char *data, qint64 len) diff --git a/JAERO/burstoqpskdemodulator.h b/JAERO/burstoqpskdemodulator.h index b808340..384f4ac 100644 --- a/JAERO/burstoqpskdemodulator.h +++ b/JAERO/burstoqpskdemodulator.h @@ -225,7 +225,7 @@ class BurstOqpskDemodulator : public QIODevice public slots: void CenterFreqChangedSlot(double freq_center); void writeDataSlot(const char *data, qint64 len); - void dataReceived(const QByteArray &audio); + void dataReceived(const QByteArray &audio, quint32 sampleRate); }; diff --git a/JAERO/mainwindow.cpp b/JAERO/mainwindow.cpp index b9b3a49..0d8064e 100644 --- a/JAERO/mainwindow.cpp +++ b/JAERO/mainwindow.cpp @@ -284,7 +284,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiooqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audiooqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audiooqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audiooqpskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audiooqpskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some burstoqpsk connections disconnect(audioburstoqpskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -299,7 +299,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstoqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audioburstoqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audioburstoqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audioburstoqpskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audioburstoqpskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //burstdemod demod2 disconnect(audioburstoqpskdemodulator->demod2, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -328,7 +328,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstmskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audioburstmskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audioburstmskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audioburstmskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audioburstmskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some msk connections connect(audiomskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -343,7 +343,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) connect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiomskdemodulator,SLOT(CenterFreqChangedSlot(double))); connect(audiomskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); connect(audiomskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)), audiomskdemodulator, SLOT(dataReceived(QByteArray)), Qt::UniqueConnection); + connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)), audiomskdemodulator, SLOT(dataReceived(QByteArray,quint32)), Qt::UniqueConnection); break; case OQPSK: //opqsk @@ -360,7 +360,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiomskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audiomskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audiomskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audiomskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audiomskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some burstoqpsk connections disconnect(audioburstoqpskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -375,7 +375,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstoqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audioburstoqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audioburstoqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audioburstoqpskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audioburstoqpskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //burstdemod demod2 disconnect(audioburstoqpskdemodulator->demod2, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -404,7 +404,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstmskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audioburstmskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audioburstmskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audioburstmskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audioburstmskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some oqpsk connections connect(audiooqpskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -419,7 +419,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) connect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiooqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); connect(audiooqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); connect(audiooqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)), audiooqpskdemodulator, SLOT(dataReceived(QByteArray)), Qt::UniqueConnection); + connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)), audiooqpskdemodulator, SLOT(dataReceived(QByteArray,quint32)), Qt::UniqueConnection); break; case BURSTOQPSK: //burstopqsk @@ -437,7 +437,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiomskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audiomskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audiomskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audiomskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audiomskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some oqpsk connections disconnect(audiooqpskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -452,7 +452,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiooqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audiooqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audiooqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audiooqpskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audiooqpskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some burst msk connections disconnect(audioburstmskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -467,7 +467,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstmskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audioburstmskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audioburstmskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audioburstmskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audioburstmskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some burstoqpsk connections connect(audioburstoqpskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -482,7 +482,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) connect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstoqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); connect(audioburstoqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); connect(audioburstoqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)), audioburstoqpskdemodulator, SLOT(dataReceived(QByteArray))); + connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)), audioburstoqpskdemodulator, SLOT(dataReceived(QByteArray,quint32))); //burstdemod demod2 connect(audioburstoqpskdemodulator->demod2, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -515,7 +515,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiomskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audiomskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audiomskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audiomskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audiomskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some oqpsk connections disconnect(audiooqpskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -530,7 +530,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audiooqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audiooqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audiooqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audiooqpskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audiooqpskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //some burstoqpsk connections disconnect(audioburstoqpskdemodulator, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -545,7 +545,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) disconnect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstoqpskdemodulator,SLOT(CenterFreqChangedSlot(double))); disconnect(audioburstoqpskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); disconnect(audioburstoqpskdemodulator, SIGNAL(SignalStatus(bool)),aerol,SLOT(SignalStatusSlot(bool))); - disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)),audioburstoqpskdemodulator,SLOT(dataReceived(QByteArray))); + disconnect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)),audioburstoqpskdemodulator,SLOT(dataReceived(QByteArray,quint32))); //burstdemod demod2 disconnect(audioburstoqpskdemodulator->demod2, SIGNAL(Plottables(double,double,double)), this,SLOT(PlottablesSlot(double,double,double))); @@ -574,7 +574,7 @@ void MainWindow::selectdemodulatorconnections(DemodType demodtype) connect(ui->spectrumdisplay, SIGNAL(CenterFreqChanged(double)), audioburstmskdemodulator,SLOT(CenterFreqChangedSlot(double))); connect(audioburstmskdemodulator, SIGNAL(BitRateChanged(double,bool)), aerol,SLOT(setSettings(double,bool))); connect(audioburstmskdemodulator, SIGNAL(SignalStatus(bool)), aerol,SLOT(SignalStatusSlot(bool))); - connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&)), audioburstmskdemodulator, SLOT(dataReceived(QByteArray))); + connect(zmq_audio_receiver, SIGNAL(recAudio(const QByteArray&,quint32)), audioburstmskdemodulator, SLOT(dataReceived(QByteArray,quint32))); break; } diff --git a/JAERO/mskdemodulator.cpp b/JAERO/mskdemodulator.cpp index 0224a78..856dfea 100644 --- a/JAERO/mskdemodulator.cpp +++ b/JAERO/mskdemodulator.cpp @@ -134,6 +134,7 @@ void MskDemodulator::invalidatesettings() void MskDemodulator::setSettings(Settings _settings) { + last_applied_settings=_settings; if(_settings.Fs!=Fs)emit SampleRateChanged(_settings.Fs); Fs=_settings.Fs; lockingbw=_settings.lockingbw; @@ -524,12 +525,13 @@ void MskDemodulator::DCDstatSlot(bool _dcd) } - -void MskDemodulator::dataReceived(const QByteArray &audio) +void MskDemodulator::dataReceived(const QByteArray &audio,quint32 sampleRate) { - + if(sampleRate!=Fs) + { + qDebug()<<"Sample rate different than expected. Trying to change demodulator sample rate"; + last_applied_settings.Fs=sampleRate; + setSettings(last_applied_settings); + } writeData(audio, audio.length()); - } - - diff --git a/JAERO/mskdemodulator.h b/JAERO/mskdemodulator.h index ddcfb06..6e5aedc 100644 --- a/JAERO/mskdemodulator.h +++ b/JAERO/mskdemodulator.h @@ -142,6 +142,7 @@ class MskDemodulator : public QIODevice int coarseCounter; bool cpuReduce; + Settings last_applied_settings; signals: void ScatterPoints(const QVector &buffer); @@ -162,7 +163,7 @@ public slots: void FreqOffsetEstimateSlot(double freq_offset_est); void CenterFreqChangedSlot(double freq_center); void DCDstatSlot(bool dcd); - void dataReceived(const QByteArray &audio); + void dataReceived(const QByteArray &audio, quint32 sampleRate); }; diff --git a/JAERO/oqpskdemodulator.cpp b/JAERO/oqpskdemodulator.cpp index a65f650..2b4c149 100644 --- a/JAERO/oqpskdemodulator.cpp +++ b/JAERO/oqpskdemodulator.cpp @@ -679,11 +679,11 @@ void OqpskDemodulator::DCDstatSlot(bool _dcd) } -void OqpskDemodulator::dataReceived(const QByteArray &audio) +void OqpskDemodulator::dataReceived(const QByteArray &audio,quint32 sampleRate) { - + if(sampleRate!=Fs) + { + qDebug()<<"Sample rate not supported by demodulator"; + } writeData(audio, audio.length()); - } - - diff --git a/JAERO/oqpskdemodulator.h b/JAERO/oqpskdemodulator.h index e2422f1..a50a371 100644 --- a/JAERO/oqpskdemodulator.h +++ b/JAERO/oqpskdemodulator.h @@ -147,7 +147,7 @@ public slots: void FreqOffsetEstimateSlot(double freq_offset_est); void CenterFreqChangedSlot(double freq_center); void DCDstatSlot(bool _dcd); - void dataReceived(const QByteArray &audio); + void dataReceived(const QByteArray &audio, quint32 sampleRate); };