diff --git a/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp b/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp index cf7ea1cfa..142d77290 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp +++ b/plugins/samplesource/aaroniartsa/aaroniartsagui.cpp @@ -56,13 +56,13 @@ AaroniaRTSAGui::AaroniaRTSAGui(DeviceUISet *deviceUISet, QWidget* parent) : m_sampleSource = m_deviceUISet->m_deviceAPI->getSampleSource(); m_statusTooltips.push_back("Idle"); // 0 - m_statusTooltips.push_back("Connecting..."); // 1 + m_statusTooltips.push_back("Unstable"); // 1 m_statusTooltips.push_back("Connected"); // 2 m_statusTooltips.push_back("Error"); // 3 m_statusTooltips.push_back("Disconnected"); // 4 m_statusColors.push_back("gray"); // Idle - m_statusColors.push_back("rgb(232, 212, 35)"); // Connecting (yellow) + m_statusColors.push_back("rgb(232, 212, 35)"); // Unstable (yellow) m_statusColors.push_back("rgb(35, 138, 35)"); // Connected (green) m_statusColors.push_back("rgb(232, 85, 85)"); // Error (red) m_statusColors.push_back("rgb(232, 85, 232)"); // Disconnected (magenta) @@ -292,9 +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); + blockApplySettings(true); ui->centerFrequency->setValue(m_deviceCenterFrequency / 1000); - ui->centerFrequency->blockSignals(true); + blockApplySettings(false); } void AaroniaRTSAGui::openDeviceSettingsDialog(const QPoint& p) diff --git a/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp b/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp index 8d6c6232c..3d8ee210c 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp +++ b/plugins/samplesource/aaroniartsa/aaroniartsainput.cpp @@ -290,9 +290,9 @@ bool AaroniaRTSAInput::applySettings(const AaroniaRTSASettings& settings, const { emit setWorkerCenterFrequency(settings.m_centerFrequency); - DSPSignalNotification *notif = new DSPSignalNotification( - getSampleRate(), settings.m_centerFrequency); - m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); + // DSPSignalNotification *notif = new DSPSignalNotification( + // getSampleRate(), settings.m_centerFrequency); + // m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif); } if (settingsKeys.contains("useReverseAPI")) diff --git a/plugins/samplesource/aaroniartsa/aaroniartsasettings.h b/plugins/samplesource/aaroniartsa/aaroniartsasettings.h index 51166b99b..62eaa3922 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsasettings.h +++ b/plugins/samplesource/aaroniartsa/aaroniartsasettings.h @@ -24,6 +24,15 @@ struct AaroniaRTSASettings { + enum ConnectionStatus + { + ConnectionIdle, // 0 - gray + ConnectionUnstable, // 1 - yellow + ConnectionOK, // 2 - green + ConnectionError, // 3 - red + ConnectionDisconnected // 4 - magenta + }; + quint64 m_centerFrequency; QString m_serverAddress; diff --git a/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp b/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp index 8758926ce..462ee1e65 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp +++ b/plugins/samplesource/aaroniartsa/aaroniartsaworker.cpp @@ -20,6 +20,7 @@ #include "util/messagequeue.h" #include "dsp/dspcommands.h" +#include "aaroniartsasettings.h" #include "aaroniartsaworker.h" MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRateAndFrequency, Message) @@ -29,39 +30,58 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) : m_timer(this), m_samplesBuf(), m_sampleFifo(sampleFifo), - m_centerFrequency(1450000), - m_sampleRate(10000000), + m_centerFrequency(0), + m_sampleRate(1), m_inputMessageQueue(nullptr), - m_status(0), + m_status(AaroniaRTSASettings::ConnectionIdle), + mReply(nullptr), m_convertBuffer(64e6) { - // Initialize network manager + // Initialize network managers mNetworkAccessManager = new QNetworkAccessManager(this); // Request 16bit raw samples - QUrl url("http://localhost:55123/stream?format=float32"); + // m_serverAddress = "localhost:55123"; + // QUrl url(tr("http://%1/stream?format=float32").arg(m_serverAddress)); - QNetworkRequest req(url); - mReply = mNetworkAccessManager->get(req); + // QNetworkRequest req(url); + // mReply = mNetworkAccessManager->get(req); - // Connect Qt slots to network events - connect(mReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError))); - connect(mReply, SIGNAL(finished()), this, SLOT(onFinished())); - connect(mReply, SIGNAL(readyRead()), this, SLOT(onReadyRead())); + // // Connect Qt slots to network events + // connect(mReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError))); + // connect(mReply, SIGNAL(finished()), this, SLOT(onFinished())); + // connect(mReply, SIGNAL(readyRead()), this, SLOT(onReadyRead())); mPrevTime = 0; mPacketSamples = 0; } +AaroniaRTSAWorker::~AaroniaRTSAWorker() +{ + if (mReply) + { + // disconnect previous sugnals + disconnect(mReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError))); + disconnect(mReply, SIGNAL(finished()), this, SLOT(onFinished())); + disconnect(mReply, SIGNAL(readyRead()), this, SLOT(onReadyRead())); + + mReply->abort(); + mReply->deleteLater(); + } + + mNetworkAccessManager->deleteLater(); +} + void AaroniaRTSAWorker::onSocketError(QAbstractSocket::SocketError error) { (void) error; - m_status = 3; - emit updateStatus(3); + m_status = AaroniaRTSASettings::ConnectionError; + emit updateStatus(m_status); } void AaroniaRTSAWorker::sendCenterFrequency() { + qDebug("AaroniaRTSAWorker::sendCenterFrequency: %llu", m_centerFrequency); //if (!m_webSocket.isValid()) // return; @@ -84,21 +104,34 @@ void AaroniaRTSAWorker::onCenterFrequencyChanged(quint64 centerFrequency) void AaroniaRTSAWorker::onServerAddressChanged(QString serverAddress) { - /*if (m_serverAddress == serverAddress) { - return; + m_status = AaroniaRTSASettings::ConnectionDisconnected; + updateStatus(m_status); + + if (mReply) + { + // disconnect previous sugnals + disconnect(mReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError))); + disconnect(mReply, SIGNAL(finished()), this, SLOT(onFinished())); + disconnect(mReply, SIGNAL(readyRead()), this, SLOT(onReadyRead())); + + mReply->abort(); + mReply->deleteLater(); } - m_serverAddress = serverAddress; + QUrl url(tr("http://%1/stream?format=float32").arg(serverAddress)); + QNetworkRequest req(url); + mReply = mNetworkAccessManager->get(req); - m_status = 1; - emit updateStatus(1); + // Connect Qt slots to network events + connect(mReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError))); + connect(mReply, SIGNAL(finished()), this, SLOT(onFinished())); + connect(mReply, SIGNAL(readyRead()), this, SLOT(onReadyRead())); - QString url("ws://"); - url.append(m_serverAddress); - url.append("/rtsa/"); - url.append(QString::number(QDateTime::currentMSecsSinceEpoch())); - url.append("/SND"); - m_webSocket.open(QUrl(url));*/ + mPrevTime = 0; + mPacketSamples = 0; + m_sampleRate = 1; + m_centerFrequency = 0; + m_serverAddress = serverAddress; } void AaroniaRTSAWorker::tick() @@ -109,8 +142,11 @@ void AaroniaRTSAWorker::tick() void AaroniaRTSAWorker::onError(QNetworkReply::NetworkError code) { + (void) code; QTextStream qerr(stderr); qerr << "Network Error: " + mReply->errorString(); + m_status = 3; + emit updateStatus(3); } void AaroniaRTSAWorker::onFinished() @@ -127,6 +163,12 @@ void AaroniaRTSAWorker::onFinished() // bytes received from the socket void AaroniaRTSAWorker::onReadyRead() { + if (m_status != AaroniaRTSASettings::ConnectionOK) + { + m_status = AaroniaRTSASettings::ConnectionOK; + emit updateStatus(m_status); + } + QTextStream qout(stdout); // read as many bytes as possible into input buffer diff --git a/plugins/samplesource/aaroniartsa/aaroniartsaworker.h b/plugins/samplesource/aaroniartsa/aaroniartsaworker.h index f1e62c457..3428304d1 100644 --- a/plugins/samplesource/aaroniartsa/aaroniartsaworker.h +++ b/plugins/samplesource/aaroniartsa/aaroniartsaworker.h @@ -63,6 +63,7 @@ public: }; AaroniaRTSAWorker(SampleSinkFifo* sampleFifo); + ~AaroniaRTSAWorker(); int getStatus() const { return m_status; } void setInputMessageQueue(MessageQueue *messageQueue) { m_inputMessageQueue = messageQueue; } @@ -83,20 +84,15 @@ private: // QT htttp client - QNetworkAccessManager * mNetworkAccessManager; - + QNetworkAccessManager *mNetworkAccessManager; // Reply from the HTTP server - QNetworkReply * mReply; - + QNetworkReply *mReply; // Input buffer - QByteArray mBuffer; - + QByteArray mBuffer; // Number of IQ sample pairs in the current packet - int mPacketSamples; - + int mPacketSamples; // Previous sample end time to check for packet loss - double mPrevTime; - + double mPrevTime; //Decimators m_decimatorsIQ; DecimatorsFI m_decimatorsFloatIQ; @@ -113,7 +109,6 @@ public slots: private slots: void onSocketError(QAbstractSocket::SocketError error); - void onError(QNetworkReply::NetworkError code); void onFinished(void); void onReadyRead(void);