From 474e26635d92f27d4e0af1cd3c7a780c7e78fab3 Mon Sep 17 00:00:00 2001 From: metalstrolch Date: Wed, 30 Jan 2019 22:19:24 +0100 Subject: Fix:vehicle_qt5:Properly update position status --- navit/vehicle/qt5/vehicle_qt5.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/navit/vehicle/qt5/vehicle_qt5.cpp b/navit/vehicle/qt5/vehicle_qt5.cpp index 5771f1da7..b855d12b9 100644 --- a/navit/vehicle/qt5/vehicle_qt5.cpp +++ b/navit/vehicle/qt5/vehicle_qt5.cpp @@ -116,7 +116,6 @@ void QNavitGeoReceiver::positionUpdated(const QGeoPositionInfo& info) { dbg(lvl_debug, "Got valid coordinate (lat %f, lon %f)", info.coordinate().latitude(), info.coordinate().longitude()); priv->geo.lat = info.coordinate().latitude(); priv->geo.lng = info.coordinate().longitude(); - priv->have_coords = 1; if (info.coordinate().type() == QGeoCoordinate::Coordinate3D) { dbg(lvl_debug, "Got valid altitude (alt %f)", info.coordinate().altitude()); priv->height = info.coordinate().altitude(); @@ -124,10 +123,17 @@ void QNavitGeoReceiver::positionUpdated(const QGeoPositionInfo& info) { //dbg(lvl_debug, "Time %s", info.timestamp().toUTC().toString().toLatin1().data()); priv->fix_time = info.timestamp().toUTC().toTime_t(); callback_list_call_attr_0(priv->cbl, attr_position_coord_geo); + if(priv->have_coords != attr_position_valid_valid) { + priv->have_coords = attr_position_valid_valid; + callback_list_call_attr_0(priv->cbl, attr_position_valid); + } } else { dbg(lvl_debug, "Got invalid coordinate"); - priv->have_coords = 0; callback_list_call_attr_0(priv->cbl, attr_position_coord_geo); + if(priv->have_coords != attr_position_valid_invalid) { + priv->have_coords = attr_position_valid_invalid; + callback_list_call_attr_0(priv->cbl, attr_position_valid); + } } } @@ -185,7 +191,7 @@ static int vehicle_qt5_position_attr_get(struct vehicle_priv* priv, break; case attr_position_coord_geo: attr->u.coord_geo = &priv->geo; - if (!priv->have_coords) + if (priv->have_coords != attr_position_valid_valid) return 0; break; case attr_position_time_iso8601: @@ -233,7 +239,10 @@ static int vehicle_qt5_set_attr(struct vehicle_priv* priv, struct attr* attr) { break; case attr_position_coord_geo: priv->geo = *attr->u.coord_geo; - priv->have_coords = 1; + if(priv->have_coords != attr_position_valid_valid) { + priv->have_coords = attr_position_valid_valid; + callback_list_call_attr_0(priv->cbl, attr_position_valid); + } break; default: break; @@ -273,8 +282,10 @@ static struct vehicle_priv* vehicle_qt5_new_qt5(struct vehicle_methods* meth, } else { dbg(lvl_debug, "Using %s", ret->source->sourceName().toLatin1().data()); ret->receiver = new QNavitGeoReceiver(NULL, ret); - ret->satellites->setUpdateInterval(1000); - ret->satellites->startUpdates(); + if(ret->satellites != NULL) { + ret->satellites->setUpdateInterval(1000); + ret->satellites->startUpdates(); + } ret->source->setUpdateInterval(500); ret->source->startUpdates(); } -- cgit v1.2.1