summaryrefslogtreecommitdiff
path: root/navit/vehicle/qt5/vehicle_qt5.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'navit/vehicle/qt5/vehicle_qt5.cpp')
-rw-r--r--navit/vehicle/qt5/vehicle_qt5.cpp128
1 files changed, 68 insertions, 60 deletions
diff --git a/navit/vehicle/qt5/vehicle_qt5.cpp b/navit/vehicle/qt5/vehicle_qt5.cpp
index 2a2b6f5cf..b855d12b9 100644
--- a/navit/vehicle/qt5/vehicle_qt5.cpp
+++ b/navit/vehicle/qt5/vehicle_qt5.cpp
@@ -1,5 +1,4 @@
-/** @file vehicle_null.c
- * @brief null uses dbus signals
+/*
*
* Navit, a modular navigation system.
* Copyright (C) 2005-2017 Navit Team
@@ -41,55 +40,62 @@ extern "C" {
#include "vehicle_qt5.h"
#include "vehicle_qt5.moc"
#include <QDateTime>
+
+/**
+ * @defgroup vehicle-qt5 Vehicle QT5
+ * @ingroup vehicle-plugins
+ * @brief The Vehicle to gain position data from qt5
+ *
+ * @{
+ */
+
QNavitGeoReceiver::QNavitGeoReceiver(QObject* parent, struct vehicle_priv* c)
- : QObject(parent)
-{
+ : QObject(parent) {
priv = c;
if (priv->source != NULL) {
connect(priv->source, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionUpdated(QGeoPositionInfo)));
}
if (priv->satellites != NULL) {
- connect(priv->satellites, SIGNAL(satellitesInUseUpdated(const QList<QGeoSatelliteInfo>&)), this, SLOT(satellitesInUseUpdated(const QList<QGeoSatelliteInfo>&)));
- connect(priv->satellites, SIGNAL(satellitesInViewUpdated(const QList<QGeoSatelliteInfo>&)), this, SLOT(satellitesInViewUpdated(const QList<QGeoSatelliteInfo>&)));
+ connect(priv->satellites, SIGNAL(satellitesInUseUpdated(const QList<QGeoSatelliteInfo>&)), this,
+ SLOT(satellitesInUseUpdated(const QList<QGeoSatelliteInfo>&)));
+ connect(priv->satellites, SIGNAL(satellitesInViewUpdated(const QList<QGeoSatelliteInfo>&)), this,
+ SLOT(satellitesInViewUpdated(const QList<QGeoSatelliteInfo>&)));
}
}
-void QNavitGeoReceiver::satellitesInUseUpdated(const QList<QGeoSatelliteInfo>& sats)
-{
- dbg(lvl_debug, "Sats in use: %d\n", sats.count());
+void QNavitGeoReceiver::satellitesInUseUpdated(const QList<QGeoSatelliteInfo>& sats) {
+ dbg(lvl_debug, "Sats in use: %d", sats.count());
priv->sats_used = sats.count();
callback_list_call_attr_0(priv->cbl, attr_position_sats_used);
}
-void QNavitGeoReceiver::satellitesInViewUpdated(const QList<QGeoSatelliteInfo>& sats)
-{
- dbg(lvl_debug, "Sats in view: %d\n", sats.count());
+void QNavitGeoReceiver::satellitesInViewUpdated(const QList<QGeoSatelliteInfo>& sats) {
+ dbg(lvl_debug, "Sats in view: %d", sats.count());
priv->sats = sats.count();
callback_list_call_attr_0(priv->cbl, attr_position_qual);
}
-void QNavitGeoReceiver::positionUpdated(const QGeoPositionInfo& info)
-{
+void QNavitGeoReceiver::positionUpdated(const QGeoPositionInfo& info) {
/* ignore stale view */
if (info.coordinate().isValid()) {
if (info.timestamp().toUTC().secsTo(QDateTime::currentDateTimeUtc()) > 20) {
- dbg(lvl_debug, "Ignoring old FIX\n");
+ dbg(lvl_debug, "Ignoring old FIX");
return;
}
}
if (info.hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) {
- dbg(lvl_debug, "Horizontal acc (%f)\n", info.attribute(QGeoPositionInfo::HorizontalAccuracy));
+ dbg(lvl_debug, "Horizontal acc (%f)", info.attribute(QGeoPositionInfo::HorizontalAccuracy));
priv->radius = info.attribute(QGeoPositionInfo::HorizontalAccuracy);
callback_list_call_attr_0(priv->cbl, attr_position_radius);
}
if (info.hasAttribute(QGeoPositionInfo::GroundSpeed)) {
- dbg(lvl_debug, "Got ground speed (%f)\n", info.attribute(QGeoPositionInfo::GroundSpeed));
+ dbg(lvl_debug, "Got ground speed (%f)", info.attribute(QGeoPositionInfo::GroundSpeed));
priv->speed = info.attribute(QGeoPositionInfo::GroundSpeed) * 3.6;
callback_list_call_attr_0(priv->cbl, attr_position_speed);
}
if (info.hasAttribute(QGeoPositionInfo::Direction)) {
- dbg(lvl_debug, "Direction (%f)\n", info.attribute(QGeoPositionInfo::Direction));
+ dbg(lvl_debug, "Direction (%f)", info.attribute(QGeoPositionInfo::Direction));
priv->direction = info.attribute(QGeoPositionInfo::Direction);
callback_list_call_attr_0(priv->cbl, attr_position_direction);
}
@@ -107,34 +113,38 @@ void QNavitGeoReceiver::positionUpdated(const QGeoPositionInfo& info)
}
if (info.coordinate().isValid()) {
- dbg(lvl_debug, "Got valid coordinate (lat %f, lon %f)\n", info.coordinate().latitude(), info.coordinate().longitude());
+ 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)\n", info.coordinate().altitude());
+ dbg(lvl_debug, "Got valid altitude (alt %f)", info.coordinate().altitude());
priv->height = info.coordinate().altitude();
}
- //dbg(lvl_debug, "Time %s\n", info.timestamp().toUTC().toString().toLatin1().data());
+ //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\n");
- priv->have_coords = 0;
+ dbg(lvl_debug, "Got invalid coordinate");
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);
+ }
}
}
/**
* @brief Free the null_vehicle
- *
+ *
* @param priv
* @returns nothing
*/
-static void
-vehicle_qt5_destroy(struct vehicle_priv* priv)
-{
- dbg(lvl_debug, "enter\n");
+static void vehicle_qt5_destroy(struct vehicle_priv* priv) {
+ dbg(lvl_debug, "enter");
if (priv->receiver != NULL)
delete priv->receiver;
if (priv->source != NULL)
@@ -144,18 +154,16 @@ vehicle_qt5_destroy(struct vehicle_priv* priv)
/**
* @brief Provide the outside with information
- *
+ *
* @param priv
* @param type TODO: What can this be?
* @param attr
* @returns true/false
*/
-static int
-vehicle_qt5_position_attr_get(struct vehicle_priv* priv,
- enum attr_type type, struct attr* attr)
-{
+static int vehicle_qt5_position_attr_get(struct vehicle_priv* priv,
+ enum attr_type type, struct attr* attr) {
struct attr* active = NULL;
- dbg(lvl_debug, "enter %s\n", attr_to_name(type));
+ dbg(lvl_debug, "enter %s", attr_to_name(type));
switch (type) {
case attr_position_valid:
attr->u.num = priv->have_coords;
@@ -183,7 +191,7 @@ 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:
@@ -191,15 +199,15 @@ vehicle_qt5_position_attr_get(struct vehicle_priv* priv,
struct tm tm;
if (gmtime_r(&priv->fix_time, &tm)) {
strftime(priv->fixiso8601, sizeof(priv->fixiso8601),
- "%Y-%m-%dT%TZ", &tm);
+ "%Y-%m-%dT%TZ", &tm);
attr->u.str = priv->fixiso8601;
} else {
priv->fix_time = 0;
return 0;
}
- //dbg(lvl_debug,"Fix Time: %s\n", priv->fixiso8601);
+ //dbg(lvl_debug,"Fix Time: %s", priv->fixiso8601);
} else {
- //dbg(lvl_debug,"Fix Time: 0\n");
+ //dbg(lvl_debug,"Fix Time: 0");
return 0;
}
break;
@@ -216,14 +224,12 @@ vehicle_qt5_position_attr_get(struct vehicle_priv* priv,
default:
return 0;
}
- dbg(lvl_debug, "ok\n");
+ dbg(lvl_debug, "ok");
attr->type = type;
return 1;
}
-static int
-vehicle_qt5_set_attr(struct vehicle_priv* priv, struct attr* attr)
-{
+static int vehicle_qt5_set_attr(struct vehicle_priv* priv, struct attr* attr) {
switch (attr->type) {
case attr_position_speed:
priv->speed = *attr->u.numd;
@@ -233,7 +239,10 @@ 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;
@@ -250,20 +259,18 @@ struct vehicle_methods vehicle_null_methods = {
/**
* @brief Create null_vehicle
- *
+ *
* @param meth
* @param cbl
* @param attrs
* @returns vehicle_priv
*/
-static struct vehicle_priv*
-vehicle_qt5_new_qt5(struct vehicle_methods* meth,
- struct callback_list* cbl,
- struct attr** attrs)
-{
+static struct vehicle_priv* vehicle_qt5_new_qt5(struct vehicle_methods* meth,
+ struct callback_list* cbl,
+ struct attr** attrs) {
struct vehicle_priv* ret;
- dbg(lvl_debug, "enter\n");
+ dbg(lvl_debug, "enter");
ret = g_new0(struct vehicle_priv, 1);
ret->cbl = cbl;
*meth = vehicle_null_methods;
@@ -271,26 +278,27 @@ vehicle_qt5_new_qt5(struct vehicle_methods* meth,
ret->source = QGeoPositionInfoSource::createDefaultSource(NULL);
ret->satellites = QGeoSatelliteInfoSource::createDefaultSource(NULL);
if (ret->source == NULL) {
- dbg(lvl_error, "Got NO QGeoPositionInfoSource\n");
+ dbg(lvl_error, "Got NO QGeoPositionInfoSource");
} else {
- dbg(lvl_debug, "Using %s\n", ret->source->sourceName().toLatin1().data());
+ 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();
}
- dbg(lvl_debug, "return\n");
+ dbg(lvl_debug, "return");
return ret;
}
/**
* @brief register vehicle_null
- *
+ *
* @returns nothing
*/
-void plugin_init(void)
-{
- dbg(lvl_debug, "enter\n");
+void plugin_init(void) {
+ dbg(lvl_debug, "enter");
plugin_register_category_vehicle("qt5", vehicle_qt5_new_qt5);
}