48 lines
1.8 KiB
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;
|
|
} |