diff --git a/plugins/samplesink/remoteoutput/remoteoutput.cpp b/plugins/samplesink/remoteoutput/remoteoutput.cpp index a8d28cf48..50393200a 100644 --- a/plugins/samplesink/remoteoutput/remoteoutput.cpp +++ b/plugins/samplesink/remoteoutput/remoteoutput.cpp @@ -41,6 +41,10 @@ MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgConfigureRemoteOutput, Message) MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgConfigureRemoteOutputWork, Message) MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgStartStop, Message) MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgConfigureRemoteOutputChunkCorrection, Message) +MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgConfigureRemoteOutputSampleRate, Message) +MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgReportRemoteData, Message) +MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgReportRemoteFixedData, Message) +MESSAGE_CLASS_DEFINITION(RemoteOutput::MsgRequestFixedData, Message) const uint32_t RemoteOutput::NbSamplesForRateCorrection = 5000000; @@ -53,7 +57,8 @@ RemoteOutput::RemoteOutput(DeviceAPI *deviceAPI) : m_startingTimeStamp(0), m_masterTimer(deviceAPI->getMasterTimer()), m_tickCount(0), - m_tickMultiplier(20), + m_greaterTickCount(0), + m_tickMultiplier(1), m_lastRemoteSampleCount(0), m_lastSampleCount(0), m_lastRemoteTimestampRateCorrection(0), @@ -243,6 +248,19 @@ bool RemoteOutput::handleMessage(const Message& message) return true; } + else if (MsgRequestFixedData::match(message)) + { + QString reportURL; + + reportURL = QString("http://%1:%2/sdrangel") + .arg(m_settings.m_apiAddress) + .arg(m_settings.m_apiPort); + + m_networkRequest.setUrl(QUrl(reportURL)); + m_networkManager->get(m_networkRequest); + + return true; + } else { return false; @@ -284,8 +302,8 @@ void RemoteOutput::applySettings(const RemoteOutputSettings& settings, bool forc } m_tickMultiplier = (21*NbSamplesForRateCorrection) / (2*settings.m_sampleRate); // two times per sample filling period plus small extension - m_tickMultiplier = m_tickMultiplier < 20 ? 20 : m_tickMultiplier; // not below half a second - + m_tickMultiplier /= 20; // greter tick (one per second) + m_tickMultiplier = m_tickMultiplier < 1 ? 1 : m_tickMultiplier; // not below 1 second forwardChange = true; } @@ -473,7 +491,7 @@ void RemoteOutput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& respon void RemoteOutput::tick() { - if (++m_tickCount == m_tickMultiplier) + if (++m_tickCount == 20) // Every second { QString reportURL; @@ -530,22 +548,44 @@ void RemoteOutput::analyzeApiReply(const QJsonObject& jsonObject, const QString& { if (jsonObject.contains("RemoteSourceReport")) { + MsgReportRemoteData::RemoteData msgRemoteData; QJsonObject report = jsonObject["RemoteSourceReport"].toObject(); m_settings.m_centerFrequency = report["deviceCenterFreq"].toInt(); m_centerFrequency = m_settings.m_centerFrequency * 1000; + msgRemoteData.m_centerFrequency = m_centerFrequency; + int queueSize = report["queueSize"].toInt(); + queueSize = queueSize == 0 ? 20 : queueSize; + msgRemoteData.m_queueSize = queueSize; + int queueLength = report["queueLength"].toInt(); + msgRemoteData.m_queueLength = queueLength; + int queueLengthPercent = (queueLength*100)/queueSize; + uint64_t remoteTimestampUs = report["tvSec"].toInt()*1000000ULL + report["tvUSec"].toInt(); + msgRemoteData.m_timestampUs = remoteTimestampUs; + int intRemoteSampleCount = report["samplesCount"].toInt(); + uint32_t remoteSampleCount = intRemoteSampleCount < 0 ? 0 : intRemoteSampleCount; + msgRemoteData.m_sampleCount = remoteSampleCount; + int remoteRate = report["deviceSampleRate"].toInt(); + msgRemoteData.m_sampleRate = remoteRate; + int unrecoverableCount = report["uncorrectableErrorsCount"].toInt(); + msgRemoteData.m_unrecoverableCount = unrecoverableCount; + int recoverableCount = report["correctableErrorsCount"].toInt(); + msgRemoteData.m_recoverableCount = recoverableCount; + + if (m_guiMessageQueue) + { + MsgReportRemoteData *msg = MsgReportRemoteData::create(msgRemoteData); + m_guiMessageQueue->push(msg); + } if (!m_remoteOutputWorker) { return; } - int queueSize = report["queueSize"].toInt(); - queueSize = queueSize == 0 ? 10 : queueSize; - int queueLength = report["queueLength"].toInt(); - int queueLengthPercent = (queueLength*100)/queueSize; - uint64_t remoteTimestampUs = report["tvSec"].toInt()*1000000ULL + report["tvUSec"].toInt(); + if (++m_greaterTickCount != m_tickMultiplier) { + return; + } - uint32_t remoteSampleCountDelta, remoteSampleCount; - remoteSampleCount = report["samplesCount"].toInt(); + uint32_t remoteSampleCountDelta; if (remoteSampleCount < m_lastRemoteSampleCount) { remoteSampleCountDelta = (0xFFFFFFFFU - m_lastRemoteSampleCount) + remoteSampleCount + 1; @@ -596,11 +636,41 @@ void RemoteOutput::analyzeApiReply(const QJsonObject& jsonObject, const QString& m_lastRemoteSampleCount = remoteSampleCount; m_lastSampleCount = sampleCount; m_lastQueueLength = queueLength; + m_greaterTickCount = 0; } else if (jsonObject.contains("remoteOutputSettings")) { qDebug("RemoteOutput::analyzeApiReply: reply:\n%s", answer.toStdString().c_str()); } + else if (jsonObject.contains("version")) + { + MsgReportRemoteFixedData::RemoteData msgRemoteFixedData; + msgRemoteFixedData.m_version = jsonObject["version"].toString(); + + if (jsonObject.contains("qtVersion")) { + msgRemoteFixedData.m_qtVersion = jsonObject["qtVersion"].toString(); + } + + if (jsonObject.contains("architecture")) { + msgRemoteFixedData.m_architecture = jsonObject["architecture"].toString(); + } + + if (jsonObject.contains("os")) { + msgRemoteFixedData.m_os = jsonObject["os"].toString(); + } + + if (jsonObject.contains("dspRxBits") && jsonObject.contains("dspTxBits")) + { + msgRemoteFixedData.m_rxBits = jsonObject["dspRxBits"].toInt(); + msgRemoteFixedData.m_txBits = jsonObject["dspTxBits"].toInt(); + } + + if (m_guiMessageQueue) + { + MsgReportRemoteFixedData *msg = MsgReportRemoteFixedData::create(msgRemoteFixedData); + m_guiMessageQueue->push(msg); + } + } } void RemoteOutput::sampleRateCorrection(double remoteTimeDeltaUs, double timeDeltaUs, uint32_t remoteSampleCount, uint32_t sampleCount) diff --git a/plugins/samplesink/remoteoutput/remoteoutput.h b/plugins/samplesink/remoteoutput/remoteoutput.h index d5ab10261..4ce97a2bc 100644 --- a/plugins/samplesink/remoteoutput/remoteoutput.h +++ b/plugins/samplesink/remoteoutput/remoteoutput.h @@ -123,6 +123,100 @@ public: { } }; + class MsgConfigureRemoteOutputSampleRate : public Message { + MESSAGE_CLASS_DECLARATION + + public: + int getSampleRate() const { return m_sampleRate; } + + static MsgConfigureRemoteOutputSampleRate* create(int sampleRate) { + return new MsgConfigureRemoteOutputSampleRate(sampleRate); + } + + private: + int m_sampleRate; + + MsgConfigureRemoteOutputSampleRate(int sampleRate) : + Message(), + m_sampleRate(sampleRate) + { } + }; + + class MsgReportRemoteData : public Message { + MESSAGE_CLASS_DECLARATION + + public: + struct RemoteData + { + quint64 m_centerFrequency; //!< Center frequency where the stream is placed + int m_sampleRate; //!< Sample rate requested by remote + int m_queueSize; //!< Remote data read queue size + int m_queueLength; //!< Remote data queue length + int m_unrecoverableCount; //!< Number of unrecoverable errors from FEC + int m_recoverableCount; //!< Number of recoverable errors from FEC + uint64_t m_timestampUs; //!< Unix time stamp of request in microseconds + uint32_t m_sampleCount; //!< Number of samples processed in the remote at request time + }; + + const RemoteData& getData() const { return m_remoteData; } + + static MsgReportRemoteData* create(const RemoteData& remoteData) { + return new MsgReportRemoteData(remoteData); + } + + private: + RemoteData m_remoteData; + + MsgReportRemoteData(const RemoteData& remoteData) : + Message(), + m_remoteData(remoteData) + {} + }; + + class MsgReportRemoteFixedData : public Message { + MESSAGE_CLASS_DECLARATION + + public: + struct RemoteData + { + QString m_version; //!< Remote SDRangel version + QString m_qtVersion; //!< Remote Qt version used to build SDRangel + QString m_architecture; //!< Remote CPU architecture + QString m_os; //!< Remote O/S + int m_rxBits; //!< Number of bits used for I or Q sample on Rx side + int m_txBits; //!< Number of bits used for I or Q sample on Tx side + }; + + const RemoteData& getData() const { return m_remoteData; } + + static MsgReportRemoteFixedData* create(const RemoteData& remoteData) { + return new MsgReportRemoteFixedData(remoteData); + } + + private: + RemoteData m_remoteData; + + MsgReportRemoteFixedData(const RemoteData& remoteData) : + Message(), + m_remoteData(remoteData) + {} + }; + + class MsgRequestFixedData : public Message { + MESSAGE_CLASS_DECLARATION + + public: + static MsgRequestFixedData* create() { + return new MsgRequestFixedData(); + } + + private: + MsgRequestFixedData() : + Message() + {} + }; + + RemoteOutput(DeviceAPI *deviceAPI); virtual ~RemoteOutput(); virtual void destroy(); @@ -186,8 +280,9 @@ private: QString m_deviceDescription; std::time_t m_startingTimeStamp; const QTimer& m_masterTimer; - uint32_t m_tickCount; - uint32_t m_tickMultiplier; + uint32_t m_tickCount; // for 50 ms timer + uint32_t m_greaterTickCount; // for 1 s derived timer + uint32_t m_tickMultiplier; // for greater tick count QNetworkAccessManager *m_networkManager; QNetworkRequest m_networkRequest; diff --git a/plugins/samplesink/remoteoutput/remoteoutputgui.cpp b/plugins/samplesink/remoteoutput/remoteoutputgui.cpp index 7c4f76376..c48861a54 100644 --- a/plugins/samplesink/remoteoutput/remoteoutputgui.cpp +++ b/plugins/samplesink/remoteoutput/remoteoutputgui.cpp @@ -20,9 +20,6 @@ #include #include #include -#include -#include -#include #include #include @@ -51,7 +48,7 @@ RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* pare ui(new Ui::RemoteOutputGui), m_deviceUISet(deviceUISet), m_settings(), - m_deviceSampleSink(0), + m_remoteOutput(0), m_deviceCenterFrequency(0), m_samplesCount(0), m_tickCount(0), @@ -83,13 +80,10 @@ RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* pare connect(&m_statusTimer, SIGNAL(timeout()), this, SLOT(updateStatus())); m_statusTimer.start(500); - m_deviceSampleSink = (RemoteOutput*) m_deviceUISet->m_deviceAPI->getSampleSink(); + m_remoteOutput = (RemoteOutput*) m_deviceUISet->m_deviceAPI->getSampleSink(); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); - m_networkManager = new QNetworkAccessManager(); - connect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*))); - m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); m_time.start(); @@ -105,8 +99,6 @@ RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* pare RemoteOutputSinkGui::~RemoteOutputSinkGui() { - disconnect(m_networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkManagerFinished(QNetworkReply*))); - delete m_networkManager; delete ui; } @@ -171,6 +163,18 @@ bool RemoteOutputSinkGui::handleMessage(const Message& message) ui->startStop->setChecked(notif.getStartStop()); blockApplySettings(false); return true; + } + else if (RemoteOutput::MsgReportRemoteData::match(message)) + { + const RemoteOutput::MsgReportRemoteData& report = (const RemoteOutput::MsgReportRemoteData&) message; + displayRemoteData(report.getData()); + return true; + } + else if (RemoteOutput::MsgReportRemoteFixedData::match(message)) + { + const RemoteOutput::MsgReportRemoteFixedData& report = (const RemoteOutput::MsgReportRemoteFixedData&) message; + displayRemoteFixedData(report.getData()); + return true; } else { @@ -239,7 +243,7 @@ void RemoteOutputSinkGui::updateHardware() { qDebug() << "RemoteOutputSinkGui::updateHardware"; RemoteOutput::MsgConfigureRemoteOutput* message = RemoteOutput::MsgConfigureRemoteOutput::create(m_settings, m_forceSettings); - m_deviceSampleSink->getInputMessageQueue()->push(message); + m_remoteOutput->getInputMessageQueue()->push(message); m_forceSettings = false; m_updateTimer.stop(); } @@ -323,9 +327,8 @@ void RemoteOutputSinkGui::on_apiAddress_returnPressed() m_settings.m_apiAddress = ui->apiAddress->text(); sendSettings(); - QString infoURL = QString("http://%1:%2/sdrangel").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort); - m_networkRequest.setUrl(QUrl(infoURL)); - m_networkManager->get(m_networkRequest); + RemoteOutput::MsgRequestFixedData *msg = RemoteOutput::MsgRequestFixedData::create(); + m_remoteOutput->getInputMessageQueue()->push(msg); } void RemoteOutputSinkGui::on_apiPort_returnPressed() @@ -341,9 +344,8 @@ void RemoteOutputSinkGui::on_apiPort_returnPressed() sendSettings(); - QString infoURL = QString("http://%1:%2/sdrangel").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort); - m_networkRequest.setUrl(QUrl(infoURL)); - m_networkManager->get(m_networkRequest); + RemoteOutput::MsgRequestFixedData *msg = RemoteOutput::MsgRequestFixedData::create(); + m_remoteOutput->getInputMessageQueue()->push(msg); } void RemoteOutputSinkGui::on_dataAddress_returnPressed() @@ -381,9 +383,8 @@ void RemoteOutputSinkGui::on_apiApplyButton_clicked(bool checked) sendSettings(); - QString infoURL = QString("http://%1:%2/sdrangel").arg(m_settings.m_apiAddress).arg(m_settings.m_apiPort); - m_networkRequest.setUrl(QUrl(infoURL)); - m_networkManager->get(m_networkRequest); + RemoteOutput::MsgRequestFixedData *msg = RemoteOutput::MsgRequestFixedData::create(); + m_remoteOutput->getInputMessageQueue()->push(msg); } void RemoteOutputSinkGui::on_dataApplyButton_clicked(bool checked) @@ -407,7 +408,7 @@ void RemoteOutputSinkGui::on_startStop_toggled(bool checked) if (m_doApplySettings) { RemoteOutput::MsgStartStop *message = RemoteOutput::MsgStartStop::create(checked); - m_deviceSampleSink->getInputMessageQueue()->push(message); + m_remoteOutput->getInputMessageQueue()->push(message); } } @@ -457,146 +458,62 @@ void RemoteOutputSinkGui::displayEventTimer() void RemoteOutputSinkGui::tick() { - if (++m_tickCount == 20) // once per second - { - QString reportURL; - - reportURL = QString("http://%1:%2/sdrangel/deviceset/%3/channel/%4/report") - .arg(m_settings.m_apiAddress) - .arg(m_settings.m_apiPort) - .arg(m_settings.m_deviceIndex) - .arg(m_settings.m_channelIndex); - m_networkRequest.setUrl(QUrl(reportURL)); - m_networkManager->get(m_networkRequest); - - displayEventTimer(); - - m_tickCount = 0; - } } -void RemoteOutputSinkGui::networkManagerFinished(QNetworkReply *reply) +void RemoteOutputSinkGui::displayRemoteData(const RemoteOutput::MsgReportRemoteData::RemoteData& remoteData) { - if (reply->error()) - { - ui->apiAddressLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }"); - ui->statusText->setText(reply->errorString()); - } - else - { - QString answer = reply->readAll(); + m_deviceCenterFrequency = remoteData.m_centerFrequency; + m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); + ui->centerFrequency->setText(QString("%L1").arg(m_deviceCenterFrequency)); + ui->remoteRateText->setText(tr("%1k").arg((float)(remoteData.m_sampleRate) / 1000)); + QString queueLengthText = QString("%1/%2").arg(remoteData.m_queueLength).arg(remoteData.m_queueSize); + ui->queueLengthText->setText(queueLengthText); + int queueLengthPercent = (remoteData.m_queueLength*100)/remoteData.m_queueSize; + ui->queueLengthGauge->setValue(queueLengthPercent); - try - { - QByteArray jsonBytes(answer.toStdString().c_str()); - QJsonParseError error; - QJsonDocument doc = QJsonDocument::fromJson(jsonBytes, &error); - - if (error.error == QJsonParseError::NoError) - { - ui->apiAddressLabel->setStyleSheet("QLabel { background-color : green; }"); - ui->statusText->setText(QString("API OK")); - analyzeApiReply(doc.object()); - } - else - { - ui->apiAddressLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }"); - QString errorMsg = QString("Reply JSON error: ") + error.errorString() + QString(" at offset ") + QString::number(error.offset); - ui->statusText->setText(QString("JSON error. See log")); - qInfo().noquote() << "RemoteOutputSinkGui::networkManagerFinished" << errorMsg; - } - } - catch (const std::exception& ex) - { - ui->apiAddressLabel->setStyleSheet("QLabel { background:rgb(79,79,79); }"); - QString errorMsg = QString("Error parsing request: ") + ex.what(); - ui->statusText->setText("Error parsing request. See log for details"); - qInfo().noquote() << "RemoteOutputSinkGui::networkManagerFinished" << errorMsg; - } + if (!m_resetCounts) + { + int recoverableCountDelta = remoteData.m_recoverableCount - m_lastCountRecovered; + int unrecoverableCountDelta = remoteData.m_unrecoverableCount - m_lastCountUnrecoverable; + displayEventStatus(recoverableCountDelta, unrecoverableCountDelta); + m_countRecovered += recoverableCountDelta; + m_countUnrecoverable += unrecoverableCountDelta; + displayEventCounts(); } - reply->deleteLater(); + uint32_t sampleCountDelta; + + if (remoteData.m_sampleCount < m_lastSampleCount) { + sampleCountDelta = (0xFFFFFFFFU - m_lastSampleCount) + remoteData.m_sampleCount + 1; + } else { + sampleCountDelta = remoteData.m_sampleCount - m_lastSampleCount; + } + + if (sampleCountDelta == 0) + { + ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : blue; }"); + } + + double remoteStreamRate = sampleCountDelta*1e6 / (double) (remoteData.m_timestampUs - m_lastTimestampUs); + + if (remoteStreamRate != 0) { + ui->remoteStreamRateText->setText(QString("%1").arg(remoteStreamRate, 0, 'f', 0)); + } + + m_resetCounts = false; + m_lastCountRecovered = remoteData.m_recoverableCount; + m_lastCountUnrecoverable = remoteData.m_unrecoverableCount; + m_lastSampleCount = remoteData.m_sampleCount; + m_lastTimestampUs = remoteData.m_timestampUs; } -void RemoteOutputSinkGui::analyzeApiReply(const QJsonObject& jsonObject) +void RemoteOutputSinkGui::displayRemoteFixedData(const RemoteOutput::MsgReportRemoteFixedData::RemoteData& remoteData) { - QString infoLine; - - if (jsonObject.contains("RemoteSourceReport")) - { - QJsonObject report = jsonObject["RemoteSourceReport"].toObject(); - m_deviceCenterFrequency = report["deviceCenterFreq"].toInt() * 1000; - m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency); - ui->centerFrequency->setText(QString("%L1").arg(m_deviceCenterFrequency)); - int remoteRate = report["deviceSampleRate"].toInt(); - ui->remoteRateText->setText(tr("%1k").arg((float)(remoteRate) / 1000)); - int queueSize = report["queueSize"].toInt(); - queueSize = queueSize == 0 ? 10 : queueSize; - int queueLength = report["queueLength"].toInt(); - QString queueLengthText = QString("%1/%2").arg(queueLength).arg(queueSize); - ui->queueLengthText->setText(queueLengthText); - int queueLengthPercent = (queueLength*100)/queueSize; - ui->queueLengthGauge->setValue(queueLengthPercent); - int unrecoverableCount = report["uncorrectableErrorsCount"].toInt(); - int recoverableCount = report["correctableErrorsCount"].toInt(); - uint64_t timestampUs = report["tvSec"].toInt()*1000000ULL + report["tvUSec"].toInt(); - - if (!m_resetCounts) - { - int recoverableCountDelta = recoverableCount - m_lastCountRecovered; - int unrecoverableCountDelta = unrecoverableCount - m_lastCountUnrecoverable; - displayEventStatus(recoverableCountDelta, unrecoverableCountDelta); - m_countRecovered += recoverableCountDelta; - m_countUnrecoverable += unrecoverableCountDelta; - displayEventCounts(); - } - - uint32_t sampleCountDelta, sampleCount; - sampleCount = report["samplesCount"].toInt(); - - if (sampleCount < m_lastSampleCount) { - sampleCountDelta = (0xFFFFFFFFU - m_lastSampleCount) + sampleCount + 1; - } else { - sampleCountDelta = sampleCount - m_lastSampleCount; - } - - if (sampleCountDelta == 0) - { - ui->allFramesDecoded->setStyleSheet("QToolButton { background-color : blue; }"); - } - - double remoteStreamRate = sampleCountDelta*1e6 / (double) (timestampUs - m_lastTimestampUs); - - if (remoteStreamRate != 0) { - ui->remoteStreamRateText->setText(QString("%1").arg(remoteStreamRate, 0, 'f', 0)); - } - - m_resetCounts = false; - m_lastCountRecovered = recoverableCount; - m_lastCountUnrecoverable = unrecoverableCount; - m_lastSampleCount = sampleCount; - m_lastTimestampUs = timestampUs; - } - - if (jsonObject.contains("version")) { - infoLine = "v" + jsonObject["version"].toString(); - } - - if (jsonObject.contains("qtVersion")) { - infoLine += " Qt" + jsonObject["qtVersion"].toString(); - } - - if (jsonObject.contains("architecture")) { - infoLine += " " + jsonObject["architecture"].toString(); - } - - if (jsonObject.contains("os")) { - infoLine += " " + jsonObject["os"].toString(); - } - - if (jsonObject.contains("dspRxBits") && jsonObject.contains("dspTxBits")) { - infoLine += QString(" %1/%2b").arg(jsonObject["dspRxBits"].toInt()).arg(jsonObject["dspTxBits"].toInt()); - } + QString infoLine = "v" + remoteData.m_version; + infoLine += " Qt" + remoteData.m_qtVersion; + infoLine += " " + remoteData.m_architecture; + infoLine += " " + remoteData.m_os; + infoLine += QString(" %1/%2b").arg(remoteData.m_rxBits).arg(remoteData.m_txBits); if (infoLine.size() > 0) { ui->infoText->setText(infoLine); diff --git a/plugins/samplesink/remoteoutput/remoteoutputgui.h b/plugins/samplesink/remoteoutput/remoteoutputgui.h index 6cf7e644a..a60d400df 100644 --- a/plugins/samplesink/remoteoutput/remoteoutputgui.h +++ b/plugins/samplesink/remoteoutput/remoteoutputgui.h @@ -23,7 +23,6 @@ #include #include #include -#include #include "device/devicegui.h" #include "util/messagequeue.h" @@ -32,9 +31,6 @@ #include "remoteoutput.h" #include "remoteoutputsettings.h" -class QNetworkAccessManager; -class QNetworkReply; -class QJsonObject; class DeviceSampleSink; class DeviceUISet; @@ -90,7 +86,7 @@ private: RemoteOutputSettings m_controlSettings; //!< settings last sent to device via control port QTimer m_updateTimer; QTimer m_statusTimer; - DeviceSampleSink* m_deviceSampleSink; + DeviceSampleSink* m_remoteOutput; int m_sampleRate; quint64 m_deviceCenterFrequency; //!< Center frequency in device int m_samplesCount; @@ -115,19 +111,17 @@ private: MessageQueue m_inputMessageQueue; - QNetworkAccessManager *m_networkManager; - QNetworkRequest m_networkRequest; - void blockApplySettings(bool block); void displaySettings(); void displayTime(); + void displayRemoteData(const RemoteOutput::MsgReportRemoteData::RemoteData& remoteData); + void displayRemoteFixedData(const RemoteOutput::MsgReportRemoteFixedData::RemoteData& remoteData); void sendControl(bool force = false); void sendSettings(); void updateSampleRate(); void displayEventCounts(); void displayEventStatus(int recoverableCount, int unrecoverableCount); void displayEventTimer(); - void analyzeApiReply(const QJsonObject& jsonObject); bool handleMessage(const Message& message); private slots: @@ -147,7 +141,6 @@ private slots: void updateHardware(); void updateStatus(); void tick(); - void networkManagerFinished(QNetworkReply *reply); void openDeviceSettingsDialog(const QPoint& p); };