QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
APMDataFlashUtility 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, qint64 size, char formatChar)
 
QMap< QString, QVariant > parseMessage (const char *data, qint64 size, 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, const std::function< void(float)> &progressCallback)
 

Variables

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

Typedef Documentation

◆ MessageCallback

using APMDataFlashUtility::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 118 of file APMDataFlashUtility.h.

Function Documentation

◆ calculatePayloadSize()

int APMDataFlashUtility::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 42 of file APMDataFlashUtility.cc.

References calculatePayloadSize(), and formatCharSize().

Referenced by calculatePayloadSize().

◆ findNextHeader()

qint64 APMDataFlashUtility::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 194 of file APMDataFlashUtility.cc.

References findNextHeader(), kHeaderByte1, and kHeaderByte2.

Referenced by findNextHeader().

◆ formatCharSize()

int APMDataFlashUtility::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 20 of file APMDataFlashUtility.cc.

References formatCharSize().

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

◆ halfToFloat()

float APMDataFlashUtility::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 55 of file APMDataFlashUtility.cc.

References halfToFloat().

Referenced by halfToFloat(), and parseValue().

◆ isValidHeader()

bool APMDataFlashUtility::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 185 of file APMDataFlashUtility.cc.

References isValidHeader(), kHeaderByte1, and kHeaderByte2.

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

◆ iterateMessages()

int APMDataFlashUtility::iterateMessages ( const char *  data,
qint64  size,
const QMap< uint8_t, MessageFormat > &  formats,
const MessageCallback &  callback,
const std::function< void(float)> &  progressCallback = nullptr 
)

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
progressCallbackOptional callback invoked every ~1000 messages with byte-position progress (0.0–1.0)
Returns
Number of messages processed

Definition at line 296 of file APMDataFlashUtility.cc.

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

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

◆ parseFmtMessages()

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

Parse all FMT messages from a DataFlash log (first pass) Also applies FMTU units to set MessageFormat::instanceColumn

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 222 of file APMDataFlashUtility.cc.

References isValidHeader(), kFmtMessageType, kFmtPayloadSize, kHeaderByte1, kHeaderByte2, APMDataFlashUtility::MessageFormat::length, APMDataFlashUtility::MessageFormat::name, parseFmtMessages(), parseFmtPayload(), parseMessage(), and APMDataFlashUtility::MessageFormat::type.

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

◆ parseFmtPayload()

MessageFormat APMDataFlashUtility::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 210 of file APMDataFlashUtility.cc.

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

Referenced by parseFmtMessages(), and parseFmtPayload().

◆ parseMessage()

QMap< QString, QVariant > APMDataFlashUtility::parseMessage ( const char *  data,
qint64  size,
const MessageFormat &  fmt 
)

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

Parameters
dataPointer to the message payload (after header)
sizeSize of available payload data
fmtMessage format definition
Returns
Map of column name to parsed value, or an empty map with a diagnostic on invalid input

Definition at line 154 of file APMDataFlashUtility.cc.

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

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

◆ parseValue()

QVariant APMDataFlashUtility::parseValue ( const char *  data,
qint64  size,
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
    sizeSize of available data
    formatCharFormat character
    Returns
    Parsed little-endian value, or an invalid QVariant with a diagnostic on invalid input

Definition at line 64 of file APMDataFlashUtility.cc.

References formatCharSize(), halfToFloat(), and parseValue().

Referenced by parseMessage(), and parseValue().

Variable Documentation

◆ kFmtMessageType

constexpr uint8_t APMDataFlashUtility::kFmtMessageType = 128
constexpr

Definition at line 21 of file APMDataFlashUtility.h.

Referenced by parseFmtMessages().

◆ kFmtPayloadSize

constexpr int APMDataFlashUtility::kFmtPayloadSize = 86
constexpr

Definition at line 22 of file APMDataFlashUtility.h.

Referenced by parseFmtMessages().

◆ kHeaderByte1

constexpr uint8_t APMDataFlashUtility::kHeaderByte1 = 0xA3
constexpr

◆ kHeaderByte2

constexpr uint8_t APMDataFlashUtility::kHeaderByte2 = 0x95
constexpr