summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/BtnGuidance.qml2
-rw-r--r--app/app.pro2
-rw-r--r--app/main.cpp29
-rw-r--r--app/navigation.qml44
-rw-r--r--navigation.pro10
-rw-r--r--package/config.xml1
6 files changed, 58 insertions, 30 deletions
diff --git a/app/BtnGuidance.qml b/app/BtnGuidance.qml
index 2744019..11955f5 100644
--- a/app/BtnGuidance.qml
+++ b/app/BtnGuidance.qml
@@ -38,7 +38,7 @@ Item {
map.initDestination(startFromCurrentPosition)
if(btn_guidance.sts_guide != 0){
- map.qmlSignalStopDemo()
+ navigation.broadcastStatus("stop");
}
if(map.center !== map.currentpostion){
diff --git a/app/app.pro b/app/app.pro
index c53e922..b31250a 100644
--- a/app/app.pro
+++ b/app/app.pro
@@ -1,6 +1,6 @@
TARGET = navigation
QT = quick qml
-PKGCONFIG += qlibhomescreen qlibwindowmanager
+PKGCONFIG += qlibhomescreen qlibwindowmanager qtappfw
QT += positioning
QT += core
diff --git a/app/main.cpp b/app/main.cpp
index cbd121c..b2b9185 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -27,6 +27,7 @@
#include <QtQml/QQmlContext>
#include <QtQuickControls2/QQuickStyle>
#include <QQuickWindow>
+#include <navigation.h>
#include "markermodel.h"
#include "guidance_module.h"
#include "file_operation.h"
@@ -47,10 +48,29 @@ int main(int argc, char *argv[])
parser.addHelpOption();
parser.addVersionOption();
parser.process(app);
+
+ // Load qml
+ QQmlApplicationEngine engine;
+ QQmlContext *context = engine.rootContext();
+
+ File_Operation file;
+ context->setContextProperty("fileOperation", &file);
+
QStringList positionalArguments = parser.positionalArguments();
if (positionalArguments.length() == 2) {
port = positionalArguments.takeFirst().toInt();
token = positionalArguments.takeFirst();
+ QUrl bindingAddress;
+ bindingAddress.setScheme(QStringLiteral("ws"));
+ bindingAddress.setHost(QStringLiteral("localhost"));
+ bindingAddress.setPort(port);
+ bindingAddress.setPath(QStringLiteral("/api"));
+ QUrlQuery query;
+ query.addQueryItem(QStringLiteral("token"), token);
+ bindingAddress.setQuery(query);
+
+ Navigation *navigation = new Navigation(bindingAddress, context);
+ context->setContextProperty("navigation", navigation);
}
fprintf(stderr, "[navigation] app_name: %s, port: %d, token: %s.\n",
graphic_role.toStdString().c_str(),
@@ -81,17 +101,12 @@ int main(int argc, char *argv[])
qDebug("Surface %s got showWindow\n", graphic_role.toStdString().c_str());
qwmHandler->activateWindow(graphic_role);
});
- // Load qml
- QQmlApplicationEngine engine;
MarkerModel model;
- engine.rootContext()->setContextProperty("markerModel", &model);
+ context->setContextProperty("markerModel", &model);
Guidance_Module guidance;
- engine.rootContext()->setContextProperty("guidanceModule", &guidance);
-
- File_Operation file;
- engine.rootContext()->setContextProperty("fileOperation", &file);
+ context->setContextProperty("guidanceModule", &guidance);
engine.load(QUrl(QStringLiteral("qrc:/navigation.qml")));
QObject *root = engine.rootObjects().first();
diff --git a/app/navigation.qml b/app/navigation.qml
index c23d1d5..2b30581 100644
--- a/app/navigation.qml
+++ b/app/navigation.qml
@@ -61,7 +61,25 @@ ApplicationWindow {
}
}
- Map{
+ Connections {
+ target: navigation
+
+ onWaypointsEvent: {
+ // only support one waypoint currently
+ map.doSetWaypointsSlot(data.points[0].latitude, data.points[0].longitude, true)
+ }
+
+ onStatusEvent: {
+ if (data.state == "stop") {
+ map.doPauseSimulationSlot()
+ }
+ if (data.state == "start") {
+ btn_guidance.startGuidance()
+ }
+ }
+ }
+
+ Map {
id: map
property int pathcounter : 0
property int segmentcounter : 0
@@ -74,12 +92,6 @@ ApplicationWindow {
property variant currentpostion : QtPositioning.coordinate(car_position_lat, car_position_lon)
property int last_segmentcounter : -1
- signal qmlSignalRouteInfo(double srt_lat,double srt_lon,double end_lat,double end_lon);
- signal qmlSignalPosInfo(double lat,double lon,double drc,double dst);
- signal qmlSignalStopDemo();
- signal qmlSignalArrived();
- signal qmlCheckDirection(double cur_dir,double next_dir,double is_rot);
-
width: parent.width
height: parent.height
plugin: fileOperation.isOSMEnabled() ? osm : mapbox
@@ -320,7 +332,7 @@ ApplicationWindow {
}
routeModel.update()
- map.qmlSignalRouteInfo(car_position_lat, car_position_lon,coord.latitude,coord.longitude)
+ navigation.broadcastRouteInfo(car_position_lat, car_position_lon,coord.latitude,coord.longitude)
// update icon_end_point
icon_end_point.coordinate = coord
@@ -336,7 +348,7 @@ ApplicationWindow {
// reset currentpostion
map.currentpostion = QtPositioning.coordinate(car_position_lat, car_position_lon)
car_accumulated_distance = 0
- map.qmlSignalPosInfo(car_position_lat, car_position_lon,car_direction,car_accumulated_distance)
+ navigation.broadcastPosition(car_position_lat, car_position_lon,car_direction,car_accumulated_distance)
routeQuery.clearWaypoints();
routeQuery.addWaypoint(map.currentpostion)
@@ -539,7 +551,7 @@ ApplicationWindow {
{
map.currentpostion = routeModel.get(0).path[pathcounter]
car_accumulated_distance += next_distance
- map.qmlSignalPosInfo(map.currentpostion.latitude, map.currentpostion.longitude,next_direction,car_accumulated_distance)
+ navigation.broadcastPosition(map.currentpostion.latitude, map.currentpostion.longitude,next_direction,car_accumulated_distance)
if(pathcounter < routeModel.get(0).path.length - 1){
pathcounter++
}
@@ -547,14 +559,14 @@ ApplicationWindow {
{
// Arrive at your destination
btn_guidance.sts_guide = 0
- map.qmlSignalArrived()
+ navigation.broadcastStatus("arrived")
}
}else{
setNextCoordinate(map.currentpostion.latitude, map.currentpostion.longitude,next_direction,root.car_moving_distance)
if(pathcounter != 0){
car_accumulated_distance += root.car_moving_distance
}
- map.qmlSignalPosInfo(map.currentpostion.latitude, map.currentpostion.longitude,next_direction,car_accumulated_distance)
+ navigation.broadcastPosition(map.currentpostion.latitude, map.currentpostion.longitude,next_direction,car_accumulated_distance)
}
if(btn_present_position.state === "Flowing")
@@ -593,12 +605,12 @@ ApplicationWindow {
function doGetRouteInfoSlot(){
if(btn_guidance.sts_guide == 0){ // idle
- map.qmlSignalPosInfo(car_position_lat, car_position_lon,car_direction,car_accumulated_distance);
+ navigation.broadcastPosition(car_position_lat, car_position_lon,car_direction,car_accumulated_distance);
}else if(btn_guidance.sts_guide == 1){ // Routing
- map.qmlSignalPosInfo(car_position_lat, car_position_lon,car_direction,car_accumulated_distance);
- map.qmlSignalRouteInfo(car_position_lat, car_position_lon,routeQuery.waypoints[1].latitude,routeQuery.waypoints[1].longitude);
+ navigation.broadcastPosition(car_position_lat, car_position_lon,car_direction,car_accumulated_distance);
+ navigation.broadcastRouteInfo(car_position_lat, car_position_lon,routeQuery.waypoints[1].latitude,routeQuery.waypoints[1].longitude);
}else if(btn_guidance.sts_guide == 2){ // onGuide
- map.qmlSignalRouteInfo(car_position_lat, car_position_lon,routeQuery.waypoints[1].latitude,routeQuery.waypoints[1].longitude);
+ navigation.broadcastRouteInfo(car_position_lat, car_position_lon,routeQuery.waypoints[1].latitude,routeQuery.waypoints[1].longitude);
}
}
diff --git a/navigation.pro b/navigation.pro
index ffa500e..3e1d75f 100644
--- a/navigation.pro
+++ b/navigation.pro
@@ -1,5 +1,5 @@
-CONFIG += ordered
-TEMPLATE = subdirs
-SUBDIRS = app package
-
-package.depends += app
+CONFIG += ordered
+TEMPLATE = subdirs
+SUBDIRS = app package
+
+package.depends += app
diff --git a/package/config.xml b/package/config.xml
index 10b2d99..4f3f2ca 100644
--- a/package/config.xml
+++ b/package/config.xml
@@ -9,6 +9,7 @@
<feature name="urn:AGL:widget:required-api">
<param name="windowmanager" value="ws"/>
<param name="homescreen" value="ws"/>
+ <param name="navigation" value="ws"/>
</feature>
<feature name="urn:AGL:widget:required-permission">
<param name="urn:AGL:permission::public:no-htdocs" value="required"/>