// // Created by villuton on 26.03.25. // #include #include #include "Nmea_Gsv.h" #include "Nmea0183Parser_Private.h" #include "Nmea_Config.h" /** * * @param str NMEA string with GSV solutions * @param len len GSV string * @param result < (0) tNmeaGSV struct * @return TRUE if parsing complete */ bool NmeaGsv_Parse(char *str, size_t len, tNmeaGSV *result) { char *end = str + len; char *front = str; char *nextDivider = front - 1; result->pack_count = (Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ? Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : 0; result->pack_index = (Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ? Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : 0; result->sat_count = (Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ? Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : 0; for(int i = 0; i < NMEA_SATINPACK; i++) { result->sat_data[i].id = (Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ? Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : 0; result->sat_data[i].elv = (Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ? Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : 0; result->sat_data[i].azimuth = (Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ? Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : 0; result->sat_data[i].sig = (Nmea0183ParseNextPortion(&front, &nextDivider, end) > 0) ? Nmea0183ParseShortCharsDecimalNumber(front,nextDivider - front) : 0; } return true; }