QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
UDPGPSTransport.h
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <memory>
5
6#include <QtCore/QByteArray>
7#include <QtCore/QElapsedTimer>
8#include <QtNetwork/QHostAddress>
9
10#include "GPSDeviceTransport.h"
11
12class QUdpSocket;
13
20{
21public:
22 static constexpr std::chrono::milliseconds PEER_IDLE_TIMEOUT{5000};
23
25 std::chrono::milliseconds peerIdleTimeout = PEER_IDLE_TIMEOUT);
26 ~UDPGPSTransport() override;
27
28 GPSOpenResult open() override;
29 bool fatalError() const override;
30
32 unsigned fixedBaudrate() const override { return BRIDGE_BAUDRATE; }
33
34protected:
35 QIODevice* device() const override;
36 bool waitReadable(QDeadlineTimer deadline) override;
37 qint64 take(std::span<uint8_t> buffer) override;
38 GPSWriteResult writeData(QByteArrayView bytes, QDeadlineTimer deadline) override;
39
40private:
41 void _receivePending();
42
43 quint16 _port;
44 std::chrono::milliseconds _peerIdleTimeout;
45 std::unique_ptr<QUdpSocket> _socket;
46 QByteArray _pending;
47 QHostAddress _peerAddress;
48 quint16 _peerPort = 0;
49 QElapsedTimer _peerIdle;
50};
static constexpr unsigned BRIDGE_BAUDRATE
const GPSCancelToken & cancelToken() const
QIODevice * device() const override
The open device, or null before open().
bool waitReadable(QDeadlineTimer deadline) override
Waits until input is buffered. Input reported buffered is delivered even after the link fails.
GPSOpenResult open() override
~UDPGPSTransport() override
GPSWriteResult writeData(QByteArrayView bytes, QDeadlineTimer deadline) override
Receives non-empty bytes and an unexpired, capped deadline that implementations must honor.
static constexpr std::chrono::milliseconds PEER_IDLE_TIMEOUT
unsigned fixedBaudrate() const override
Datagrams carry no line rate; drivers see the bridge rate.
bool fatalError() const override
qint64 take(std::span< uint8_t > buffer) override
Takes buffered input.