From 4d71f1dc74946f05cc6f78935f2d1f362593a7b3 Mon Sep 17 00:00:00 2001 From: Maxmillion McLaughlin Date: Sat, 25 Jan 2025 00:38:37 -0800 Subject: [PATCH] drivers: gnss: Add geoid separation to navigation_data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently altitude is only provided above MSL. Adding geoid seperation allows for ellipsoidal height to be determined. Signed-off-by: Maxmillion McLaughlin --- drivers/gnss/gnss_nmea0183.c | 10 ++++++++++ include/zephyr/data/navigation.h | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) 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; }; /**