From aac6d0962289db8cf4c4d6f7900d97bfc75b651a Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 17 Sep 2018 03:42:08 +0200 Subject: [PATCH] SDRDaemonSink: use QUdpSocket --- .../samplesink/sdrdaemonsink/udpsinkfecworker.cpp | 15 +++++++++++---- .../samplesink/sdrdaemonsink/udpsinkfecworker.h | 5 +++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp index 57693afb8..3b69111f6 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.cpp @@ -14,6 +14,8 @@ // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// +#include + #include "udpsinkfecworker.h" MESSAGE_CLASS_DEFINITION(UDPSinkFECWorker::MsgUDPFECEncodeAndSend, Message) @@ -25,7 +27,7 @@ UDPSinkFECWorker::UDPSinkFECWorker() : m_remotePort(9090) { m_cm256Valid = m_cm256.isInitialized(); - connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::DirectConnection); + connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); } UDPSinkFECWorker::~UDPSinkFECWorker() @@ -42,6 +44,7 @@ void UDPSinkFECWorker::startWork() { qDebug("UDPSinkFECWorker::startWork"); m_startWaitMutex.lock(); + m_udpSocket = new QUdpSocket(this); start(); while(!m_running) m_startWaiter.wait(&m_startWaitMutex, 100); @@ -51,6 +54,8 @@ void UDPSinkFECWorker::startWork() void UDPSinkFECWorker::stopWork() { qDebug("UDPSinkFECWorker::stopWork"); + delete m_udpSocket; + m_udpSocket = 0; m_running = false; wait(); } @@ -102,6 +107,7 @@ void UDPSinkFECWorker::handleInputMessages() MsgConfigureRemoteAddress *addressMsg = (MsgConfigureRemoteAddress *) message; m_remoteAddress = addressMsg->getAddress(); m_remotePort = addressMsg->getPort(); + m_remoteHostAddress.setAddress(addressMsg->getAddress()); } else if (MsgStartStop::match(*message)) { @@ -129,8 +135,8 @@ void UDPSinkFECWorker::encodeAndTransmit(SDRDaemonSuperBlock *txBlockx, uint16_t { for (unsigned int i = 0; i < SDRDaemonNbOrginalBlocks; i++) { - m_socket.SendDataGram((const void *) &txBlockx[i], (int) SDRDaemonUdpSize, m_remoteAddress.toStdString(), (uint32_t) m_remotePort); - //m_udpSocket->writeDatagram((const char *) &txBlockx[i], (int) UDPSinkFEC::m_udpSize, m_remoteAddress, m_remotePort); + //m_socket.SendDataGram((const void *) &txBlockx[i], SDRDaemonUdpSize, m_remoteAddress.toStdString(), (uint32_t) m_remotePort); + m_udpSocket->writeDatagram((const char *) &txBlockx[i], SDRDaemonUdpSize, m_remoteHostAddress, m_remotePort); usleep(txDelay); } } @@ -179,7 +185,8 @@ void UDPSinkFECWorker::encodeAndTransmit(SDRDaemonSuperBlock *txBlockx, uint16_t } #endif - m_socket.SendDataGram((const void *) &txBlockx[i], (int) SDRDaemonUdpSize, m_remoteAddress.toStdString(), (uint32_t) m_remotePort); + //m_socket.SendDataGram((const void *) &txBlockx[i], SDRDaemonUdpSize, m_remoteAddress.toStdString(), (uint32_t) m_remotePort); + m_udpSocket->writeDatagram((const char *) &txBlockx[i], SDRDaemonUdpSize, m_remoteHostAddress, m_remotePort); usleep(txDelay); } } diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h index 0a9aa7a48..3fcbb6b01 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfecworker.h @@ -20,6 +20,7 @@ #include #include #include +#include #include "cm256.h" @@ -29,6 +30,8 @@ #include "UDPSocket.h" +class QUdpSocket; + class UDPSinkFECWorker : public QThread { Q_OBJECT @@ -138,8 +141,10 @@ private: CM256 m_cm256; //!< CM256 library object bool m_cm256Valid; //!< true if CM256 library is initialized correctly UDPSocket m_socket; + QUdpSocket *m_udpSocket; QString m_remoteAddress; uint16_t m_remotePort; + QHostAddress m_remoteHostAddress; }; #endif /* PLUGINS_SAMPLESINK_SDRDAEMONSINK_UDPSINKFECWORKER_H_ */