summaryrefslogtreecommitdiffstats
path: root/app/main.cpp
diff options
context:
space:
mode:
authorzheng_wenlong <wenlong_zheng@nexty-ele.com>2017-09-07 11:09:21 +0900
committerzheng_wenlong <wenlong_zheng@nexty-ele.com>2017-10-05 17:38:29 +0900
commitaa20a65e8c819be90b00628a424bfad697136d7f (patch)
tree7538e34a4693983761a384333224f878cdeec8c5 /app/main.cpp
parent9457d3ebf0fd63f63f5d8abdd570868c0298a92f (diff)
Add als-meter-demo
Add new application what we showed in als2017. Run in renesas m3ulcb, show camera video by logitech cr920. Display someinformation get from agl-service-steering-wheel as a meter. Already do some test on Daring Dab 4.0.0. [PatchSet2] Add [QMAKE_CXXFLAGS += -mfp16-format=ieee] for raspberrypi3 build error. [PatchSet3] Add determine statements in app.pro for raspberrypi3. Change-Id: I68f44eac6533567055e1c20d0b5f929242c2f082 Signed-off-by: zheng_wenlong <wenlong_zheng@nexty-ele.com>
Diffstat (limited to 'app/main.cpp')
-rw-r--r--app/main.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/app/main.cpp b/app/main.cpp
new file mode 100644
index 0000000..17bbe81
--- /dev/null
+++ b/app/main.cpp
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (C) 2016 The Qt Company Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <QtCore/QDebug>
+#include <QtCore/QCommandLineParser>
+#include <QtCore/QUrlQuery>
+#include <QtCore/QFile>
+#include <QtDBus/QDBusInterface>
+#include <QtDBus/QDBusReply>
+#include <QtGui/QGuiApplication>
+#include <QtQml/QQmlApplicationEngine>
+#include <QtQml/QQmlContext>
+#include <QtQuickControls2/QQuickStyle>
+#include <QtDBus/QDBusConnection>
+#include <unistd.h>
+#include "camera.h"
+
+#ifdef HAVE_LIBHOMESCREEN
+#include <libhomescreen.hpp>
+#endif
+
+class AppVisible : public QObject
+{
+ Q_OBJECT
+public:
+ AppVisible(QObject *parent = nullptr) : QObject(parent){
+ m_ppid = getppid();
+ m_visible = true;
+ QDBusConnection::sessionBus().connect("org.agl.windowmanager",
+ "/windowmanager",
+ "org.agl.windowmanager",
+ "appLayerVisibleChanged",
+ this,
+ SLOT(appLayerVisibleChanged(int,bool)));
+ }
+
+public slots:
+ void appLayerVisibleChanged(int pid, bool visible){
+ bool tempvis = visible;
+
+ if(tempvis && (m_ppid != pid))
+ tempvis = false;
+
+ if(m_visible != tempvis){
+ m_visible = tempvis;
+ emit visibleChanged(m_visible);
+ }
+ }
+
+signals:
+ void visibleChanged(const bool& visible);
+
+private:
+ int m_ppid;
+ bool m_visible;
+};
+
+class DBus : public QObject
+{
+ Q_OBJECT
+public:
+ DBus(QObject *parent = nullptr)
+ : QObject(parent)
+ , interface("org.agl.homescreen", "/StatusBar", "org.agl.statusbar", QDBusConnection::sessionBus())
+ {}
+
+ Q_INVOKABLE void setStatusIcon(int index, const QString &url) {
+ interface.call("setStatusIcon", index, url);
+ }
+
+private:
+ QDBusInterface interface;
+};
+
+int main(int argc, char *argv[])
+{
+#ifdef HAVE_LIBHOMESCREEN
+ LibHomeScreen libHomeScreen;
+
+ if (!libHomeScreen.renderAppToAreaAllowed(0, 1)) {
+ qWarning() << "renderAppToAreaAllowed is denied";
+ return -1;
+ }
+#endif
+
+ QGuiApplication app(argc, argv);
+ app.setApplicationName(QStringLiteral("als-meter-demo"));
+ app.setApplicationVersion(QStringLiteral("0.1.0"));
+ app.setOrganizationDomain(QStringLiteral("automotivelinux.org"));
+ app.setOrganizationName(QStringLiteral("AutomotiveGradeLinux"));
+
+ QQuickStyle::setStyle("AGL");
+
+ QCommandLineParser parser;
+ parser.addPositionalArgument("port", app.translate("main", "port for binding"));
+ parser.addPositionalArgument("secret", app.translate("main", "secret for binding"));
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.process(app);
+ QStringList positionalArguments = parser.positionalArguments();
+
+ qmlRegisterType<Camera>("Camera", 1, 0, "Camera");
+
+ QQmlApplicationEngine engine;
+ int port = 0;
+ if (positionalArguments.length() == 2) {
+ port = positionalArguments.takeFirst().toInt();
+ }
+ QString secret = positionalArguments.takeFirst();
+ QUrl bindingAddressWS;
+ bindingAddressWS.setScheme(QStringLiteral("ws"));
+ bindingAddressWS.setHost(QStringLiteral("localhost"));
+ bindingAddressWS.setPort(port);
+ bindingAddressWS.setPath(QStringLiteral("/api"));
+ QUrlQuery query;
+ query.addQueryItem(QStringLiteral("token"), secret);
+ bindingAddressWS.setQuery(query);
+ QQmlContext *context = engine.rootContext();
+ AppVisible appVisible;
+ context->setContextProperty(QStringLiteral("appVisible"), &appVisible);
+ context->setContextProperty(QStringLiteral("bindingAddressWS"), bindingAddressWS);
+
+ DBus dbus;
+ engine.rootContext()->setContextProperty("dbus", &dbus);
+ engine.load(QUrl(QStringLiteral("qrc:/Als-meter-demo.qml")));
+
+ return app.exec();
+}
+
+#include "main.moc"