changeset 64:8e85919405df

gnss-galileo: add a valid bit to each ephemeris This is easier than trying to guess whether the ephemeris contains any meaningful values. Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Wed, 22 Jan 2020 10:10:26 -0500
parents fbf26ed4884d
children 123cac19d9bd
files gnss-galileo-eph.c gnss-galileo-state.c gnss-galileo.h
diffstat 3 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/gnss-galileo-eph.c	Mon Jan 20 10:16:31 2020 -0500
+++ b/gnss-galileo-eph.c	Wed Jan 22 10:10:26 2020 -0500
@@ -29,14 +29,15 @@
 
 void galileo_print_eph(const struct galileo_ephemeris *eph)
 {
-	printf("E%02u: iod %u "
+	printf("E%02u: %svalid iod %u "
 	       "m0 %e delta_n %e e %e sqrt_a %e omega0 %e i0 %e "
 	       "omega %e omegadot %e idot %e cuc %e cus %e "
 	       "crc %e crs %e cic %e cis %e t0 %u (%u raw)\n",
-	       eph->sv, eph->iod, eph->m0, eph->delta_n, eph->e,
-	       eph->sqrt_a, eph->omega0, eph->i0, eph->omega, eph->omegadot,
-	       eph->idot, eph->cuc, eph->cus, eph->crc, eph->crs, eph->cic,
-	       eph->cis, eph->t0.gst, eph->t0.raw);
+	       eph->sv, eph->valid ? "" : "NOT ", eph->iod, eph->m0,
+	       eph->delta_n, eph->e, eph->sqrt_a, eph->omega0, eph->i0,
+	       eph->omega, eph->omegadot, eph->idot, eph->cuc, eph->cus,
+	       eph->crc, eph->crs, eph->cic, eph->cis, eph->t0.gst,
+	       eph->t0.raw);
 }
 
 void galileo_eph_ecef(const struct galileo_ephemeris *eph,
@@ -44,6 +45,8 @@
 {
 	int approx_iter;
 
+	ASSERT(eph->valid);
+
 	/* Based on Galileo ICD 5.1.1 */
 	const double mu = 3.986004418e14; /* m3/s2 */
 	const double omegaE = 7.2921151467e-5; /* rad/s */
--- a/gnss-galileo-state.c	Mon Jan 20 10:16:31 2020 -0500
+++ b/gnss-galileo-state.c	Wed Jan 22 10:10:26 2020 -0500
@@ -138,6 +138,7 @@
 	state->sv[sv].eph = state->wip[sv].nav.eph;
 	state->sv[sv].eph.sv = sv;
 	state->sv[sv].eph.iod = state->wip[sv].nav.iod[0];
+	state->sv[sv].eph.valid = true;
 	state->sv[sv].eph.t0.gst = tow2gst(ephwn, state->sv[sv].eph.t0.raw);
 	state->sv[sv].valid_eph = true;
 
--- a/gnss-galileo.h	Mon Jan 20 10:16:31 2020 -0500
+++ b/gnss-galileo.h	Wed Jan 22 10:10:26 2020 -0500
@@ -170,6 +170,7 @@
 struct galileo_ephemeris {
 	unsigned int sv;
 	uint16_t iod;
+	bool valid:1;
 
 	/* All in radians, except as noted */
 	double m0;