Nmea0183Parser/Solutions/Src/Nmea_Gsv.c

48 lines
1.8 KiB
C

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