Files
cm_nmea_decoder/cm_nmea_decoder.h

73 lines
1.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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 <stdio.h>
#include <stdint.h>
#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: 090 (latitude) or 0180 (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_ */