113 lines
2.1 KiB
C
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
|