QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
GPSTransport.h
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <cstdint>
5#include <span>
6
7#include <QtCore/QByteArrayView>
8#include <QtCore/QDeadlineTimer>
9#include <QtCore/QString>
10
11#include "GPSCancellation.h"
12
13enum class GPSOpenStatus
14{
15 Opened,
18 Error,
20};
21
22enum class GPSReadStatus
23{
24 Data,
27 Closed,
28 Error,
30};
31
33{
37 Error,
39};
40
41struct [[nodiscard]] GPSOpenResult
42{
44 QString detail = {};
45};
46
47struct [[nodiscard]] GPSReadResult
48{
50 int bytesRead = 0;
51 QString detail = {};
52};
53
54struct [[nodiscard]] GPSWriteResult
55{
57 int acceptedBytes = 0;
58 int writtenBytes = 0;
59 QString detail = {};
60
62 [[nodiscard]] int uncertainBytes() const
63 {
64 return acceptedBytes >= 0 && writtenBytes >= 0 && writtenBytes <= acceptedBytes ? acceptedBytes - writtenBytes
65 : -1;
66 }
67};
68
76{
77public:
79 virtual ~GPSTransport();
80
81 virtual GPSOpenResult open() = 0;
82 virtual bool fatalError() const = 0;
83
84 bool isCancelled() const { return _cancelToken.isCancelled(); }
85
86 const GPSCancelToken& cancelToken() const { return _cancelToken; }
87
89 virtual unsigned fixedBaudrate() const { return 0; }
90
93 static constexpr unsigned BRIDGE_BAUDRATE = 115200;
96 static constexpr qint64 READ_BUFFER_BYTES = 64 * 1024;
98 static constexpr qint64 WRITE_BUFFER_BYTES = 4 * 1024;
99
102 virtual GPSReadResult read(std::span<uint8_t> buffer, std::chrono::milliseconds timeout) = 0;
103
104 virtual std::chrono::milliseconds configurationWriteTimeout() const;
105
109 GPSWriteResult write(QByteArrayView bytes, QDeadlineTimer deadline);
110
113 virtual bool setBaudrate(unsigned baudrate);
114
115protected:
117 virtual GPSWriteResult writeData(QByteArrayView bytes, QDeadlineTimer deadline) = 0;
118
119private:
120 GPSCancelToken _cancelToken;
121};
GPSWriteStatus
GPSOpenStatus
GPSReadStatus
bool isCancelled() const
Safe to call from any thread.
virtual bool fatalError() const =0
GPSWriteResult write(QByteArrayView bytes, QDeadlineTimer deadline)
virtual ~GPSTransport()
virtual bool setBaudrate(unsigned baudrate)
static constexpr qint64 READ_BUFFER_BYTES
virtual GPSOpenResult open()=0
bool isCancelled() const
static constexpr unsigned BRIDGE_BAUDRATE
virtual GPSWriteResult writeData(QByteArrayView bytes, QDeadlineTimer deadline)=0
Receives non-empty bytes and an unexpired, capped deadline that implementations must honor.
virtual GPSReadResult read(std::span< uint8_t > buffer, std::chrono::milliseconds timeout)=0
virtual std::chrono::milliseconds configurationWriteTimeout() const
virtual unsigned fixedBaudrate() const
Nonzero when the link cannot follow baud-rate changes (for example, a serial bridge).
static constexpr qint64 WRITE_BUFFER_BYTES
Bytes a link queues for writing at once.
const GPSCancelToken & cancelToken() const
int uncertainBytes() const
Invalid counts return -1 rather than masking inconsistent evidence.