Skip to content

File syn_nmea.c

FileList > proto > syn_nmea.c

Go to the source code of this file

NMEA 0183 / GNSS sentence parser and encoder implementation.

  • #include "../util/syn_assert.h"
  • #include "syn_nmea.h"
  • #include <ctype.h>
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <string.h>

Public Functions

Type Name
uint8_t syn_nmea_checksum (const char * sentence)
Calculate XOR checksum of an NMEA sentence payload (between '$' and '*').
SYN_NMEA_SentenceType syn_nmea_get_type (const char * sentence)
Identify sentence type from NMEA string.
double syn_nmea_parse_coord (const char * nmea_coord, char dir)
Parse NMEA DDMM.MMMM coordinate string and direction indicator.
bool syn_nmea_parse_gga (const char * sentence, SYN_NMEA_GGA * gga)
Parse a $GPGGA / $GNGGA sentence.
bool syn_nmea_parse_gsa (const char * sentence, SYN_NMEA_GSA * gsa)
Parse a $GPGSA / $GNGSA sentence.
bool syn_nmea_parse_rmc (const char * sentence, SYN_NMEA_RMC * rmc)
Parse a $GPRMC / $GNRMC sentence.
bool syn_nmea_parse_vtg (const char * sentence, SYN_NMEA_VTG * vtg)
Parse a $GPVTG / $GNVTG sentence.
bool syn_nmea_parse_zda (const char * sentence, SYN_NMEA_ZDA * zda)
Parse a $GPZDA / $GNZDA sentence.
bool syn_nmea_parser_feed (SYN_NMEA_Parser * parser, char byte, char * out_sentence)
Feed a byte into the NMEA streaming parser.
void syn_nmea_parser_init (SYN_NMEA_Parser * parser)
Initialize an NMEA streaming parser.
bool syn_nmea_validate (const char * sentence)
Validate an NMEA sentence string (checks start '$', '*XX' checksum, and CRLF).

Public Static Functions

Type Name
bool get_field (const char * sentence, uint8_t index, char * dest, size_t max_len)
uint8_t hex2dec (char c)
void parse_time (const char * field, uint8_t * h, uint8_t * m, uint8_t * s, uint16_t * ms)

Public Functions Documentation

function syn_nmea_checksum

Calculate XOR checksum of an NMEA sentence payload (between '$' and '*').

uint8_t syn_nmea_checksum (
    const char * sentence
) 

Parameters:

  • sentence NMEA sentence string.

Returns:

8-bit XOR checksum value.


function syn_nmea_get_type

Identify sentence type from NMEA string.

SYN_NMEA_SentenceType syn_nmea_get_type (
    const char * sentence
) 

Parameters:

  • sentence NMEA sentence string.

Returns:

SYN_NMEA_SentenceType enum.


function syn_nmea_parse_coord

Parse NMEA DDMM.MMMM coordinate string and direction indicator.

double syn_nmea_parse_coord (
    const char * nmea_coord,
    char dir
) 

Parameters:

  • nmea_coord Coordinate string (e.g. "4807.038").
  • dir Direction char ('N', 'S', 'E', 'W').

Returns:

Decimal degrees (+N/+E, -S/-W).


function syn_nmea_parse_gga

Parse a $GPGGA / $GNGGA sentence.

bool syn_nmea_parse_gga (
    const char * sentence,
    SYN_NMEA_GGA * gga
) 

Parameters:

  • sentence NMEA sentence string.
  • gga Pointer to destination GGA struct.

Returns:

true on success.


function syn_nmea_parse_gsa

Parse a $GPGSA / $GNGSA sentence.

bool syn_nmea_parse_gsa (
    const char * sentence,
    SYN_NMEA_GSA * gsa
) 

Parameters:

  • sentence NMEA sentence string.
  • gsa Pointer to destination GSA struct.

Returns:

true on success.


function syn_nmea_parse_rmc

Parse a $GPRMC / $GNRMC sentence.

bool syn_nmea_parse_rmc (
    const char * sentence,
    SYN_NMEA_RMC * rmc
) 

Parameters:

  • sentence NMEA sentence string.
  • rmc Pointer to destination RMC struct.

Returns:

true on success.


function syn_nmea_parse_vtg

Parse a $GPVTG / $GNVTG sentence.

bool syn_nmea_parse_vtg (
    const char * sentence,
    SYN_NMEA_VTG * vtg
) 

Parameters:

  • sentence NMEA sentence string.
  • vtg Pointer to destination VTG struct.

Returns:

true on success.


function syn_nmea_parse_zda

Parse a $GPZDA / $GNZDA sentence.

bool syn_nmea_parse_zda (
    const char * sentence,
    SYN_NMEA_ZDA * zda
) 

Parameters:

  • sentence NMEA sentence string.
  • zda Pointer to destination ZDA struct.

Returns:

true on success.


function syn_nmea_parser_feed

Feed a byte into the NMEA streaming parser.

bool syn_nmea_parser_feed (
    SYN_NMEA_Parser * parser,
    char byte,
    char * out_sentence
) 

Parameters:

  • parser Pointer to parser instance.
  • byte Received character.
  • out_sentence Output buffer for completed NMEA sentence string (if returns true).

Returns:

true if a complete, valid NMEA sentence was received.


function syn_nmea_parser_init

Initialize an NMEA streaming parser.

void syn_nmea_parser_init (
    SYN_NMEA_Parser * parser
) 

Parameters:

  • parser Pointer to parser state machine.

function syn_nmea_validate

Validate an NMEA sentence string (checks start '$', '*XX' checksum, and CRLF).

bool syn_nmea_validate (
    const char * sentence
) 

Parameters:

  • sentence NMEA sentence string.

Returns:

true if valid sentence and matching checksum.


Public Static Functions Documentation

function get_field

static bool get_field (
    const char * sentence,
    uint8_t index,
    char * dest,
    size_t max_len
) 

function hex2dec

static uint8_t hex2dec (
    char c
) 

function parse_time

static void parse_time (
    const char * field,
    uint8_t * h,
    uint8_t * m,
    uint8_t * s,
    uint16_t * ms
) 


The documentation for this class was generated from the following file src/syntropic/proto/syn_nmea.c