QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
DataFlashUtility Namespace Reference

Classes

struct  MessageFormat
 

Typedefs

using MessageCallback = std::function< bool(uint8_t msgType, const char *payload, int payloadSize, const MessageFormat &fmt)>
 

Functions

int formatCharSize (char c)
 
int calculatePayloadSize (const QString &format)
 
float halfToFloat (uint16_t bits)
 
QVariant parseValue (const char *data, char formatChar)
 
QMap< QString, QVariant > parseMessage (const char *data, const MessageFormat &fmt)
 
bool isValidHeader (const char *data, qint64 size)
 
qint64 findNextHeader (const char *data, qint64 size, qint64 offset)
 
MessageFormat parseFmtPayload (const char *data)
 
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)
 

Variables

constexpr uint8_t kHeaderByte1 = 0xA3
 
constexpr uint8_t kHeaderByte2 = 0x95
 
constexpr uint8_t kFmtMessageType = 128
 
constexpr int kFmtPayloadSize = 86
 

Typedef Documentation

◆ MessageCallback

using DataFlashUtility::MessageCallback = typedef std::function<bool(uint8_t msgType, const char *payload, int payloadSize, const MessageFormat &fmt)>

Callback for message iteration

Parameters
msgTypeMessage type
payloadPointer to message payload (after header)
payloadSizeSize of payload
fmtMessageFormat for this message type
Returns
true to continue iteration, false to stop

Definition at line 117 of file DataFlashUtility.h.

Function Documentation

◆ calculatePayloadSize()

int DataFlashUtility::calculatePayloadSize ( const QString &  format)

Calculate total payload size from a format string

Parameters
formatFormat string (e.g., "QBILLefffff")
Returns
Total size in bytes

Definition at line 37 of file DataFlashUtility.cc.

References calculatePayloadSize(), and formatCharSize().

Referenced by calculatePayloadSize().

◆ findNextHeader()

qint64 DataFlashUtility::findNextHeader ( const char *  data,
qint64  size,
qint64  offset 
)

Find the next message header starting from offset

Parameters
dataPointer to data
sizeTotal size of data
offsetStarting position to search from
Returns
Offset of next header, or -1 if not found

Definition at line 200 of file DataFlashUtility.cc.

References findNextHeader(), kHeaderByte1, and kHeaderByte2.

Referenced by findNextHeader().

◆ formatCharSize()

int DataFlashUtility::formatCharSize ( char  c)

Get the byte size for a DataFlash format character

Parameters
cFormat character (from pymavlink FORMAT_TO_STRUCT)
Returns
Size in bytes, or 0 for unknown format characters

Definition at line 15 of file DataFlashUtility.cc.

References formatCharSize().

Referenced by calculatePayloadSize(), formatCharSize(), and parseMessage().

◆ halfToFloat()

float DataFlashUtility::halfToFloat ( uint16_t  bits)

Convert IEEE 754 binary16 (half-precision) to single-precision float

Parameters
bits16-bit half-precision representation
Returns
Converted float value

Definition at line 50 of file DataFlashUtility.cc.

References halfToFloat().

Referenced by halfToFloat(), and parseValue().

◆ isValidHeader()

bool DataFlashUtility::isValidHeader ( const char *  data,
qint64  size 
)

Check if data starts with a valid DataFlash header

Parameters
dataPointer to data
sizeSize of available data
Returns
true if data starts with 0xA3 0x95

Definition at line 191 of file DataFlashUtility.cc.

References isValidHeader(), kHeaderByte1, and kHeaderByte2.

Referenced by DataFlashParser::getTagsFromLog(), isValidHeader(), and parseFmtMessages().

◆ iterateMessages()

int DataFlashUtility::iterateMessages ( const char *  data,
qint64  size,
const QMap< uint8_t, MessageFormat > &  formats,
const MessageCallback callback 
)

Iterate over all messages in a DataFlash log

