From e6ee5973222d85da968c892b7a8fde9f81cccc26 Mon Sep 17 00:00:00 2001 From: David Anthony Date: Thu, 9 May 2024 17:02:28 -0500 Subject: [PATCH 1/2] Switching to use mode of fix instead of status to be more robust to changes in API --- gpsd_client/src/client.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gpsd_client/src/client.cpp b/gpsd_client/src/client.cpp index 6de5888..88967cb 100644 --- a/gpsd_client/src/client.cpp +++ b/gpsd_client/src/client.cpp @@ -177,12 +177,12 @@ namespace gpsd_client } #if GPSD_API_MAJOR_VERSION >= 10 #ifdef STATUS_FIX - if ((p->fix.status != STATUS_NO_FIX) && !(check_fix_by_variance_ && std::isnan(p->fix.epx))) + if (((p->fix.mode == MODE_2D) || (p->fix.mode == MODE_3D)) && !(check_fix_by_variance_ && std::isnan(p->fix.epx))) #else - if ((p->fix.status != STATUS_NO_FIX) && !(check_fix_by_variance_ && std::isnan(p->fix.epx))) + if (((p->fix.mode == MODE_2D) || (p->fix.mode == MODE_3D)) && !(check_fix_by_variance_ && std::isnan(p->fix.epx))) #endif #else - if ((p->status != STATUS_NO_FIX) && !(check_fix_by_variance_ && std::isnan(p->fix.epx))) + if (((p->fix.mode == MODE_2D) || (p->fix.mode == MODE_3D)) && !(check_fix_by_variance_ && std::isnan(p->fix.epx))) #endif { status.status = 0; // FIXME: gpsmm puts its constants in the global From 93d2edd36026db1ab9212d5bb75c115ba33b7bcd Mon Sep 17 00:00:00 2001 From: David Anthony Date: Thu, 9 May 2024 17:09:41 -0500 Subject: [PATCH 2/2] Making altitude NaN if in 2D fix mode --- gpsd_client/src/client.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gpsd_client/src/client.cpp b/gpsd_client/src/client.cpp index 88967cb..3d306f8 100644 --- a/gpsd_client/src/client.cpp +++ b/gpsd_client/src/client.cpp @@ -208,7 +208,14 @@ namespace gpsd_client #endif fix.latitude = p->fix.latitude; fix.longitude = p->fix.longitude; - fix.altitude = p->fix.altitude; + if (p->fix.mode == MODE_3D) + { + fix.altitude = p->fix.altitude; + } + else + { + fix.altitude = std::nan(""); + } fix.track = p->fix.track; fix.speed = p->fix.speed; fix.climb = p->fix.climb;