Nmea0183Parser/Inc/Nmea0183Parser.h

113 lines
2.1 KiB
C

//
// Created by xemon on 01.09.22.
//
#ifndef NMEA_0183_PARSER_NMEA_0183_PARSER_H
#define NMEA_0183_PARSER_NMEA_0183_PARSER_H
#include "stdint.h"
#include "stddef.h"
#include "stdbool.h"
typedef struct {
uint8_t hour;
uint8_t minute;
uint8_t second;
uint16_t millisecond;
} tNmeaTimeRmc;
typedef struct {
uint8_t day;
uint8_t month;
uint8_t year;
} tNmeaDateRmc;
typedef struct {
double latitude;
char nsIndicator;
double longitude;
double horizontDiluitPrecis;
double altitude;
char ewIndicator;
} tNmeaLocationRmc;
typedef struct {
double declination;
double nsat;
double mode;
} tNmeaMagneticRmc;
typedef struct {
char status;
tNmeaDateRmc date;
tNmeaTimeRmc time;
tNmeaLocationRmc location;
tNmeaMagneticRmc magnetic;
double knotVelocity;
double kmhVelocity;
double headingAngle;
} tNmeaRmc;
typedef struct {
double lat;
double lon;
} tLocationPointInDegDouble;
typedef struct {
float lat;
float lon;
} tLocationPointInDeg;
typedef struct {
double latitude;
char nsIndicator;
double longitude;
char ewIndicator;
} tNmeaLocationGga;
typedef enum {
NO_SOLUTIONS = 0,
AUTO = 1,
DIFF = 2,
RTK_FIX = 4,
RTK_DIFF = 5,
EXTRAPOLATION = 6,
FIX_LOCATION = 7,
SIMULATE = 8,
SBAS = 9,
} eNmeaGgaGpsQual;
typedef struct {
tNmeaTimeRmc time;
tNmeaLocationGga location;
eNmeaGgaGpsQual qual;
uint8_t sats;
float hdop;
double altitude;
char altitudeUnit;
double undulation;
char undulationUnit;
uint8_t ageSec;
uint16_t stnID;
} tNmeaGga;
bool bNmea0183ParseGGA(char *ggaString, size_t len, tNmeaGga *result);
uint32_t iNmea0183TimestampFromRmc(tNmeaRmc *env);
tLocationPointInDegDouble iNmea0183_DegLocationDoubleFromRmc(tNmeaRmc *env);
tLocationPointInDeg iNmea0183_DegLocationFromRmc(tNmeaRmc *env);
void vNmea0183Sign(char *str, size_t *strLen);
bool bNmea0183ParseRMC(char *rmcString, size_t len, tNmeaRmc *result);
bool bNmea0183IsRmcString(char *nmeaString, size_t len);
bool Nmea0183IsValidString(char *str, size_t len);
#endif //NMEA_0183_PARSER_NMEA_0183_PARSER__H