QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
APMDataFlashUtility.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QByteArray>
4#include <QtCore/QMap>
5#include <QtCore/QString>
6#include <QtCore/QStringList>
7#include <QtCore/QVariant>
8
9#include <cstdint>
10#include <functional>
11
12namespace APMDataFlashUtility
13{
14
15// ============================================================================
16// Constants
17// ============================================================================
18
19constexpr uint8_t kHeaderByte1 = 0xA3;
20constexpr uint8_t kHeaderByte2 = 0x95;
21constexpr uint8_t kFmtMessageType = 128;
22constexpr int kFmtPayloadSize = 86;
23
24// ============================================================================
25// Message Format Structure
26// ============================================================================
27
29 uint8_t type = 0;
30 uint8_t length = 0;
31 QString name;
32 QString format;
33 QStringList columns;
35};
36
37// ============================================================================
38// Format Character Functions
39// ============================================================================
40
44int formatCharSize(char c);
45
49int calculatePayloadSize(const QString &format);
50
51// ============================================================================
52// Value Parsing
53// ============================================================================
54
65QVariant parseValue(const char* data, qint64 size, char formatChar);
66
72QMap<QString, QVariant> parseMessage(const char* data, qint64 size, 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
106bool parseFmtMessages(const char *data, qint64 size, QMap<uint8_t, MessageFormat> &formats);
107
108// ============================================================================
109// Message Iteration
110// ============================================================================
111
118using MessageCallback = std::function<bool(uint8_t msgType, const char *payload,
119 int payloadSize, const MessageFormat &fmt)>;
120
128int iterateMessages(const char *data, qint64 size,
129 const QMap<uint8_t, MessageFormat> &formats,
130 const MessageCallback &callback,
131 const std::function<void(float)> &progressCallback = nullptr);
132
133// ============================================================================
134// Half-Precision Float Conversion
135// ============================================================================
136
140float halfToFloat(uint16_t bits);
141
142} // namespace APMDataFlashUtility
float halfToFloat(uint16_t bits)
std::function< bool(uint8_t msgType, const char *payload, int payloadSize, const MessageFormat &fmt)> MessageCallback
constexpr uint8_t kHeaderByte2
constexpr uint8_t kFmtMessageType
constexpr uint8_t kHeaderByte1
qint64 findNextHeader(const char *data, qint64 size, qint64 offset)
bool isValidHeader(const char *data, qint64 size)
QVariant parseValue(const char *data, qint64 size, char formatChar)
int calculatePayloadSize(const QString &format)
bool parseFmtMessages(const char *data, qint64 size, QMap< uint8_t, MessageFormat > &formats)
constexpr int kFmtPayloadSize
int iterateMessages(const char *data, qint64 size, const QMap< uint8_t, MessageFormat > &formats, const MessageCallback &callback, const std::function< void(float)> &progressCallback)
QMap< QString, QVariant > parseMessage(const char *data, qint64 size, const MessageFormat &fmt)
MessageFormat parseFmtPayload(const char *data)
QString instanceColumn
Column marked with the '#' unit in FMTU, empty if none.