diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp
index 43410666a..12a0791cf 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp
+++ b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.cpp
@@ -34,9 +34,9 @@ SDRdaemonBuffer::SDRdaemonBuffer(uint32_t rateDivider) :
m_lz4InSize(0),
m_lz4OutBuffer(0),
m_frameSize(0),
- m_nbDecodes(0),
- m_nbSuccessfulDecodes(0),
- m_nbCRCOK(0),
+ m_nbLz4Decodes(0),
+ m_nbLz4SuccessfulDecodes(0),
+ m_nbLz4CRCOK(0),
m_dataCRC(0),
m_sampleRate(1000000),
m_sampleBytes(2),
@@ -161,32 +161,32 @@ void SDRdaemonBuffer::writeDataLZ4(const char *array, uint32_t length)
if (m_lz4InCount >= m_lz4InSize) // full input compressed block retrieved
{
- if (m_nbDecodes == 100)
+ if (m_nbLz4Decodes == 100)
{
std::cerr << "SDRdaemonBuffer::writeAndReadLZ4:"
- << " decoding: " << m_nbCRCOK
- << ":" << m_nbSuccessfulDecodes
- << "/" << m_nbDecodes
+ << " decoding: " << m_nbLz4CRCOK
+ << ":" << m_nbLz4SuccessfulDecodes
+ << "/" << m_nbLz4Decodes
<< std::endl;
- m_nbDecodes = 0;
- m_nbSuccessfulDecodes = 0;
- m_nbCRCOK = 0;
+ m_nbLz4Decodes = 0;
+ m_nbLz4SuccessfulDecodes = 0;
+ m_nbLz4CRCOK = 0;
}
uint64_t crc64 = m_crc64.calculate_crc(m_lz4InBuffer, m_lz4InSize);
if (memcmp(&crc64, &m_dataCRC, 8) == 0)
{
- m_nbCRCOK++;
+ m_nbLz4CRCOK++;
}
int compressedSize = LZ4_decompress_fast((const char*) m_lz4InBuffer, (char*) &m_rawBuffer[m_writeIndex], m_frameSize);
- m_nbDecodes++;
+ m_nbLz4Decodes++;
if (compressedSize == m_lz4InSize)
{
- m_nbSuccessfulDecodes++;
+ m_nbLz4SuccessfulDecodes++;
}
writeToRawBufferLZ4((const char *) m_lz4InBuffer, m_frameSize);
@@ -214,11 +214,11 @@ void SDRdaemonBuffer::writeToRawBufferUncompressed(const char *array, uint32_t l
void SDRdaemonBuffer::writeToRawBufferLZ4(const char *array, uint32_t length)
{
int compressedSize = LZ4_decompress_fast((const char*) m_lz4InBuffer, (char*) m_lz4OutBuffer, m_frameSize);
- m_nbDecodes++;
+ m_nbLz4Decodes++;
if (compressedSize == m_lz4InSize)
{
- m_nbSuccessfulDecodes++;
+ m_nbLz4SuccessfulDecodes++;
}
writeToRawBufferUncompressed((const char *) m_lz4OutBuffer, m_frameSize);
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h
index f2abe3346..89aa0660b 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h
+++ b/plugins/samplesource/sdrdaemon/sdrdaemonbuffer.h
@@ -94,9 +94,9 @@ private:
uint32_t m_lz4InSize; //!< Size in bytes of the LZ4 input data
uint8_t *m_lz4OutBuffer; //!< Buffer for LZ4 uncompressed output
uint32_t m_frameSize; //!< Size in bytes of one uncompressed frame
- uint32_t m_nbDecodes;
- uint32_t m_nbSuccessfulDecodes;
- uint32_t m_nbCRCOK;
+ uint32_t m_nbLz4Decodes;
+ uint32_t m_nbLz4SuccessfulDecodes;
+ uint32_t m_nbLz4CRCOK;
uint64_t m_dataCRC;
uint32_t m_sampleRate; //!< Current sample rate in Hz
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui
index 3f35fd068..4c8745541 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemongui.ui
+++ b/plugins/samplesource/sdrdaemon/sdrdaemongui.ui
@@ -234,12 +234,18 @@
-
+
+ false
+
120
0
+
+ Data connection IP address
+
127.0.0.1
@@ -254,12 +260,18 @@
-
+
+ false
+
50
0
+
+ Data connection port
+
9090
@@ -267,6 +279,9 @@
-
+
+ false
+
30
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp b/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp
index 4ce93a06f..8e29a77ce 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp
+++ b/plugins/samplesource/sdrdaemon/sdrdaemoninput.cpp
@@ -47,7 +47,7 @@ SDRdaemonInput::SDRdaemonInput(const QTimer& masterTimer) :
{
m_sampleFifo.setSize(96000 * 4);
m_SDRdaemonUDPHandler = new SDRdaemonUDPHandler(&m_sampleFifo, getOutputMessageQueueToGUI());
- m_SDRdaemonUDPHandler->connectTimer(m_masterTimer);
+ m_SDRdaemonUDPHandler->connectTimer(&m_masterTimer);
}
SDRdaemonInput::~SDRdaemonInput()
@@ -101,7 +101,8 @@ bool SDRdaemonInput::handleMessage(const Message& message)
{
if (MsgConfigureSDRdaemonUDPLink::match(message))
{
- // TODO: change UDP settings
+ MsgConfigureSDRdaemonUDPLink& conf = (MsgConfigureSDRdaemonUDPLink&) message;
+ m_SDRdaemonUDPHandler->configureUDPLink(conf.getAddress(), conf.getPort());
return true;
}
else if (MsgConfigureSDRdaemonAutoCorr::match(message))
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp
index a1dc0690f..15f869591 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp
+++ b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.cpp
@@ -16,6 +16,7 @@
#include
#include
+#include
#include
#include "dsp/dspcommands.h"
#include "dsp/dspengine.h"
@@ -40,7 +41,8 @@ SDRdaemonUDPHandler::SDRdaemonUDPHandler(SampleFifo *sampleFifo, MessageQueue *o
m_tv_usec(0),
m_outputMessageQueueToGUI(outputMessageQueueToGUI),
m_tickCount(0),
- m_samplesCount(0)
+ m_samplesCount(0),
+ m_timer(0)
{
m_udpBuf = new char[SDRdaemonBuffer::m_udpPayloadSize];
}
@@ -53,6 +55,8 @@ SDRdaemonUDPHandler::~SDRdaemonUDPHandler()
void SDRdaemonUDPHandler::start()
{
+ qDebug("SDRdaemonUDPHandler::start");
+
if (!m_dataSocket)
{
m_dataSocket = new QUdpSocket(this);
@@ -62,7 +66,7 @@ void SDRdaemonUDPHandler::start()
{
if (m_dataSocket->bind(m_dataAddress, m_dataPort))
{
- qDebug("SDRdaemonUDPHandler::start: bind data socket to port %d", m_dataPort);
+ qDebug("SDRdaemonUDPHandler::start: bind data socket to %s:%d", m_dataAddress.toString().toStdString().c_str(), m_dataPort);
connect(m_dataSocket, SIGNAL(readyRead()), this, SLOT(dataReadyRead()), Qt::QueuedConnection); // , Qt::QueuedConnection
m_dataConnected = true;
}
@@ -90,6 +94,22 @@ void SDRdaemonUDPHandler::stop()
}
}
+void SDRdaemonUDPHandler::configureUDPLink(const QString& address, quint16 port)
+{
+ qDebug("SDRdaemonUDPHandler::configureUDPLink: %s:%d", address.toStdString().c_str(), port);
+ bool addressOK = m_dataAddress.setAddress(address);
+
+ if (!addressOK)
+ {
+ qWarning("SDRdaemonUDPHandler::configureUDPLink: invalid address %s. Set to localhost.", address.toStdString().c_str());
+ m_dataAddress = QHostAddress::LocalHost;
+ }
+
+ stop();
+ m_dataPort = port;
+ start();
+}
+
void SDRdaemonUDPHandler::dataReadyRead()
{
while (m_dataSocket->hasPendingDatagrams())
@@ -163,10 +183,11 @@ void SDRdaemonUDPHandler::setSamplerate(uint32_t samplerate)
<< " #samples per chunk: " << (m_chunksize/SDRdaemonBuffer::m_iqSampleSize);
}
-void SDRdaemonUDPHandler::connectTimer(const QTimer& timer)
+void SDRdaemonUDPHandler::connectTimer(const QTimer* timer)
{
qDebug() << "SDRdaemonUDPHandler::connectTimer";
- connect(&timer, SIGNAL(timeout()), this, SLOT(tick()));
+ m_timer = timer;
+ connect(timer, SIGNAL(timeout()), this, SLOT(tick()));
}
void SDRdaemonUDPHandler::tick()
diff --git a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h
index f7fe0adfc..50ed52f2c 100644
--- a/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h
+++ b/plugins/samplesource/sdrdaemon/sdrdaemonudphandler.h
@@ -35,9 +35,10 @@ class SDRdaemonUDPHandler : public QObject
public:
SDRdaemonUDPHandler(SampleFifo* sampleFifo, MessageQueue *outputMessageQueueToGUI);
~SDRdaemonUDPHandler();
- void connectTimer(const QTimer& timer);
+ void connectTimer(const QTimer* timer);
void start();
void stop();
+ void configureUDPLink(const QString& address, quint16 port);
public slots:
void dataReadyRead();
@@ -59,6 +60,7 @@ private:
MessageQueue *m_outputMessageQueueToGUI;
uint32_t m_tickCount;
std::size_t m_samplesCount;
+ const QTimer *m_timer;
static const int m_rateDivider;