diff --git a/drivers/gnss/gnss_nmea0183.c b/drivers/gnss/gnss_nmea0183.c index 515606fbefe5..bbeb50a5c7de 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->info.geoid_separation = (int32_t)tmp64; + return 0; } diff --git a/include/zephyr/data/navigation.h b/include/zephyr/data/navigation.h index 0759df984ea4..a09152809421 100644 --- a/include/zephyr/data/navigation.h +++ b/include/zephyr/data/navigation.h @@ -31,7 +31,7 @@ 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; }; diff --git a/include/zephyr/drivers/gnss.h b/include/zephyr/drivers/gnss.h index c5d2b9174cc4..3a0ba8ba1b65 100644 --- a/include/zephyr/drivers/gnss.h +++ b/include/zephyr/drivers/gnss.h @@ -140,6 +140,8 @@ struct gnss_info { uint16_t satellites_cnt; /** Horizontal dilution of precision in 1/1000 */ uint32_t hdop; + /** Geoid separation in millimeters */ + int32_t geoid_separation; /** The fix status */ enum gnss_fix_status fix_status; /** The fix quality */