Fixposition SDK 0.0.0-heads/main-0-g90a51ff
Collection of c++ libraries and apps for use with Fixposition products
Loading...
Searching...
No Matches
Parser NMEA routines and types

API: fpsdk_common/parser/nmea.hpp and fpsdk::common::parser::nmea

The NMEA framing and behaviour is defined by the NMEA 0183 standard (v4.11 and erratas).

In NMEA speak messages are called Sentences. Frames (messages) are in this form:

$TalkerFormatter,field1,field2,…,fieldN*CC\r\n

Where:

  • The NMEA style framing:
    • $ – Start character ("$", ASCII 36)
    • *CC – Checksum: "\*" (ASCII 42) and two digit XOR value of all payload characters in captial hexadecimal notation, for example: "FPX" = 'F' ^ 'P' ^ 'X' = 70 ^ 80 ^ 88 = 78 = 0x4e = checksum 4E
    • \r\n – Sentence termination characters (CR + LF, ASCII 13 + 10)
  • A Talker ID – Two capital characters:
    • GP – Talker ID for GPS, also legacy resp. "compatibility"
    • GL – Talker ID for GLONASS
    • GA – Talker ID for Galileo
    • GB – Talker ID for BeiDou
    • GQ – Talker ID for QZSS
    • GI – Talker ID for NavIC (IRNSS)
    • GN – Talker ID for any combination of GNSS
  • A Formatter ID – Three capital characters, for example:
    • RMC for the message containing recommended minimum specific GNSS data
    • See the NMEA 0183 standard document for an extensive list
  • Data fields (payload)
    • field1,field2,…,fieldN – The structure of the message data is defined by the Formatter. Each field can contain all printable 7-bit ASCII characters (ASCII 32–126), excluding the reserved characters ! (ASCII 33), $ (ASCII 36), * (ASCII 42), , (ASCII 44), \ (ASCII 92), ~ (ASCII 126).
  • Field separators
    • All fields (identifier, message type, message version, data fields) are separated by a , (comma, ASCII 44)
  • Null fields
    • Data fields can be null, meaning their value is absent to indicate that no data is available. The data for null fields is the empty string. For example:
      • Definition: …,fieldi,fieldi+1,fieldi+2,…
      • Values: fieldi = 123, fieldi+1 = null, fieldi+2 = 456
      • Payload string: …,123,,456,…
  • Data field types:
    • See the NMEA 0183 standard document for specifications