QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
TCPLink.h
Go to the documentation of this file.
1#pragma once
2
3#include "LinkConfiguration.h"
4#include "LinkInterface.h"
5
6#include <QtCore/QByteArray>
7#include <QtCore/QString>
8#include <QtNetwork/QAbstractSocket>
9
10#include <atomic>
11
12class QTcpSocket;
13class QThread;
14
15/*===========================================================================*/
16
18{
19 Q_OBJECT
20
21 Q_PROPERTY(QString host READ host WRITE setHost NOTIFY hostChanged)
22 Q_PROPERTY(quint16 port READ port WRITE setPort NOTIFY portChanged)
23
24public:
25 explicit TCPConfiguration(const QString &name, QObject *parent = nullptr);
26 explicit TCPConfiguration(const TCPConfiguration *copy, QObject *parent = nullptr);
27 ~TCPConfiguration() override;
28
29 LinkType type() const override { return LinkConfiguration::TypeTcp; }
30 void copyFrom(const LinkConfiguration *source) override;
31 void loadSettings(QSettings &settings, const QString &root) override;
32 void saveSettings(QSettings &settings, const QString &root) const override;
33 QString settingsURL() const override { return QStringLiteral("TcpSettings.qml"); }
34 QString settingsTitle() const override { return tr("TCP Link Settings"); }
35
36 QString host() const { return _host; }
37 void setHost(const QString &host);
38 quint16 port() const { return _port; }
39 void setPort(quint16 port);
40
41signals:
44
45private:
46 QString _host;
47 quint16 _port = 5760;
48};
49
50/*===========================================================================*/
51
52class TCPWorker : public QObject
53{
54 Q_OBJECT
55
56public:
57 explicit TCPWorker(const TCPConfiguration *config, QObject *parent = nullptr);
58 ~TCPWorker() override;
59
60 bool isConnected() const;
61
62signals:
63 void connected();
65 void errorOccurred(const QString &errorString);
66 void dataReceived(const QByteArray &data);
67 void dataSent(const QByteArray &data);
68
69public slots:
70 void setupSocket();
71 void connectToHost();
72 void disconnectFromHost();
73 void writeData(const QByteArray &data);
74
75private slots:
76 void _onSocketConnected();
77 void _onSocketDisconnected();
78 void _onSocketReadyRead();
79 void _onSocketBytesWritten(qint64 bytes);
80 void _onSocketErrorOccurred(QAbstractSocket::SocketError socketError);
81
82private:
83 const TCPConfiguration *_config = nullptr;
84 QTcpSocket *_socket = nullptr;
85 std::atomic<bool> _errorEmitted{false};
86};
87
88/*===========================================================================*/
89
90class TCPLink : public LinkInterface
91{
92 Q_OBJECT
93
94public:
95 explicit TCPLink(SharedLinkConfigurationPtr &config, QObject *parent = nullptr);
96 ~TCPLink() override;
97
98 bool isConnected() const override;
99 void disconnect() override;
100 bool isSecureConnection() const override;
101
102private slots:
103 void _writeBytes(const QByteArray &bytes) override;
104 void _onConnected();
105 void _onDisconnected();
106 void _onErrorOccurred(const QString &errorString);
107 void _onDataReceived(const QByteArray &data);
108 void _onDataSent(const QByteArray &data);
109
110private:
111 bool _connect() override;
112
113 const TCPConfiguration *_tcpConfig = nullptr;
114 TCPWorker *_worker = nullptr;
115 QThread *_workerThread = nullptr;
116 std::atomic<bool> _disconnectedEmitted{false};
117};
std::shared_ptr< LinkConfiguration > SharedLinkConfigurationPtr
QString errorString
Interface holding link specific settings.
QString name() const
The link interface defines the interface for all links used to communicate with the ground station ap...
QString settingsTitle() const override
Settings Title, Pure virtual method providing the Title for the (QML) settings dialog.
Definition TCPLink.h:34
quint16 port() const
Definition TCPLink.h:38
QString settingsURL() const override
Settings URL, Pure virtual method providing the URL for the (QML) settings dialog.
Definition TCPLink.h:33
~TCPConfiguration() override
Definition TCPLink.cc:34
LinkType type() const override
Definition TCPLink.h:29
void setPort(quint16 port)
Definition TCPLink.cc:48
void loadSettings(QSettings &settings, const QString &root) override
Definition TCPLink.cc:66
void setHost(const QString &host)
Definition TCPLink.cc:39
QString host() const
Definition TCPLink.h:36
void saveSettings(QSettings &settings, const QString &root) const override
Definition TCPLink.cc:76
void copyFrom(const LinkConfiguration *source) override
Definition TCPLink.cc:56
void setupSocket()
Definition TCPLink.cc:107
bool isConnected() const
Definition TCPLink.cc:102
~TCPWorker() override
Definition TCPLink.cc:95
void disconnectFromHost()
Definition TCPLink.cc:165
void errorOccurred(const QString &errorString)
void connectToHost()
Definition TCPLink.cc:135
void dataReceived(const QByteArray &data)
void dataSent(const QByteArray &data)
void writeData(const QByteArray &data)
Definition TCPLink.cc:181
void connected()
void disconnected()