diff --git a/drivers/gnss/gnss_nmea0183.c b/drivers/gnss/gnss_nmea0183.c index 515606fbefe5..390d5fa50078 100644 --- a/drivers/gnss/gnss_nmea0183.c +++ b/drivers/gnss/gnss_nmea0183.c @@ -545,6 +545,16 @@ int gnss_nmea0183_parse_gga(const char **argv, uint16_t argc, struct gnss_data * } data->nav_data.altitude = (int32_t)tmp64; + + /* Parse geoid separation */ + if ((gnss_parse_dec_to_milli(argv[11], &tmp64) < 0) || + (tmp64 > INT32_MAX) || + (tmp64 < INT32_MIN)) { + return -EINVAL; + } + + data->nav_data.geoid_separation = (int32_t)tmp64; + return 0; } diff --git a/include/zephyr/data/navigation.h b/include/zephyr/data/navigation.h index 0759df984ea4..20ef575f43c8 100644 --- a/include/zephyr/data/navigation.h +++ b/include/zephyr/data/navigation.h @@ -31,8 +31,10 @@ struct navigation_data { uint32_t bearing; /** Speed in millimeters per second */ uint32_t speed; - /** Altitude in millimeters */ + /** Altitude above MSL in millimeters */ int32_t altitude; + /** Geoid separation in millimeters */ + int32_t geoid_separation; }; /**