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, 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 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 114 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 37 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 200 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 15 of file APMDataFlashUtility.cc.

References formatCharSize().

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

◆ 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 50 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 191 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 
)

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 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)

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 APMDataFlashUtility.cc.

References isValidHeader(), kFmtMessageType, kFmtPayloadSize, kHeaderByte1, kHeaderByte2, parseFmtMessages(), parseFmtPayload(), 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 216 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,
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 APMDataFlashUtility.cc.

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

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

◆ parseValue()

QVariant APMDataFlashUtility::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 APMDataFlashUtility.cc.

References 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