mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-22 08:04:49 -05:00
UDP sink plugin: use messageing system to configure address and port
This commit is contained in:
parent
f07563500b
commit
9a1b60c6ec
@ -18,7 +18,8 @@
|
||||
|
||||
#include "udpsinkmsg.h"
|
||||
#include "udpsinkudphandler.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
MESSAGE_CLASS_DEFINITION(UDPSinkUDPHandler::MsgUDPAddressAndPort, Message)
|
||||
|
||||
UDPSinkUDPHandler::UDPSinkUDPHandler() :
|
||||
m_dataSocket(0),
|
||||
@ -38,6 +39,7 @@ UDPSinkUDPHandler::UDPSinkUDPHandler() :
|
||||
m_feedbackMessageQueue(0)
|
||||
{
|
||||
m_udpBuf = new udpBlk_t[m_minNbUDPFrames];
|
||||
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleMessages()));
|
||||
}
|
||||
|
||||
UDPSinkUDPHandler::~UDPSinkUDPHandler()
|
||||
@ -56,17 +58,16 @@ void UDPSinkUDPHandler::start()
|
||||
|
||||
if (!m_dataConnected)
|
||||
{
|
||||
connect(m_dataSocket, SIGNAL(readyRead()), this, SLOT(dataReadyRead()), Qt::QueuedConnection); // , Qt::QueuedConnection
|
||||
|
||||
if (m_dataSocket->bind(m_dataAddress, m_dataPort))
|
||||
{
|
||||
qDebug("UDPSinkUDPHandler::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;
|
||||
}
|
||||
else
|
||||
{
|
||||
qWarning("UDPSinkUDPHandler::start: cannot bind data port %d", m_dataPort);
|
||||
disconnect(m_dataSocket, SIGNAL(readyRead()), this, SLOT(dataReadyRead()));
|
||||
qWarning("UDPSinkUDPHandler::start: cannot bind data socket to %s:%d", m_dataAddress.toString().toStdString().c_str(), m_dataPort);
|
||||
m_dataConnected = false;
|
||||
}
|
||||
}
|
||||
@ -188,6 +189,12 @@ void UDPSinkUDPHandler::advanceReadPointer(int nbBytes)
|
||||
}
|
||||
|
||||
void UDPSinkUDPHandler::configureUDPLink(const QString& address, quint16 port)
|
||||
{
|
||||
Message* msg = MsgUDPAddressAndPort::create(address, port);
|
||||
m_inputMessageQueue.push(msg);
|
||||
}
|
||||
|
||||
void UDPSinkUDPHandler::applyUDPLink(const QString& address, quint16 port)
|
||||
{
|
||||
qDebug("UDPSinkUDPHandler::configureUDPLink: %s:%d", address.toStdString().c_str(), port);
|
||||
bool addressOK = m_dataAddress.setAddress(address);
|
||||
@ -229,3 +236,33 @@ void UDPSinkUDPHandler::resizeBuffer(float sampleRate)
|
||||
|
||||
resetReadIndex();
|
||||
}
|
||||
|
||||
void UDPSinkUDPHandler::handleMessages()
|
||||
{
|
||||
Message* message;
|
||||
|
||||
while ((message = m_inputMessageQueue.pop()) != 0)
|
||||
{
|
||||
if (handleMessage(*message))
|
||||
{
|
||||
delete message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool UDPSinkUDPHandler::handleMessage(const Message& cmd)
|
||||
{
|
||||
if (UDPSinkUDPHandler::MsgUDPAddressAndPort::match(cmd))
|
||||
{
|
||||
UDPSinkUDPHandler::MsgUDPAddressAndPort& notif = (UDPSinkUDPHandler::MsgUDPAddressAndPort&) cmd;
|
||||
applyUDPLink(notif.getAddress(), notif.getPort());
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -23,8 +23,8 @@
|
||||
#include <QMutex>
|
||||
|
||||
#include "dsp/dsptypes.h"
|
||||
|
||||
class MessageQueue;
|
||||
#include "util/message.h"
|
||||
#include "util/messagequeue.h"
|
||||
|
||||
class UDPSinkUDPHandler : public QObject
|
||||
{
|
||||
@ -61,10 +61,35 @@ public slots:
|
||||
void dataReadyRead();
|
||||
|
||||
private:
|
||||
class MsgUDPAddressAndPort : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
||||
public:
|
||||
const QString& getAddress() const { return m_address; }
|
||||
quint16 getPort() const { return m_port; }
|
||||
|
||||
static MsgUDPAddressAndPort* create(QString address, quint16 port)
|
||||
{
|
||||
return new MsgUDPAddressAndPort(address, port);
|
||||
}
|
||||
|
||||
private:
|
||||
QString m_address;
|
||||
quint16 m_port;
|
||||
|
||||
MsgUDPAddressAndPort(QString address, quint16 port) :
|
||||
Message(),
|
||||
m_address(address),
|
||||
m_port(port)
|
||||
{ }
|
||||
};
|
||||
|
||||
typedef char (udpBlk_t)[m_udpBlockSize];
|
||||
|
||||
void moveData(char *blk);
|
||||
void advanceReadPointer(int nbBytes);
|
||||
void applyUDPLink(const QString& address, quint16 port);
|
||||
bool handleMessage(const Message& message);
|
||||
|
||||
QUdpSocket *m_dataSocket;
|
||||
QHostAddress m_dataAddress;
|
||||
@ -83,6 +108,10 @@ private:
|
||||
int m_rwDelta;
|
||||
float m_d;
|
||||
MessageQueue *m_feedbackMessageQueue;
|
||||
MessageQueue m_inputMessageQueue;
|
||||
|
||||
private slots:
|
||||
void handleMessages();
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user