// // Created by villuton on 26.03.25. // #include #include #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; }