QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
DataFlashUtility.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QByteArray>
4#include <QtCore/QLoggingCategory>
5#include <QtCore/QMap>
6#include <QtCore/QString>
7#include <QtCore/QStringList>
8#include <QtCore/QVariant>
9
10#include <cstdint>
11#include <functional>
12
13Q_DECLARE_LOGGING_CATEGORY(DataFlashUtilityLog)
14
15namespace DataFlashUtility
16{
17
18// ============================================================================
19// Constants
20// ============================================================================
21
22constexpr uint8_t kHeaderByte1 = 0xA3;
23constexpr uint8_t kHeaderByte2 = 0x95;
24constexpr uint8_t kFmtMessageType = 128;
25constexpr int kFmtPayloadSize = 86;
26
27// ============================================================================
28// Message Format Structure
29// ============================================================================
30
32 uint8_t type = 0;
33 uint8_t length = 0;
34 QString name;
35 QString format;
36 QStringList columns;
37};
38
39// ============================================================================
40// Format Character Functions
41// ============================================================================
42
46int formatCharSize(char c);
47
51int calculatePayloadSize(const QString &format);
52
53// ============================================================================
54// Value Parsing
55// ============================================================================
56
66QVariant parseValue(const char *data, char formatChar);
67
72QMap<QString, QVariant> parseMessage(const char *data, const MessageFormat &fmt);
73
74// ============================================================================
75// Header and Message Detection
76// ============================================================================
77
82bool isValidHeader(const char *data, qint64 size);
83
89qint64 findNextHeader(const char *data, qint64 size, qint64 offset);
90
91// ============================================================================
92// FMT Message Parsing
93// ============================================================================
94
98MessageFormat parseFmtPayload(const char *data);
99
105bool parseFmtMessages(const char *data, qint64 size, QMap<uint8_t, MessageFormat> &formats);
106
107// ============================================================================
108// Message Iteration
109// ============================================================================
110
117using MessageCallback = std::function<bool(uint8_t msgType, const char *payload,
118 int payloadSize, const MessageFormat &fmt)>;
119
126int iterateMessages(const char *data, qint64 size,
127 const QMap<uint8_t, MessageFormat> &formats,
128 const MessageCallback &callback);
129
130// ============================================================================
131// Half-Precision Float Conversion
132// ============================================================================
133
137float halfToFloat(uint16_t bits);
138
139} // namespace DataFlashUtility
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
float halfToFloat(uint16_t bits)
int formatCharSize(char c)
qint64 findNextHeader(const char *data, qint64 size, qint64 offset)
bool parseFmtMessages(const char *data, qint64 size, QMap< uint8_t, MessageFormat > &formats)
int iterateMessages(const char *data, qint64 size, const QMap< uint8_t, MessageFormat > &formats, const MessageCallback &callback)
constexpr uint8_t kHeaderByte1
QMap< QString, QVariant > parseMessage(const char *data, const MessageFormat &fmt)
std::function< bool(uint8_t msgType, const char *payload, int payloadSize, const MessageFormat &fmt)> MessageCallback
MessageFormat parseFmtPayload(const char *data)
int calculatePayloadSize(const QString &format)
constexpr uint8_t kFmtMessageType
bool isValidHeader(const char *data, qint64 size)
QVariant parseValue(const char *data, char formatChar)
constexpr int kFmtPayloadSize
constexpr uint8_t kHeaderByte2