QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
TCPGPSTransport.cc
Go to the documentation of this file.
1#include "TCPGPSTransport.h"
2
3#include <utility>
4
5#include <QtCore/QCoreApplication>
6#include <QtNetwork/QTcpSocket>
7
9
10QGC_LOGGING_CATEGORY(TCPGPSTransportLog, "GPS.Transport.TCPGPSTransport")
11
12namespace {
13GPSOpenResult socketOpenFailure(const GPSTransport& transport, QAbstractSocket& socket, QDeadlineTimer deadline)
14{
15 const bool timedOut = deadline.hasExpired();
16 const GPSOpenResult result{
18 : timedOut ? GPSOpenStatus::TimedOut
20 timedOut ? QCoreApplication::translate("GPSTransport", "Receiver connection timed out") : socket.errorString()};
21 socket.abort();
22 return result;
23}
24} // namespace
25
26TCPGPSTransport::TCPGPSTransport(QString host, quint16 port, GPSCancelToken cancelToken)
27 : GPSDeviceTransport(std::move(cancelToken))
28 , _host(std::move(host))
29 , _port(port)
30{}
31
33
35{
36 if (isCancelled()) {
38 }
39 const QDeadlineTimer connectDeadline(CONNECT_TIMEOUT);
40 _socket = std::make_unique<QTcpSocket>();
41 _socket->setReadBufferSize(READ_BUFFER_BYTES);
42 _socket->connectToHost(_host, _port);
43 if (waitForDevice([this]() { return _socket->state() == QAbstractSocket::ConnectedState; }, connectDeadline)) {
44 return {GPSOpenStatus::Opened};
45 }
46 if (!isCancelled()) {
47 qCWarning(TCPGPSTransportLog) << "Failed to connect to GPS receiver" << _host << _port
48 << _socket->errorString();
49 }
50 return socketOpenFailure(*this, *_socket, connectDeadline);
51}
52
54{
55 return !_socket || _socket->state() == QAbstractSocket::UnconnectedState;
56}
57
58QIODevice* TCPGPSTransport::device() const
59{
60 return _socket.get();
61}
62
63std::chrono::milliseconds TCPGPSTransport::configurationWriteTimeout() const
64{
65 return WRITE_TIMEOUT;
66}
67
69{
70 _socket->abort();
71}
QString errorString
#define QGC_LOGGING_CATEGORY(name, categoryStr)
bool waitForDevice(const std::function< bool()> &ready, QDeadlineTimer deadline)
static constexpr qint64 READ_BUFFER_BYTES
bool isCancelled() const
void retire() override
Retires the connection after a failed write that accepted bytes; by default closes the device.
GPSOpenResult open() override
QIODevice * device() const override
The open device, or null before open().
std::chrono::milliseconds configurationWriteTimeout() const override
~TCPGPSTransport() override
bool fatalError() const override
TCPGPSTransport(QString host, quint16 port, GPSCancelToken cancelToken)