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