Browse Source

drivers: gnss: Add geoid separation to gnss_info

Currently altitude is only provided above MSL. Adding
geoid seperation allows for ellipsoidal height to be
determined.

Signed-off-by: Maxmillion McLaughlin <max@sorcerer.earth>
pull/84854/head
Maxmillion McLaughlin 5 months ago committed by Benjamin Cabé
parent
commit
b50bb7c2e5
  1. 10
      drivers/gnss/gnss_nmea0183.c
  2. 2
      include/zephyr/data/navigation.h
  3. 2
      include/zephyr/drivers/gnss.h

10
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; 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; return 0;
} }

2
include/zephyr/data/navigation.h

@ -31,7 +31,7 @@ struct navigation_data {
uint32_t bearing; uint32_t bearing;
/** Speed in millimeters per second */ /** Speed in millimeters per second */
uint32_t speed; uint32_t speed;
/** Altitude in millimeters */ /** Altitude above MSL in millimeters */
int32_t altitude; int32_t altitude;
}; };

2
include/zephyr/drivers/gnss.h

@ -140,6 +140,8 @@ struct gnss_info {
uint16_t satellites_cnt; uint16_t satellites_cnt;
/** Horizontal dilution of precision in 1/1000 */ /** Horizontal dilution of precision in 1/1000 */
uint32_t hdop; uint32_t hdop;
/** Geoid separation in millimeters */
int32_t geoid_separation;
/** The fix status */ /** The fix status */
enum gnss_fix_status fix_status; enum gnss_fix_status fix_status;
/** The fix quality */ /** The fix quality */

Loading…
Cancel
Save