summaryrefslogtreecommitdiff
path: root/libgpsd_core.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2018-07-14 13:44:43 -0700
committerGary E. Miller <gem@rellim.com>2018-07-14 13:44:43 -0700
commitf31b7c700aad5861fed7af796d1bed90168a6396 (patch)
tree757882dbcb9560560a83f81a2820a12c80a1a305 /libgpsd_core.c
parentbbdb8d7ebbdc937fa24ef0fbf9d917a5e03110a0 (diff)
downloadgpsd-f31b7c700aad5861fed7af796d1bed90168a6396.tar.gz
libgpsd_core.c: isnan() -> isfinite()
Thanks to Virgin Orbit for their support on this patch.
Diffstat (limited to 'libgpsd_core.c')
-rw-r--r--libgpsd_core.c51
1 files changed, 27 insertions, 24 deletions
diff --git a/libgpsd_core.c b/libgpsd_core.c
index 85b8d86a..38a7d714 100644
--- a/libgpsd_core.c
+++ b/libgpsd_core.c
@@ -821,25 +821,27 @@ static gps_mask_t fill_dop(const struct gpsd_errout_t *errout,
dop->vdop, pdop, dop->pdop, tdop, dop->tdop, gdop, dop->gdop);
#endif
- if (isnan(dop->xdop) != 0) {
+ /* Check to see which DOPs we already have. Save values if no value
+ * from the GPS. Do not overwrite values which came from the GPS */
+ if (isfinite(dop->xdop) == 0) {
dop->xdop = xdop;
}
- if (isnan(dop->ydop) != 0) {
+ if (isfinite(dop->ydop) == 0) {
dop->ydop = ydop;
}
- if (isnan(dop->hdop) != 0) {
+ if (isfinite(dop->hdop) == 0) {
dop->hdop = hdop;
}
- if (isnan(dop->vdop) != 0) {
+ if (isfinite(dop->vdop) == 0) {
dop->vdop = vdop;
}
- if (isnan(dop->pdop) != 0) {
+ if (isfinite(dop->pdop) == 0) {
dop->pdop = pdop;
}
- if (isnan(dop->tdop) != 0) {
+ if (isfinite(dop->tdop) == 0) {
dop->tdop = tdop;
}
- if (isnan(dop->gdop) != 0) {
+ if (isfinite(dop->gdop) == 0) {
dop->gdop = gdop;
}
@@ -901,7 +903,7 @@ static void gpsd_error_model(struct gps_device_t *session,
* and climb/sink in the simplest possible way.
*/
if (fix->mode >= MODE_2D && oldfix->mode >= MODE_2D
- && isnan(fix->speed) != 0) {
+ && isfinite(fix->speed) == 0) {
if (fix->time == oldfix->time)
fix->speed = 0;
else
@@ -911,13 +913,13 @@ static void gpsd_error_model(struct gps_device_t *session,
/ (fix->time - oldfix->time);
}
if (fix->mode >= MODE_3D && oldfix->mode >= MODE_3D
- && isnan(fix->climb) != 0) {
+ && isfinite(fix->climb) == 0) {
if (fix->time == oldfix->time)
fix->climb = 0;
- else if (isnan(fix->altitude) == 0 && isnan(oldfix->altitude) == 0) {
- fix->climb =
- (fix->altitude - oldfix->altitude) / (fix->time -
- oldfix->time);
+ else if ((isfinite(fix->altitude) != 0 &&
+ isfinite(oldfix->altitude) != 0)) {
+ fix->climb = ((fix->altitude - oldfix->altitude) /
+ (fix->time - oldfix->time));
}
}
@@ -935,21 +937,22 @@ static void gpsd_error_model(struct gps_device_t *session,
* opened. Also, some devices (notably plain NMEA0183 receivers)
* never ship an indication of when they have valid leap second.
*/
- if (isnan(fix->time) == 0 && isnan(fix->ept) != 0)
+ if (isfinite(fix->time) != 0 && isfinite(fix->ept) == 0)
fix->ept = 0.005;
/* Other error computations depend on having a valid fix */
if (fix->mode >= MODE_2D) {
- if (isnan(fix->epx) != 0 && isfinite(session->gpsdata.dop.hdop) != 0)
+ if (isfinite(fix->epx) == 0 && isfinite(session->gpsdata.dop.hdop) != 0)
fix->epx = session->gpsdata.dop.xdop * h_uere;
- if (isnan(fix->epy) != 0 && isfinite(session->gpsdata.dop.hdop) != 0)
+ if (isfinite(fix->epy) == 0 && isfinite(session->gpsdata.dop.hdop) != 0)
fix->epy = session->gpsdata.dop.ydop * h_uere;
if ((fix->mode >= MODE_3D)
- && isnan(fix->epv) != 0 && isfinite(session->gpsdata.dop.vdop) != 0)
+ && isfinite(fix->epv) == 0
+ && isfinite(session->gpsdata.dop.vdop) != 0)
fix->epv = session->gpsdata.dop.vdop * v_uere;
- if (isnan(session->gpsdata.epe) != 0
+ if (isfinite(session->gpsdata.epe) == 0
&& isfinite(session->gpsdata.dop.pdop) != 0)
session->gpsdata.epe = session->gpsdata.dop.pdop * p_uere;
else
@@ -960,10 +963,10 @@ static void gpsd_error_model(struct gps_device_t *session,
* didn't set the speed error and climb error members itself,
* try to compute them now.
*/
- if (isnan(fix->eps) != 0) {
+ if (isfinite(fix->eps) == 0) {
if (oldfix->mode > MODE_NO_FIX && fix->mode > MODE_NO_FIX
- && isnan(oldfix->epx) == 0 && isnan(oldfix->epy) == 0
- && isnan(oldfix->time) == 0 && isnan(fix->time) == 0
+ && isfinite(oldfix->epx) != 0 && isfinite(oldfix->epy) != 0
+ && isfinite(oldfix->time) != 0 && isfinite(fix->time) != 0
&& fix->time > oldfix->time) {
timestamp_t t = fix->time - oldfix->time;
double e =
@@ -973,7 +976,7 @@ static void gpsd_error_model(struct gps_device_t *session,
fix->eps = NAN;
}
if ((fix->mode >= MODE_3D)
- && isnan(fix->epc) != 0 && fix->time > oldfix->time) {
+ && isfinite(fix->epc) == 0 && fix->time > oldfix->time) {
if (oldfix->mode >= MODE_3D && fix->mode >= MODE_3D) {
timestamp_t t = fix->time - oldfix->time;
double e = oldfix->epv + fix->epv;
@@ -1001,7 +1004,7 @@ static void gpsd_error_model(struct gps_device_t *session,
double adj =
earth_distance(oldfix->latitude, oldfix->longitude,
fix->latitude, fix->longitude);
- if (isnan(adj) == 0 && adj > EMIX(fix->epx, fix->epy)) {
+ if (isfinite(adj) != 0 && adj > EMIX(fix->epx, fix->epy)) {
double opp = EMIX(fix->epx, fix->epy);
double hyp = sqrt(adj * adj + opp * opp);
fix->epd = RAD_2_DEG * 2 * asin(opp / hyp);
@@ -1657,7 +1660,7 @@ void ntp_latch(struct gps_device_t *device, struct timedelta_t *td)
double fix_time, integral, fractional;
/* this should be an invariant of the way this function is called */
- assert(isnan(device->newdata.time)==0);
+ assert(isfinite(device->newdata.time)!=0);
(void)clock_gettime(CLOCK_REALTIME, &td->clock);
fix_time = device->newdata.time;