Commit 4b8834cc authored by DonLakeFlyer's avatar DonLakeFlyer

parent 4dec1b4c
...@@ -160,8 +160,12 @@ void UDPLink::_writeBytes(const QByteArray data) ...@@ -160,8 +160,12 @@ void UDPLink::_writeBytes(const QByteArray data)
return; return;
} }
emit bytesSent(this, data); emit bytesSent(this, data);
QMutexLocker locker(&_sessionTargetsMutex);
// Send to all manually targeted systems // Send to all manually targeted systems
for(UDPCLient* target: _udpConfig->targetHosts()) { for (int i=0; i<_udpConfig->targetHosts().count(); i++) {
UDPCLient* target = _udpConfig->targetHosts()[i];
// Skip it if it's part of the session clients below // Skip it if it's part of the session clients below
if(!contains_target(_sessionTargets, target->address, target->port)) { if(!contains_target(_sessionTargets, target->address, target->port)) {
_writeDataGram(data, target); _writeDataGram(data, target);
...@@ -219,11 +223,13 @@ void UDPLink::readBytes() ...@@ -219,11 +223,13 @@ void UDPLink::readBytes()
if(_isIpLocal(sender)) { if(_isIpLocal(sender)) {
asender = QHostAddress(QString("127.0.0.1")); asender = QHostAddress(QString("127.0.0.1"));
} }
if(!contains_target(_sessionTargets, asender, senderPort)) { QMutexLocker locker(&_sessionTargetsMutex);
if (!contains_target(_sessionTargets, asender, senderPort)) {
qDebug() << "Adding target" << asender << senderPort; qDebug() << "Adding target" << asender << senderPort;
UDPCLient* target = new UDPCLient(asender, senderPort); UDPCLient* target = new UDPCLient(asender, senderPort);
_sessionTargets.append(target); _sessionTargets.append(target);
} }
locker.unlock();
} }
//-- Send whatever is left //-- Send whatever is left
if (databuffer.size()) { if (databuffer.size()) {
...@@ -280,16 +286,13 @@ bool UDPLink::_hardwareConnect() ...@@ -280,16 +286,13 @@ bool UDPLink::_hardwareConnect()
if (_connectState) { if (_connectState) {
_socket->joinMulticastGroup(QHostAddress("224.0.0.1")); _socket->joinMulticastGroup(QHostAddress("224.0.0.1"));
//-- Make sure we have a large enough IO buffers //-- Make sure we have a large enough IO buffers
#ifdef __mobile__ #ifdef __mobile__
int bufferSizeMultiplier = 1; _socket->setSocketOption(QAbstractSocket::SendBufferSizeSocketOption, 64 * 1024);
_socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 128 * 1024);
#else #else
int bufferSizeMultiplier = 4; _socket->setSocketOption(QAbstractSocket::SendBufferSizeSocketOption, 256 * 1024);
_socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 512 * 1024);
#endif #endif
int receiveBufferSize = _udpConfig->isTransmitOnly() ? 0 : 512 * 1024;
_socket->setSocketOption(QAbstractSocket::SendBufferSizeSocketOption, bufferSizeMultiplier * 64 * 1024);
_socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, bufferSizeMultiplier * receiveBufferSize);
_registerZeroconf(_udpConfig->localPort(), kZeroconfRegistration); _registerZeroconf(_udpConfig->localPort(), kZeroconfRegistration);
QObject::connect(_socket, &QUdpSocket::readyRead, this, &UDPLink::readBytes); QObject::connect(_socket, &QUdpSocket::readyRead, this, &UDPLink::readBytes);
emit connected(); emit connected();
...@@ -361,9 +364,7 @@ void UDPLink::_deregisterZeroconf() ...@@ -361,9 +364,7 @@ void UDPLink::_deregisterZeroconf()
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
//-- UDPConfiguration //-- UDPConfiguration
UDPConfiguration::UDPConfiguration(const QString& name) UDPConfiguration::UDPConfiguration(const QString& name) : LinkConfiguration(name)
: LinkConfiguration(name)
, _transmitOnly(false)
{ {
AutoConnectSettings* settings = qgcApp()->toolbox()->settingsManager()->autoConnectSettings(); AutoConnectSettings* settings = qgcApp()->toolbox()->settingsManager()->autoConnectSettings();
_localPort = settings->udpListenPort()->rawValue().toInt(); _localPort = settings->udpListenPort()->rawValue().toInt();
...@@ -373,9 +374,7 @@ UDPConfiguration::UDPConfiguration(const QString& name) ...@@ -373,9 +374,7 @@ UDPConfiguration::UDPConfiguration(const QString& name)
} }
} }
UDPConfiguration::UDPConfiguration(UDPConfiguration* source) UDPConfiguration::UDPConfiguration(UDPConfiguration* source) : LinkConfiguration(source)
: LinkConfiguration(source)
, _transmitOnly(false)
{ {
_copyFrom(source); _copyFrom(source);
} }
......
...@@ -7,14 +7,6 @@ ...@@ -7,14 +7,6 @@
* *
****************************************************************************/ ****************************************************************************/
/*!
* @file
* @brief UDP connection (server) for unmanned vehicles
* @author Lorenz Meier <mavteam@student.ethz.ch>
*
*/
#pragma once #pragma once
#include <QString> #include <QString>
...@@ -22,7 +14,7 @@ ...@@ -22,7 +14,7 @@
#include <QMap> #include <QMap>
#include <QMutex> #include <QMutex>
#include <QUdpSocket> #include <QUdpSocket>
#include <QMutexLocker> #include <QMutex>
#include <QQueue> #include <QQueue>
#include <QByteArray> #include <QByteArray>
...@@ -111,14 +103,6 @@ public: ...@@ -111,14 +103,6 @@ public:
*/ */
void setLocalPort (quint16 port); void setLocalPort (quint16 port);
/*!
* @brief Set the UDP port to be transmit only. Receive buffer is set to zero.
*
*/
void setTransmitOnly (bool state) { _transmitOnly = state; }
bool isTransmitOnly () { return _transmitOnly; }
/*! /*!
* @brief QML Interface * @brief QML Interface
*/ */
...@@ -150,7 +134,6 @@ private: ...@@ -150,7 +134,6 @@ private:
QList<UDPCLient*> _targetHosts; QList<UDPCLient*> _targetHosts;
QStringList _hostList; ///< Exposed to QML QStringList _hostList; ///< Exposed to QML
quint16 _localPort; quint16 _localPort;
bool _transmitOnly;
}; };
class UDPLink : public LinkInterface class UDPLink : public LinkInterface
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment