diff --git a/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp b/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp index 969c9bc51..cf7ea1cfa 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp +++ b/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp @@ -292,6 +292,9 @@ void AaroniaRTSAGui::updateSampleRateAndFrequency() m_deviceUISet->getSpectrum()->setSampleRate(m_deviceSampleRate); m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); ui->deviceRateText->setText(tr("%1M").arg((float)m_deviceSampleRate / 1000 / 1000)); + ui->centerFrequency->blockSignals(true); + ui->centerFrequency->setValue(m_deviceCenterFrequency / 1000); + ui->centerFrequency->blockSignals(true); } void AaroniaRTSAGui::openDeviceSettingsDialog(const QPoint& p) diff --git a/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp b/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp index f4f55100e..8d6c6232c 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp +++ b/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp @@ -43,7 +43,8 @@ MESSAGE_CLASS_DEFINITION(AaroniaRTSAInput::MsgSetStatus, Message) AaroniaRTSAInput::AaroniaRTSAInput(DeviceAPI *deviceAPI) : m_deviceAPI(deviceAPI), - m_sampleRate(2.0e5), + m_sampleRate(10000000), + m_centerFrequency(1450000), m_settings(), m_aaroniaRTSAWorker(nullptr), m_aaroniaRTSAWorkerThread(nullptr), @@ -220,18 +221,21 @@ bool AaroniaRTSAInput::handleMessage(const Message& message) return true; } - else if (AaroniaRTSAWorker::MsgReportSampleRate::match(message)) + else if (AaroniaRTSAWorker::MsgReportSampleRateAndFrequency::match(message)) { - AaroniaRTSAWorker::MsgReportSampleRate& report = (AaroniaRTSAWorker::MsgReportSampleRate&) message; + AaroniaRTSAWorker::MsgReportSampleRateAndFrequency& report = (AaroniaRTSAWorker::MsgReportSampleRateAndFrequency&) message; m_sampleRate = report.getSampleRate(); - qDebug() << "AaroniaRTSAInput::handleMessage: AaroniaRTSAWorker::MsgReportSampleRate: m_sampleRate: " << m_sampleRate; + m_centerFrequency = report.getCenterFrequency(); + qDebug() << "AaroniaRTSAInput::handleMessage: AaroniaRTSAWorker::MsgReportSampleRateAndFrequency:" + << " m_sampleRate: " << m_sampleRate + << " m-centerFrequency" << m_centerFrequency; if (!m_sampleFifo.setSize(m_sampleRate * 2)) { qCritical("AaroniaRTSAInput::AaroniaRTSAInput: Could not allocate SampleFifo"); } DSPSignalNotification *notif = new DSPSignalNotification( - m_sampleRate, m_settings.m_centerFrequency); + m_sampleRate, m_centerFrequency); m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); return true; diff --git a/plugins/samplesource/aaroniartsa/aaroniartsainput.h b/plugins/samplesource/aaroniartsa/aaroniartsainput.h index 2fbd1e6fa..f8fdd5701 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsainput.h +++ b/plugins/samplesource/aaroniartsa/aaroniartsainput.h @@ -156,6 +156,7 @@ private: DeviceAPI *m_deviceAPI; QMutex m_mutex; int m_sampleRate; + quint64 m_centerFrequency; AaroniaRTSASettings m_settings; AaroniaRTSAWorker* m_aaroniaRTSAWorker; QThread *m_aaroniaRTSAWorkerThread; diff --git a/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp b/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp index 1c61219b1..8758926ce 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp +++ b/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp @@ -16,10 +16,13 @@ /////////////////////////////////////////////////////////////////////////////////// #include + #include "util/messagequeue.h" +#include "dsp/dspcommands.h" + #include "aaroniartsaworker.h" -MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRate, Message) +MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRateAndFrequency, Message) AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) : QObject(), @@ -27,28 +30,11 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) : m_samplesBuf(), m_sampleFifo(sampleFifo), m_centerFrequency(1450000), - m_sampleRate(10.0e6), + m_sampleRate(10000000), m_inputMessageQueue(nullptr), - m_gain(20), - m_useAGC(true), m_status(0), m_convertBuffer(64e6) { - /*connect(&m_timer, SIGNAL(timeout()), this, SLOT(tick())); - - m_webSocket.setParent(this); - connect(&m_webSocket, &QWebSocket::connected, - this, &AaroniaRTSAWorker::onConnected); - connect(&m_webSocket, &QWebSocket::binaryMessageReceived, - this, &AaroniaRTSAWorker::onBinaryMessageReceived); - connect(&m_webSocket, QOverload::of(&QWebSocket::error), - this, &AaroniaRTSAWorker::onSocketError); - connect(&m_webSocket, &QWebSocket::disconnected, - this, &AaroniaRTSAWorker::onDisconnected); - -*/ - - // Initialize network manager mNetworkAccessManager = new QNetworkAccessManager(this); @@ -65,8 +51,6 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) : mPrevTime = 0; mPacketSamples = 0; - - } void AaroniaRTSAWorker::onSocketError(QAbstractSocket::SocketError error) @@ -146,10 +130,10 @@ void AaroniaRTSAWorker::onReadyRead() QTextStream qout(stdout); // read as many bytes as possible into input buffer - qint64 n = mReply->bytesAvailable(); - qint64 bs = mBuffer.size(); + qint64 n = mReply->bytesAvailable(); + qint64 bs = mBuffer.size(); mBuffer.resize(bs + n); - qint64 done = mReply->read(mBuffer.data() + bs, n); + qint64 done = mReply->read(mBuffer.data() + bs, n); mBuffer.resize(bs + done); // intialize parsing @@ -163,10 +147,10 @@ void AaroniaRTSAWorker::onReadyRead() if (mPacketSamples) { // enough samples - if (offset + mPacketSamples * 2 * sizeof(float) <= avail) + if (offset + mPacketSamples * 2 * sizeof(float) <= (unsigned long) avail) { // do something with the IQ data - const float * sp = (const float * )(mBuffer.constData() + offset); + const float *sp = (const float *)(mBuffer.constData() + offset); SampleVector::iterator it = m_convertBuffer.begin(); @@ -193,28 +177,31 @@ void AaroniaRTSAWorker::onReadyRead() mPacketSamples = 0; } else + { break; + } } else { // is there a complete JSON metadata object in the buffer int split = mBuffer.indexOf('\x1e', offset); - if (split != -1) + + if (split != -1) { // Extract it - QByteArray data = mBuffer.mid(offset, split - offset); + QByteArray data = mBuffer.mid(offset, split - offset); offset = split + 1; // Parse the JSON data QJsonParseError error; - QJsonDocument jdoc = QJsonDocument::fromJson(data, &error); + QJsonDocument jdoc = QJsonDocument::fromJson(data, &error); if (error.error == QJsonParseError::NoError) { // Extract fields of interest //double startTime = jdoc["startTime"].toDouble(), endTime = jdoc["endTime"].toDouble(); - int samples = jdoc["samples"].toInt(); + int samples = jdoc["samples"].toInt(); // Dump packet loss //if (startTime != mPrevTime) @@ -223,6 +210,23 @@ void AaroniaRTSAWorker::onReadyRead() // Switch to data phase //mPrevTime = endTime; mPacketSamples = samples; + // qDebug() << jdoc.toJson(); + quint64 endFreq = jdoc["endFrequency"].toDouble(); + quint64 startFreq = jdoc["startFrequency"].toDouble(); + int bw = endFreq - startFreq; + quint64 midFreq = (endFreq + startFreq) / 2; + + if ((bw != m_sampleRate) || (midFreq != m_centerFrequency)) + { + if (m_inputMessageQueue) + { + MsgReportSampleRateAndFrequency *msg = MsgReportSampleRateAndFrequency::create(bw, midFreq); + m_inputMessageQueue->push(msg); + } + + m_sampleRate = bw; + m_centerFrequency = midFreq; + } } else { @@ -231,7 +235,9 @@ void AaroniaRTSAWorker::onReadyRead() } } else + { break; + } } } diff --git a/plugins/samplesource/aaroniartsa/aaroniartsaworker.h b/plugins/samplesource/aaroniartsa/aaroniartsaworker.h index 55b50a382..f1e62c457 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsaworker.h +++ b/plugins/samplesource/aaroniartsa/aaroniartsaworker.h @@ -40,22 +40,25 @@ class AaroniaRTSAWorker : public QObject { Q_OBJECT public: - class MsgReportSampleRate : public Message { + class MsgReportSampleRateAndFrequency : public Message { MESSAGE_CLASS_DECLARATION public: int getSampleRate() const { return m_sampleRate; } + quint64 getCenterFrequency() const { return m_centerFrequency; } - static MsgReportSampleRate* create(int sampleRate) { - return new MsgReportSampleRate(sampleRate); + static MsgReportSampleRateAndFrequency* create(int sampleRate, quint64 centerFrequency) { + return new MsgReportSampleRateAndFrequency(sampleRate, centerFrequency); } private: int m_sampleRate; + quint64 m_centerFrequency; - MsgReportSampleRate(int sampleRate) : + MsgReportSampleRateAndFrequency(int sampleRate, qint64 centerFrequency) : Message(), - m_sampleRate(sampleRate) + m_sampleRate(sampleRate), + m_centerFrequency(centerFrequency) { } }; @@ -70,13 +73,10 @@ private: SampleSinkFifo* m_sampleFifo; QString m_serverAddress; - uint64_t m_centerFrequency; + quint64 m_centerFrequency; int m_sampleRate; MessageQueue *m_inputMessageQueue; - uint32_t m_gain; - bool m_useAGC; - int m_status; //!< See GUI for status number detail void sendCenterFrequency();