51 lines
1.5 KiB
C
51 lines
1.5 KiB
C
//
|
|
// Created by villuton on 26.03.25.
|
|
//
|
|
#include <stddef.h>
|
|
#include <stdbool.h>
|
|
#include "Nmea_Gsa.h"
|
|
#include "Nmea0183Parser_Private.h"
|
|
#include "Nmea_Config.h"
|
|
|
|
/**
|
|
*
|
|
* @param str NMEA string with GSA solutions
|
|
* @param len len GSA string
|
|
* @param result < (0) tNmeaGSA struct
|
|
* @return TRUE if parsing complete
|
|
*/
|
|
bool NmeaGsa_Parse(char *str, size_t len, tNmeaGSA *result)
|
|
{
|
|
char *end = str + len;
|
|
char *front = str;
|
|
char *nextDivider = front - 1;
|
|
|
|
result->fix_mode =
|
|
(Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ?
|
|
*front : GSA_FIX_MODE_EMPTY;
|
|
|
|
result->fix_type =
|
|
(Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ?
|
|
Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : GSA_NaN;
|
|
|
|
for(int i = 0; i < NMEA_MAXSAT; i++)
|
|
{
|
|
result->sat_prn[i] =
|
|
(Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ?
|
|
Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : GSA_FIX_MODE_EMPTY;
|
|
}
|
|
|
|
result->PDOP =
|
|
(Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ?
|
|
Nmea0183ParseDouble(front, nextDivider - front) : 0;
|
|
|
|
result->HDOP =
|
|
(Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ?
|
|
Nmea0183ParseDouble(front, nextDivider - front) : 0;
|
|
|
|
result->VDOP =
|
|
(Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ?
|
|
Nmea0183ParseDouble(front, nextDivider - front) : 0;
|
|
|
|
return true;
|
|
} |