Parameters
dataPointer to complete log data
sizeSize of log data
formatsMessage formats from parseFmtMessages()
callbackFunction called for each message
Returns
Number of messages processed

Definition at line 275 of file DataFlashUtility.cc.

References iterateMessages(), kHeaderByte1, kHeaderByte2, and DataFlashUtility::MessageFormat::length.

Referenced by DataFlashParser::getTagsFromLog(), and iterateMessages().

◆ parseFmtMessages()

bool DataFlashUtility::parseFmtMessages ( const char *  data,
qint64  size,
QMap< uint8_t, MessageFormat > &  formats 
)

Parse all FMT messages from a DataFlash log (first pass)

Parameters
dataPointer to complete log data
sizeSize of log data
formatsOutput map of message type -> MessageFormat
Returns
true if any FMT messages were found

Definition at line 228 of file DataFlashUtility.cc.

References isValidHeader(), kFmtMessageType, kFmtPayloadSize, kHeaderByte1, kHeaderByte2, parseFmtMessages(), parseFmtPayload(), and DataFlashUtility::MessageFormat::type.

Referenced by DataFlashParser::getTagsFromLog(), and parseFmtMessages().

◆ parseFmtPayload()

MessageFormat DataFlashUtility::parseFmtPayload ( const char *  data)

Parse an FMT message payload into a MessageFormat structure

Parameters
dataPointer to FMT payload (86 bytes: Type(1)+Length(1)+Name(4)+Format(16)+Columns(64))
Returns
Parsed MessageFormat

Definition at line 216 of file DataFlashUtility.cc.

References DataFlashUtility::MessageFormat::columns, DataFlashUtility::MessageFormat::format, DataFlashUtility::MessageFormat::length, DataFlashUtility::MessageFormat::name, parseFmtPayload(), and DataFlashUtility::MessageFormat::type.

Referenced by parseFmtMessages(), and parseFmtPayload().

◆ parseMessage()

QMap< QString, QVariant > DataFlashUtility::parseMessage ( const char *  data,
const MessageFormat fmt 
)

Parse message data into a map of field name -> value

Parameters
dataPointer to the message payload (after header)
fmtMessage format definition
Returns
Map of column name to parsed value

Definition at line 166 of file DataFlashUtility.cc.

References DataFlashUtility::MessageFormat::columns, DataFlashUtility::MessageFormat::format, formatCharSize(), parseMessage(), and parseValue().

Referenced by DataFlashParser::getTagsFromLog(), and parseMessage().

◆ parseValue()

QVariant DataFlashUtility::parseValue ( const char *  data,
char  formatChar 
)

Parse a value from binary data based on format character Handles scaling for special types:

  • 'c'/'C': Centi-degrees (divide by 100)
  • 'e'/'E': Centi-units (divide by 100)
  • 'L': Lat/Lon (divide by 1e7)
  • 'g': Half-precision float (IEEE 754 binary16)
    Parameters
    dataPointer to binary data
    formatCharFormat character
    Returns
    QVariant containing the parsed value

Definition at line 74 of file DataFlashUtility.cc.

References halfToFloat(), and parseValue().

Referenced by parseMessage(), and parseValue().

Variable Documentation

◆ kFmtMessageType

constexpr uint8_t DataFlashUtility::kFmtMessageType = 128
constexpr

Definition at line 24 of file DataFlashUtility.h.

Referenced by parseFmtMessages().

◆ kFmtPayloadSize

constexpr int DataFlashUtility::kFmtPayloadSize = 86
constexpr

Definition at line 25 of file DataFlashUtility.h.

Referenced by parseFmtMessages().

◆ kHeaderByte1

constexpr uint8_t DataFlashUtility::kHeaderByte1 = 0xA3
constexpr

◆ kHeaderByte2

constexpr uint8_t DataFlashUtility::kHeaderByte2 = 0x95
constexpr