QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
NTRIPConnectionStats.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QChronoTimer>
4#include <QtCore/QElapsedTimer>
5#include <QtCore/QHash>
6#include <QtCore/QObject>
7#include <QtCore/QVariant>
8#include <QtCore/QVariantList>
9#include <QtQmlIntegration/QtQmlIntegration>
10#include <chrono>
11
12#include "DataRateTracker.h"
13
14class NTRIPConnectionStats : public QObject
15{
16 Q_OBJECT
17 QML_ELEMENT
18 QML_UNCREATABLE("")
19 Q_PROPERTY(quint64 bytesReceived READ bytesReceived NOTIFY bytesReceivedChanged)
20 Q_PROPERTY(quint32 messagesReceived READ messagesReceived NOTIFY messagesReceivedChanged)
21 Q_PROPERTY(double dataRateBytesPerSec READ dataRateBytesPerSec NOTIFY dataRateChanged)
22 Q_PROPERTY(double correctionAgeSec READ correctionAgeSec NOTIFY correctionAgeChanged)
23 Q_PROPERTY(bool dataStale READ dataStale NOTIFY dataStaleChanged)
27 Q_PROPERTY(QVariantList messageCountsById READ messageCountsById NOTIFY messageCountsByIdChanged)
28
29public:
30 explicit NTRIPConnectionStats(QObject* parent = nullptr);
31
32 void start();
33 void stop();
36 void recordMessage(int bytes, int messageId = 0);
37 void reset();
38
39 quint64 bytesReceived() const { return _rateTracker.totalBytes(); }
40
41 quint32 messagesReceived() const { return _messagesReceived; }
42
43 double dataRateBytesPerSec() const { return _rateTracker.bytesPerSec(); }
44
45 double correctionAgeSec() const { return _lastMessageTime.isValid() ? _lastMessageTime.elapsed() / 1000.0 : -1.0; }
46
47 bool dataStale() const { return _dataStale; }
48
49 QVariantList messageCountsById() const;
50
51signals:
58
59private:
60 static constexpr std::chrono::milliseconds kStaleThreshold{5000};
61
62 DataRateTracker _rateTracker;
63 quint64 _prevBytesReceived = 0;
64 quint32 _messagesReceived = 0;
65 quint32 _prevMessagesReceived = 0;
66 bool _dataStale = false;
67 bool _messageCountsDirty = false;
68 QElapsedTimer _lastMessageTime;
69 QChronoTimer _rateTimer;
70 // Per-ID counts. Using int for compatibility with QVariant in QML.
71 QHash<int, quint32> _messageCountsById;
72};
double bytesPerSec() const
quint64 totalBytes() const
Total bytes recorded since construction or last reset.
double correctionAgeSec() const
void messageCountsByIdChanged()
quint32 messagesReceived() const
quint64 bytesReceived() const
double dataRateBytesPerSec() const
void messagesReceivedChanged()
QVariantList messageCountsById() const
void recordMessage(int bytes, int messageId=0)