QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
LinkInterface.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QElapsedTimer>
4#include <QtQmlIntegration/QtQmlIntegration>
5
6#include <memory>
7
8#include "LinkConfiguration.h"
10
11class LinkManager;
13
16class LinkInterface : public QObject
17{
18 Q_OBJECT
19 QML_ELEMENT
20 QML_UNCREATABLE("")
21 friend class LinkManager;
22
23public:
24 virtual ~LinkInterface();
25
26 Q_INVOKABLE virtual void disconnect() = 0; // Implementations should guard against multiple calls
27
28 virtual bool isConnected() const = 0;
29 virtual bool isLogReplay() const { return false; }
30 virtual bool isSecureConnection() const { return false; }
31
34 uint8_t mavlinkChannel() const;
35 bool mavlinkChannelIsSet() const;
36 bool decodedFirstMavlinkPacket() const { return _decodedFirstMavlinkPacket; }
38 void writeBytesThreadSafe(const char *bytes, int length);
42 void addVehicleReference() { ++_vehicleReferenceCount; }
48 void reportMavlinkV2Traffic() { _mavlinkV2TrafficSeen = true; }
49 bool mavlinkV1TrafficReported() const { return _mavlinkV1TrafficReported; }
50
53 static constexpr int kMavlinkV1TrafficGraceMsecsDefault = 10000;
54 static void setMavlinkV1TrafficGraceMsecs(int msecs) { _mavlinkV1TrafficGraceMsecs = msecs; }
55
57 SigningController* signing() { return _signingController.get(); }
58 const SigningController* signing() const { return _signingController.get(); }
59
60signals:
61 void bytesReceived(LinkInterface *link, const QByteArray &data);
62 void bytesSent(LinkInterface *link, const QByteArray &data);
63 void connected();
65 void communicationError(const QString &title, const QString &error);
66
67protected:
69 explicit LinkInterface(SharedLinkConfigurationPtr &config, QObject *parent = nullptr);
70
73 virtual bool _allocateMavlinkChannel();
74
75 virtual void _freeMavlinkChannel();
76
77 void _connectionRemoved();
78
80
81private slots:
83 virtual void _writeBytes(const QByteArray &bytes) = 0;
84
85private:
87 virtual bool _connect() = 0;
88
89 uint8_t _mavlinkChannel = std::numeric_limits<uint8_t>::max();
90 bool _decodedFirstMavlinkPacket = false;
91 int _vehicleReferenceCount = 0;
92 bool _mavlinkV1TrafficReported = false;
93 bool _mavlinkV2TrafficSeen = false;
94 QElapsedTimer _mavlinkV1FirstSeenTimer;
95 static inline int _mavlinkV1TrafficGraceMsecs = kMavlinkV1TrafficGraceMsecsDefault;
98 std::unique_ptr<SigningController> _signingController;
99};
100
101typedef std::shared_ptr<LinkInterface> SharedLinkInterfacePtr;
102typedef std::weak_ptr<LinkInterface> WeakLinkInterfacePtr;
Config config
std::shared_ptr< LinkConfiguration > SharedLinkConfigurationPtr
std::shared_ptr< LinkInterface > SharedLinkInterfacePtr
std::weak_ptr< LinkInterface > WeakLinkInterfacePtr
Error error
struct __mavlink_message mavlink_message_t
The link interface defines the interface for all links used to communicate with the ground station ap...
void bytesReceived(LinkInterface *link, const QByteArray &data)
void disconnected()
void setDecodedFirstMavlinkPacket(bool decodedFirstMavlinkPacket)
uint8_t mavlinkChannel() const
void addVehicleReference()
virtual void _freeMavlinkChannel()
virtual bool isLogReplay() const
bool decodedFirstMavlinkPacket() const
virtual Q_INVOKABLE void disconnect()=0
void sendMessageThreadSafe(mavlink_message_t &message)
void reportMavlinkV1Traffic()
const SharedLinkConfigurationPtr linkConfiguration() const
void reportMavlinkV2Traffic()
Called when a v2 message is received: permanently suppresses the v1-only warning for this link.
void _connectionRemoved()
bool mavlinkChannelIsSet() const
virtual bool isConnected() const =0
virtual bool _allocateMavlinkChannel()
SigningController * signing()
Per-link signing state and confirmation state machine. Non-null after channel allocation.
bool mavlinkV1TrafficReported() const
void removeVehicleReference()
virtual bool isSecureConnection() const
Returns true if the connection is secure (e.g. USB, wired ethernet)
void communicationError(const QString &title, const QString &error)
const SigningController * signing() const
static void setMavlinkV1TrafficGraceMsecs(int msecs)
void bytesSent(LinkInterface *link, const QByteArray &data)
void writeBytesThreadSafe(const char *bytes, int length)
static constexpr int kMavlinkV1TrafficGraceMsecsDefault
void connected()
SharedLinkConfigurationPtr linkConfiguration()
SharedLinkConfigurationPtr _config
Manage communication links The Link Manager organizes the physical Links. It can manage arbitrary lin...
Definition LinkManager.h:32
Owns MAVLink signing state and the deferred-confirmation state machine for one LinkInterface.