diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp
index 7248e8a1b..391d77434 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp
+++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.cpp
@@ -14,13 +14,21 @@
// along with this program. If not, see . //
///////////////////////////////////////////////////////////////////////////////////
-#include
+#include
+#include
+#include
+#include
+#include
+#include
#include
#include
#include
#include
-#include
+
+#include
+#include
+
#include "ui_sdrdaemongui.h"
#include "plugin/pluginapi.h"
#include "gui/colormapper.h"
@@ -50,7 +58,11 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) :
m_samplesCount(0),
m_tickCount(0),
m_address("127.0.0.1"),
- m_port(9090),
+ m_dataPort(9090),
+ m_controlPort(9091),
+ m_addressEdited(false),
+ m_dataPortEdited(false),
+ m_initSendConfiguration(false),
m_dcBlock(false),
m_iqCorrection(false),
m_autoFollowRate(false)
@@ -69,6 +81,7 @@ SDRdaemonGui::SDRdaemonGui(PluginAPI* pluginAPI, QWidget* parent) :
displaySettings();
ui->applyButton->setEnabled(false);
+ ui->sendButton->setEnabled(false);
}
SDRdaemonGui::~SDRdaemonGui()
@@ -94,7 +107,9 @@ QString SDRdaemonGui::getName() const
void SDRdaemonGui::resetToDefaults()
{
m_address = "127.0.0.1";
- m_port = 9090;
+ m_remoteAddress = "127.0.0.1";
+ m_dataPort = 9090;
+ m_controlPort = 9091;
m_dcBlock = false;
m_iqCorrection = false;
m_autoFollowRate = false;
@@ -107,7 +122,7 @@ QByteArray SDRdaemonGui::serialize() const
SimpleSerializer s(1);
s.writeString(1, ui->address->text());
- uint32_t uintval = ui->port->text().toInt(&ok);
+ uint32_t uintval = ui->dataPort->text().toInt(&ok);
if((!ok) || (uintval < 1024) || (uintval > 65535)) {
uintval = 9090;
@@ -119,6 +134,31 @@ QByteArray SDRdaemonGui::serialize() const
s.writeBool(5, m_autoFollowRate);
s.writeBool(6, m_autoCorrBuffer);
+ uintval = ui->controlPort->text().toInt(&ok);
+
+ if((!ok) || (uintval < 1024) || (uintval > 65535)) {
+ uintval = 9091;
+ }
+
+ s.writeU32(7, uintval);
+
+ uint32_t confFrequency = ui->freq->text().toInt(&ok);
+
+ if (ok) {
+ s.writeU32(8, confFrequency);
+ }
+
+ s.writeU32(9, ui->decim->currentIndex());
+ s.writeU32(10, ui->fcPos->currentIndex());
+
+ uint32_t sampleRate = ui->sampleRate->text().toInt(&ok);
+
+ if (ok) {
+ s.writeU32(11, sampleRate);
+ }
+
+ s.writeString(12, ui->specificParms->text());
+
return s.final();
}
@@ -127,11 +167,16 @@ bool SDRdaemonGui::deserialize(const QByteArray& data)
SimpleDeserializer d(data);
QString address;
uint32_t uintval;
- quint16 port;
+ quint16 dataPort;
bool dcBlock;
bool iqCorrection;
bool autoFollowRate;
bool autoCorrBuffer;
+ uint32_t confFrequency;
+ uint32_t confSampleRate;
+ uint32_t confDecim;
+ uint32_t confFcPos;
+ QString confSpecificParms;
if (!d.isValid())
{
@@ -147,20 +192,33 @@ bool SDRdaemonGui::deserialize(const QByteArray& data)
d.readU32(2, &uintval, 9090);
if ((uintval > 1024) && (uintval < 65536)) {
- port = uintval;
+ dataPort = uintval;
} else {
- port = 9090;
+ dataPort = 9090;
}
d.readBool(3, &dcBlock, false);
d.readBool(4, &iqCorrection, false);
d.readBool(5, &autoFollowRate, false);
d.readBool(6, &autoCorrBuffer, false);
+ d.readU32(7, &uintval, 9091);
- if ((address != m_address) || (port != m_port))
+ if ((uintval > 1024) && (uintval < 65536)) {
+ m_controlPort = uintval;
+ } else {
+ m_controlPort = 9091;
+ }
+
+ d.readU32(8, &confFrequency, 435000);
+ d.readU32(9, &confDecim, 3);
+ d.readU32(10, &confFcPos, 2);
+ d.readU32(11, &confSampleRate, 1000);
+ d.readString(12, &confSpecificParms, "");
+
+ if ((address != m_address) || (dataPort != m_dataPort))
{
m_address = address;
- m_port = port;
+ m_dataPort = dataPort;
configureUDPLink();
}
@@ -179,12 +237,17 @@ bool SDRdaemonGui::deserialize(const QByteArray& data)
}
displaySettings();
+ displayConfigurationParameters(confFrequency, confDecim, confFcPos, confSampleRate, confSpecificParms);
+ m_initSendConfiguration = true;
return true;
}
else
{
resetToDefaults();
displaySettings();
+ QString defaultSpecificParameters("");
+ displayConfigurationParameters(435000, 3, 2, 1000, defaultSpecificParameters);
+ m_initSendConfiguration = true;
return false;
}
}
@@ -264,38 +327,119 @@ void SDRdaemonGui::handleSourceMessages()
void SDRdaemonGui::displaySettings()
{
ui->address->setText(m_address);
- ui->port->setText(QString::number(m_port));
+ ui->dataPort->setText(QString::number(m_dataPort));
+ ui->controlPort->setText(QString::number(m_controlPort));
ui->dcOffset->setChecked(m_dcBlock);
ui->iqImbalance->setChecked(m_iqCorrection);
ui->autoFollowRate->setChecked(m_autoFollowRate);
ui->autoCorrBuffer->setChecked(m_autoCorrBuffer);
}
+void SDRdaemonGui::displayConfigurationParameters(uint32_t freq,
+ uint32_t log2Decim,
+ uint32_t fcPos,
+ uint32_t sampleRate,
+ QString& specParms)
+{
+ ui->freq->setText(QString::number(freq));
+ ui->decim->setCurrentIndex(log2Decim);
+ ui->fcPos->setCurrentIndex(fcPos);
+ ui->sampleRate->setText(QString::number(sampleRate));
+ ui->specificParms->setText(specParms);
+ ui->specificParms->setCursorPosition(0);
+}
+
void SDRdaemonGui::on_applyButton_clicked(bool checked)
{
- bool ok;
+ bool dataOk, ctlOk;
QString udpAddress = ui->address->text();
- int udpPort = ui->port->text().toInt(&ok);
+ int udpDataPort = ui->dataPort->text().toInt(&dataOk);
+ int tcpCtlPort = ui->controlPort->text().toInt(&ctlOk);
- if((!ok) || (udpPort < 1024) || (udpPort > 65535))
+ if((!dataOk) || (udpDataPort < 1024) || (udpDataPort > 65535))
{
- udpPort = 9090;
+ udpDataPort = 9090;
+ }
+
+ if((!ctlOk) || (tcpCtlPort < 1024) || (tcpCtlPort > 65535))
+ {
+ tcpCtlPort = 9091;
}
m_address = udpAddress;
- m_port = udpPort;
+ m_dataPort = udpDataPort;
+ m_controlPort = tcpCtlPort;
- configureUDPLink();
+ if (m_addressEdited || m_dataPortEdited)
+ {
+ configureUDPLink();
+ m_addressEdited = false;
+ m_dataPortEdited = false;
+ }
ui->applyButton->setEnabled(false);
}
+void SDRdaemonGui::on_sendButton_clicked(bool checked)
+{
+ sendConfiguration();
+ ui->sendButton->setEnabled(false);
+}
+
+void SDRdaemonGui::sendConfiguration()
+{
+ QString remoteAddress;
+ ((SDRdaemonInput *) m_sampleSource)->getRemoteAddress(remoteAddress);
+
+ if (remoteAddress != m_remoteAddress)
+ {
+ m_remoteAddress = remoteAddress;
+ }
+
+ std::ostringstream os;
+ bool ok;
+
+ os << "decim=" << ui->decim->currentIndex()
+ << ",fcpos=" << ui->fcPos->currentIndex();
+
+ uint64_t freq = ui->freq->text().toInt(&ok);
+
+ if (ok) {
+ os << ",freq=" << freq*1000LL;
+ } else {
+ QMessageBox::information(this, tr("Message"), tr("Invalid frequency"));
+ }
+
+ uint32_t srate = ui->sampleRate->text().toInt(&ok);
+
+ if (ok) {
+ os << ",srate=" << srate*1000;
+ } else {
+ QMessageBox::information(this, tr("Message"), tr("invalid sample rate"));
+ }
+
+ if ((ui->specificParms->text()).size() > 0) {
+ os << "," << ui->specificParms->text().toStdString();
+ }
+
+ qDebug() << "SDRdaemonGui::sendConfiguration:"
+ << " remoteAddress: " << remoteAddress
+ << " message: " << os.str().c_str();
+}
+
void SDRdaemonGui::on_address_textEdited(const QString& arg1)
{
ui->applyButton->setEnabled(true);
+ m_addressEdited = true;
}
-void SDRdaemonGui::on_port_textEdited(const QString& arg1)
+void SDRdaemonGui::on_dataPort_textEdited(const QString& arg1)
+{
+ ui->applyButton->setEnabled(true);
+ m_dataPortEdited = true;
+}
+
+void SDRdaemonGui::on_controlPort_textEdited(const QString& arg1)
{
ui->applyButton->setEnabled(true);
}
@@ -340,12 +484,38 @@ void SDRdaemonGui::on_resetIndexes_clicked(bool checked)
m_sampleSource->getInputMessageQueue()->push(message);
}
+void SDRdaemonGui::on_freq_textEdited(const QString& arg1)
+{
+ ui->sendButton->setEnabled(true);
+}
+
+void SDRdaemonGui::on_sampleRate_textEdited(const QString& arg1)
+{
+ ui->sendButton->setEnabled(true);
+}
+
+void SDRdaemonGui::on_specificParms_textEdited(const QString& arg1)
+{
+ ui->sendButton->setEnabled(true);
+}
+
+void SDRdaemonGui::on_decim_currentIndexChanged(int index)
+{
+ ui->sendButton->setEnabled(true);
+}
+
+void SDRdaemonGui::on_fcPos_currentIndexChanged(int index)
+{
+ ui->sendButton->setEnabled(true);
+}
+
+
void SDRdaemonGui::configureUDPLink()
{
qDebug() << "SDRdaemonGui::configureUDPLink: " << m_address.toStdString().c_str()
- << " : " << m_port;
+ << " : " << m_dataPort;
- SDRdaemonInput::MsgConfigureSDRdaemonUDPLink* message = SDRdaemonInput::MsgConfigureSDRdaemonUDPLink::create(m_address, m_port);
+ SDRdaemonInput::MsgConfigureSDRdaemonUDPLink* message = SDRdaemonInput::MsgConfigureSDRdaemonUDPLink::create(m_address, m_dataPort);
m_sampleSource->getInputMessageQueue()->push(message);
}
@@ -376,6 +546,12 @@ void SDRdaemonGui::updateWithStreamData()
QString s2 = QString::number(skewPerCent, 'f', 2);
ui->skewRateText->setText(tr("%1").arg(s2));
updateWithStreamTime();
+
+ if (m_initSendConfiguration)
+ {
+ sendConfiguration();
+ m_initSendConfiguration = false;
+ }
}
void SDRdaemonGui::updateWithStreamTime()
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.h b/plugins/samplesource/sdrdaemon/sdrdaemongui.h
index 182b3974a..b626e02aa 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemongui.h
+++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.h
@@ -72,13 +72,26 @@ private:
std::size_t m_tickCount;
QString m_address;
- quint16 m_port;
+ QString m_remoteAddress;
+ quint16 m_dataPort;
+ quint16 m_controlPort;
+ bool m_addressEdited;
+ bool m_dataPortEdited;
+ bool m_initSendConfiguration;
+
bool m_dcBlock;
bool m_iqCorrection;
bool m_autoFollowRate;
bool m_autoCorrBuffer;
void displaySettings();
+
+ void displayConfigurationParameters(uint32_t freq,
+ uint32_t log2Decim,
+ uint32_t fcPos,
+ uint32_t sampleRate,
+ QString& specParms);
+
void displayTime();
void configureUDPLink();
void configureAutoCorrections();
@@ -86,6 +99,7 @@ private:
void updateWithAcquisition();
void updateWithStreamData();
void updateWithStreamTime();
+ void sendConfiguration();
private slots:
void handleSourceMessages();
@@ -96,7 +110,14 @@ private slots:
void on_autoCorrBuffer_toggled(bool checked);
void on_resetIndexes_clicked(bool checked);
void on_address_textEdited(const QString& arg1);
- void on_port_textEdited(const QString& arg1);
+ void on_dataPort_textEdited(const QString& arg1);
+ void on_controlPort_textEdited(const QString& arg1);
+ void on_sendButton_clicked(bool checked);
+ void on_freq_textEdited(const QString& arg1);
+ void on_sampleRate_textEdited(const QString& arg1);
+ void on_specificParms_textEdited(const QString& arg1);
+ void on_decim_currentIndexChanged(int index);
+ void on_fcPos_currentIndexChanged(int index);
void tick();
};
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui
index 53de33918..4bb82b1be 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui
+++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui
@@ -6,8 +6,8 @@
0
0
- 398
- 175
+ 363
+ 365
@@ -583,7 +583,7 @@
-
-
+
Qt::Horizontal
@@ -605,41 +605,64 @@
- 150
+ 120
0
- Data connection IP address
+ Local data connection IP address
- 127.0.0.1
+ 000.000.000.000
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
-
-
+
- Port:
+ D:
-
-
+
true
- 80
+ 16777215
16777215
- Data connection port
+ Local data connection port
- 9090
+ 00000
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ C:
+
+
+
+ -
+
+
+ Remote control port
+
+
+ 00000
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -677,6 +700,224 @@
+ -
+
+
+ Qt::Horizontal
+
+
+
+ -
+
+
-
+
+
+ Fc:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 90
+ 16777215
+
+
+
+ Set center frequency (kHz)
+
+
+ 00000000
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ k Dec:
+
+
+
+ -
+
+
+
+ 40
+ 16777215
+
+
+
+ Decimation
+
+
+ 3
+
+
-
+
+ 1
+
+
+ -
+
+ 2
+
+
+ -
+
+ 4
+
+
+ -
+
+ 8
+
+
+ -
+
+ 16
+
+
+ -
+
+ 32
+
+
+ -
+
+ 64
+
+
+
+
+ -
+
+
+ Fp:
+
+
+
+ -
+
+
+
+ 50
+ 16777215
+
+
+
+ Center frequency position (Infradyne, Supradyne, Centered)
+
+
+ 2
+
+
-
+
+ Inf
+
+
+ -
+
+ Sup
+
+
+ -
+
+ Cen
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 50
+ 16777215
+
+
+
+ Send commands to remote SDRdaemon instance
+
+
+ Send
+
+
+
+
+
+ -
+
+
-
+
+
+ SR:
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 16777215
+
+
+
+ Sample rate (kS/s)
+
+
+ 00000
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+ k Sp:
+
+
+
+ -
+
+
+ Other parameters that are hardware specific
+
+
+
+
+
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp b/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp
index ae0ce0cec..a511e1865 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp
+++ b/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp
@@ -101,6 +101,14 @@ std::time_t SDRdaemonInput::getStartingTimeStamp() const
return m_startingTimeStamp;
}
+void SDRdaemonInput::getRemoteAddress(QString &s)
+{
+ if (m_SDRdaemonUDPHandler) {
+ m_SDRdaemonUDPHandler->getRemoteAddress(s);
+ }
+}
+
+
bool SDRdaemonInput::handleMessage(const Message& message)
{
if (MsgConfigureSDRdaemonUDPLink::match(message))
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h
index aefc8ad73..4a8236e70 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemoninput.h
+++ b/plugins/samplesource/sdrdaemon/sdrdaemoninput.h
@@ -284,6 +284,7 @@ public:
virtual int getSampleRate() const;
virtual quint64 getCenterFrequency() const;
std::time_t getStartingTimeStamp() const;
+ void getRemoteAddress(QString &s);
virtual bool handleMessage(const Message& message);
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp
index 12939fb93..2f04abe15 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp
+++ b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp
@@ -27,6 +27,7 @@ SDRdaemonUDPHandler::SDRdaemonUDPHandler(SampleFifo *sampleFifo, MessageQueue *o
m_sdrDaemonBuffer(m_rateDivider),
m_dataSocket(0),
m_dataAddress(QHostAddress::LocalHost),
+ m_remoteAddress(QHostAddress::LocalHost),
m_dataPort(9090),
m_dataConnected(false),
m_udpBuf(0),
@@ -128,7 +129,7 @@ void SDRdaemonUDPHandler::dataReadyRead()
while (m_dataSocket->hasPendingDatagrams())
{
qint64 pendingDataSize = m_dataSocket->pendingDatagramSize();
- m_udpReadBytes = m_dataSocket->readDatagram(m_udpBuf, pendingDataSize, 0, 0);
+ m_udpReadBytes = m_dataSocket->readDatagram(m_udpBuf, pendingDataSize, &m_remoteAddress, 0);
processData();
}
}
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h
index 8fb33e6a8..4615eaab1 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h
+++ b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h
@@ -41,6 +41,7 @@ public:
void start();
void stop();
void configureUDPLink(const QString& address, quint16 port);
+ void getRemoteAddress(QString& s) const { s = m_remoteAddress.toString(); }
void setAutoFollowRate(bool autoFollowRate) { m_sdrDaemonBuffer.setAutoFollowRate(autoFollowRate); }
void setAutoCorrBuffer(bool autoCorrBuffer) { m_autoCorrBuffer = autoCorrBuffer; m_sdrDaemonBuffer.setAutoCorrBuffer(autoCorrBuffer); }
void resetIndexes() { m_sdrDaemonBuffer.setResetIndexes(); }
@@ -51,6 +52,7 @@ private:
SDRdaemonBuffer m_sdrDaemonBuffer;
QUdpSocket *m_dataSocket;
QHostAddress m_dataAddress;
+ QHostAddress m_remoteAddress;
quint16 m_dataPort;
bool m_dataConnected;
char *m_udpBuf;
diff --git a/sdrbase/gui/preferencesdialog.ui b/sdrbase/gui/preferencesdialog.ui
index faf70193b..af404fa5e 100644
--- a/sdrbase/gui/preferencesdialog.ui
+++ b/sdrbase/gui/preferencesdialog.ui
@@ -25,22 +25,6 @@
0
-
-
- Receiver Hardware
-
-
- -
-
-
-
- 1
-
-
-
-
-
-
Audio Output
@@ -74,7 +58,6 @@
buttonBox
tabWidget
- treeWidget
audioTree