/* * cm_nmea_decoder.h * * Created on: 26 Jun 2025 * Author: Christian Lind Vie Madsen */ #ifndef MAIN_CM_NMEA_DECODER_CM_NMEA_DECODER_H_ #define MAIN_CM_NMEA_DECODER_CM_NMEA_DECODER_H_ #include #include #include "GPGxx_defines.h" typedef struct { nmea_msg_t msg; }cm_nmea_msg_t; int cm_nmea_stringDecode(cm_nmea_msg_t *inst, char *str); /* #define OFFSET(struct_type, field) ((size_t)&(((struct_type *)0)->field)) FieldDesc gpgll_fields[] = { { "latitude", FIELD_INT32, OFFSET(GPGLL_t, latitude), 1 }, { "lat_dir", FIELD_CHAR, OFFSET(GPGLL_t, lat_dir), 0 }, { "longitude", FIELD_INT32, OFFSET(GPGLL_t, longitude), 1 }, { "lon_dir", FIELD_CHAR, OFFSET(GPGLL_t, lon_dir), 0 }, { "utc_time", FIELD_UINT32, OFFSET(GPGLL_t, utc_time), 0 } }; const char *nmea = "$GPGLL,5606.2719,N,01007.2199,E,130808,A,A*56"; GPGLL_t gpgll = {0}; parse_nmea_generic(nmea, &gpgll, gpgll_fields, sizeof(gpgll_fields)/sizeof(gpgll_fields[0])); printf("Latitude: %d\n", gpgll.latitude); printf("Longitude: %d\n", gpgll.longitude); printf("Time: %u\n", gpgll.utc_time); typedef struct{ uint8_t deg; // Degrees: 0–90 (latitude) or 0–180 (longitude) uint32_t min_x10000; // Minutes × 10,000 (e.g., 16.4512 → 164512) char dir; // 'N', 'S', 'E', or 'W' }cm_nmea_coord; typedef struct{ uint8_t hr; uint8_t min; uint8_t sec; }cm_nmea_time; typedef struct { cm_nmea_coord coordinates; cm_nmea_time time_utc; char data_valid; }cm_nmea_gpgll_msg; * */ #endif /* MAIN_CM_NMEA_DECODER_CM_NMEA_DECODER_H_ */