mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-05-24 11:12:27 -04:00
Aaronia RSA Rx: implemented change of server address and status indicator
This commit is contained in:
parent
be719f9653
commit
813e6580fd
@ -56,13 +56,13 @@ AaroniaRTSAGui::AaroniaRTSAGui(DeviceUISet *deviceUISet, QWidget* parent) :
|
|||||||
m_sampleSource = m_deviceUISet->m_deviceAPI->getSampleSource();
|
m_sampleSource = m_deviceUISet->m_deviceAPI->getSampleSource();
|
||||||
|
|
||||||
m_statusTooltips.push_back("Idle"); // 0
|
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("Connected"); // 2
|
||||||
m_statusTooltips.push_back("Error"); // 3
|
m_statusTooltips.push_back("Error"); // 3
|
||||||
m_statusTooltips.push_back("Disconnected"); // 4
|
m_statusTooltips.push_back("Disconnected"); // 4
|
||||||
|
|
||||||
m_statusColors.push_back("gray"); // Idle
|
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(35, 138, 35)"); // Connected (green)
|
||||||
m_statusColors.push_back("rgb(232, 85, 85)"); // Error (red)
|
m_statusColors.push_back("rgb(232, 85, 85)"); // Error (red)
|
||||||
m_statusColors.push_back("rgb(232, 85, 232)"); // Disconnected (magenta)
|
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()->setSampleRate(m_deviceSampleRate);
|
||||||
m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
|
m_deviceUISet->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
|
||||||
ui->deviceRateText->setText(tr("%1M").arg((float)m_deviceSampleRate / 1000 / 1000));
|
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->setValue(m_deviceCenterFrequency / 1000);
|
||||||
ui->centerFrequency->blockSignals(true);
|
blockApplySettings(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AaroniaRTSAGui::openDeviceSettingsDialog(const QPoint& p)
|
void AaroniaRTSAGui::openDeviceSettingsDialog(const QPoint& p)
|
||||||
|
@ -290,9 +290,9 @@ bool AaroniaRTSAInput::applySettings(const AaroniaRTSASettings& settings, const
|
|||||||
{
|
{
|
||||||
emit setWorkerCenterFrequency(settings.m_centerFrequency);
|
emit setWorkerCenterFrequency(settings.m_centerFrequency);
|
||||||
|
|
||||||
DSPSignalNotification *notif = new DSPSignalNotification(
|
// DSPSignalNotification *notif = new DSPSignalNotification(
|
||||||
getSampleRate(), settings.m_centerFrequency);
|
// getSampleRate(), settings.m_centerFrequency);
|
||||||
m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
// m_deviceAPI->getDeviceEngineInputMessageQueue()->push(notif);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settingsKeys.contains("useReverseAPI"))
|
if (settingsKeys.contains("useReverseAPI"))
|
||||||
|
@ -24,6 +24,15 @@
|
|||||||
|
|
||||||
struct AaroniaRTSASettings {
|
struct AaroniaRTSASettings {
|
||||||
|
|
||||||
|
enum ConnectionStatus
|
||||||
|
{
|
||||||
|
ConnectionIdle, // 0 - gray
|
||||||
|
ConnectionUnstable, // 1 - yellow
|
||||||
|
ConnectionOK, // 2 - green
|
||||||
|
ConnectionError, // 3 - red
|
||||||
|
ConnectionDisconnected // 4 - magenta
|
||||||
|
};
|
||||||
|
|
||||||
quint64 m_centerFrequency;
|
quint64 m_centerFrequency;
|
||||||
QString m_serverAddress;
|
QString m_serverAddress;
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "util/messagequeue.h"
|
#include "util/messagequeue.h"
|
||||||
#include "dsp/dspcommands.h"
|
#include "dsp/dspcommands.h"
|
||||||
|
|
||||||
|
#include "aaroniartsasettings.h"
|
||||||
#include "aaroniartsaworker.h"
|
#include "aaroniartsaworker.h"
|
||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRateAndFrequency, Message)
|
MESSAGE_CLASS_DEFINITION(AaroniaRTSAWorker::MsgReportSampleRateAndFrequency, Message)
|
||||||
@ -29,39 +30,58 @@ AaroniaRTSAWorker::AaroniaRTSAWorker(SampleSinkFifo* sampleFifo) :
|
|||||||
m_timer(this),
|
m_timer(this),
|
||||||
m_samplesBuf(),
|
m_samplesBuf(),
|
||||||
m_sampleFifo(sampleFifo),
|
m_sampleFifo(sampleFifo),
|
||||||
m_centerFrequency(1450000),
|
m_centerFrequency(0),
|
||||||
m_sampleRate(10000000),
|
m_sampleRate(1),
|
||||||
m_inputMessageQueue(nullptr),
|
m_inputMessageQueue(nullptr),
|
||||||
m_status(0),
|
m_status(AaroniaRTSASettings::ConnectionIdle),
|
||||||
|
mReply(nullptr),
|
||||||
m_convertBuffer(64e6)
|
m_convertBuffer(64e6)
|
||||||
{
|
{
|
||||||
// Initialize network manager
|
// Initialize network managers
|
||||||
mNetworkAccessManager = new QNetworkAccessManager(this);
|
mNetworkAccessManager = new QNetworkAccessManager(this);
|
||||||
|
|
||||||
// Request 16bit raw samples
|
// 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);
|
// QNetworkRequest req(url);
|
||||||
mReply = mNetworkAccessManager->get(req);
|
// mReply = mNetworkAccessManager->get(req);
|
||||||
|
|
||||||
// Connect Qt slots to network events
|
// // Connect Qt slots to network events
|
||||||
connect(mReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError)));
|
// connect(mReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError)));
|
||||||
connect(mReply, SIGNAL(finished()), this, SLOT(onFinished()));
|
// connect(mReply, SIGNAL(finished()), this, SLOT(onFinished()));
|
||||||
connect(mReply, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
|
// connect(mReply, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
|
||||||
|
|
||||||
mPrevTime = 0;
|
mPrevTime = 0;
|
||||||
mPacketSamples = 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 AaroniaRTSAWorker::onSocketError(QAbstractSocket::SocketError error)
|
||||||
{
|
{
|
||||||
(void) error;
|
(void) error;
|
||||||
m_status = 3;
|
m_status = AaroniaRTSASettings::ConnectionError;
|
||||||
emit updateStatus(3);
|
emit updateStatus(m_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AaroniaRTSAWorker::sendCenterFrequency()
|
void AaroniaRTSAWorker::sendCenterFrequency()
|
||||||
{
|
{
|
||||||
|
qDebug("AaroniaRTSAWorker::sendCenterFrequency: %llu", m_centerFrequency);
|
||||||
//if (!m_webSocket.isValid())
|
//if (!m_webSocket.isValid())
|
||||||
// return;
|
// return;
|
||||||
|
|
||||||
@ -84,21 +104,34 @@ void AaroniaRTSAWorker::onCenterFrequencyChanged(quint64 centerFrequency)
|
|||||||
|
|
||||||
void AaroniaRTSAWorker::onServerAddressChanged(QString serverAddress)
|
void AaroniaRTSAWorker::onServerAddressChanged(QString serverAddress)
|
||||||
{
|
{
|
||||||
/*if (m_serverAddress == serverAddress) {
|
m_status = AaroniaRTSASettings::ConnectionDisconnected;
|
||||||
return;
|
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;
|
// Connect Qt slots to network events
|
||||||
emit updateStatus(1);
|
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://");
|
mPrevTime = 0;
|
||||||
url.append(m_serverAddress);
|
mPacketSamples = 0;
|
||||||
url.append("/rtsa/");
|
m_sampleRate = 1;
|
||||||
url.append(QString::number(QDateTime::currentMSecsSinceEpoch()));
|
m_centerFrequency = 0;
|
||||||
url.append("/SND");
|
m_serverAddress = serverAddress;
|
||||||
m_webSocket.open(QUrl(url));*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AaroniaRTSAWorker::tick()
|
void AaroniaRTSAWorker::tick()
|
||||||
@ -109,8 +142,11 @@ void AaroniaRTSAWorker::tick()
|
|||||||
|
|
||||||
void AaroniaRTSAWorker::onError(QNetworkReply::NetworkError code)
|
void AaroniaRTSAWorker::onError(QNetworkReply::NetworkError code)
|
||||||
{
|
{
|
||||||
|
(void) code;
|
||||||
QTextStream qerr(stderr);
|
QTextStream qerr(stderr);
|
||||||
qerr << "Network Error: " + mReply->errorString();
|
qerr << "Network Error: " + mReply->errorString();
|
||||||
|
m_status = 3;
|
||||||
|
emit updateStatus(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AaroniaRTSAWorker::onFinished()
|
void AaroniaRTSAWorker::onFinished()
|
||||||
@ -127,6 +163,12 @@ void AaroniaRTSAWorker::onFinished()
|
|||||||
// bytes received from the socket
|
// bytes received from the socket
|
||||||
void AaroniaRTSAWorker::onReadyRead()
|
void AaroniaRTSAWorker::onReadyRead()
|
||||||
{
|
{
|
||||||
|
if (m_status != AaroniaRTSASettings::ConnectionOK)
|
||||||
|
{
|
||||||
|
m_status = AaroniaRTSASettings::ConnectionOK;
|
||||||
|
emit updateStatus(m_status);
|
||||||
|
}
|
||||||
|
|
||||||
QTextStream qout(stdout);
|
QTextStream qout(stdout);
|
||||||
|
|
||||||
// read as many bytes as possible into input buffer
|
// read as many bytes as possible into input buffer
|
||||||
|
@ -63,6 +63,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
AaroniaRTSAWorker(SampleSinkFifo* sampleFifo);
|
AaroniaRTSAWorker(SampleSinkFifo* sampleFifo);
|
||||||
|
~AaroniaRTSAWorker();
|
||||||
int getStatus() const { return m_status; }
|
int getStatus() const { return m_status; }
|
||||||
void setInputMessageQueue(MessageQueue *messageQueue) { m_inputMessageQueue = messageQueue; }
|
void setInputMessageQueue(MessageQueue *messageQueue) { m_inputMessageQueue = messageQueue; }
|
||||||
|
|
||||||
@ -83,20 +84,15 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
// QT htttp client
|
// QT htttp client
|
||||||
QNetworkAccessManager * mNetworkAccessManager;
|
QNetworkAccessManager *mNetworkAccessManager;
|
||||||
|
|
||||||
// Reply from the HTTP server
|
// Reply from the HTTP server
|
||||||
QNetworkReply * mReply;
|
QNetworkReply *mReply;
|
||||||
|
|
||||||
// Input buffer
|
// Input buffer
|
||||||
QByteArray mBuffer;
|
QByteArray mBuffer;
|
||||||
|
|
||||||
// Number of IQ sample pairs in the current packet
|
// Number of IQ sample pairs in the current packet
|
||||||
int mPacketSamples;
|
int mPacketSamples;
|
||||||
|
|
||||||
// Previous sample end time to check for packet loss
|
// Previous sample end time to check for packet loss
|
||||||
double mPrevTime;
|
double mPrevTime;
|
||||||
|
|
||||||
|
|
||||||
//Decimators<qint32, float, SDR_RX_SAMP_SZ, 32, true> m_decimatorsIQ;
|
//Decimators<qint32, float, SDR_RX_SAMP_SZ, 32, true> m_decimatorsIQ;
|
||||||
DecimatorsFI<true> m_decimatorsFloatIQ;
|
DecimatorsFI<true> m_decimatorsFloatIQ;
|
||||||
@ -113,7 +109,6 @@ public slots:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onSocketError(QAbstractSocket::SocketError error);
|
void onSocketError(QAbstractSocket::SocketError error);
|
||||||
|
|
||||||
void onError(QNetworkReply::NetworkError code);
|
void onError(QNetworkReply::NetworkError code);
|
||||||
void onFinished(void);
|
void onFinished(void);
|
||||||
void onReadyRead(void);
|
void onReadyRead(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user