summaryrefslogtreecommitdiffstats
path: root/.vscode
diff options
context:
space:
mode:
Diffstat (limited to '.vscode')
-rw-r--r--.vscode/launch.json8
-rw-r--r--.vscode/settings.json3
2 files changed, 7 insertions, 4 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 6e0c820..70f4f8e 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -9,7 +9,7 @@
"mode": "debug",
"program": "${workspaceRoot}",
"env": {
- "GOPATH": "${workspaceRoot}/../../../..:${env:GOPATH}",
+ "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}",
"XDS_LOGLEVEL": "debug"
},
"args": ["-tt", "--help", "--version"],
@@ -22,7 +22,7 @@
"mode": "debug",
"program": "${workspaceRoot}",
"env": {
- "GOPATH": "${workspaceRoot}/../../../..:${env:GOPATH}",
+ "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}",
"XDS_LOGLEVEL": "debug"
},
"args": ["-x", "${workspaceRoot}/__config/gdb-on-target.ini", "-nx"],
@@ -35,7 +35,7 @@
"mode": "debug",
"program": "${workspaceRoot}",
"env": {
- "GOPATH": "${workspaceRoot}/../../../..:${env:GOPATH}"
+ "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}",
},
"args": ["-tty", "/dev/pts27", "-nx", "-x", "${workspaceRoot}/__config/gdb-on-m3ulcb_debug_pi.ini"],
"showLog": false
@@ -47,7 +47,7 @@
"mode": "debug",
"program": "${workspaceRoot}",
"env": {
- "GOPATH": "${workspaceRoot}/../../../..:${env:GOPATH}",
+ "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}",
"XDS_LOGLEVEL": "debug"
},
"args": ["-x", "${workspaceRoot}/__config/gdb-on-localhost_debug_pi.ini"],
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 16b3a00..8c1f563 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,5 +1,8 @@
// Place your settings in this file to overwrite default and user settings.
{
+ // Specify GOPATH here to override the one that is set as environment variable. The inferred GOPATH from workspace root overrides this, if go.inferGopath is set to true.
+ "go.gopath": "${workspaceRoot}/../../../../../..",
+
// Configure glob patterns for excluding files and folders.
"files.exclude": {
"**/.tmp": true,
Class */ .highlight .no { color: #66d9ef } /* Name.Constant */ .highlight .nd { color: #a6e22e } /* Name.Decorator */ .highlight .ni { color: #f8f8f2 } /* Name.Entity */ .highlight .ne { color: #a6e22e } /* Name.Exception */ .highlight .nf { color: #a6e22e } /* Name.Function */ .highlight .nl { color: #f8f8f2 } /* Name.Label */ .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ .highlight .nx { color: #a6e22e } /* Name.Other */ .highlight .py { color: #f8f8f2 } /* Name.Property */ .highlight .nt { color: #f92672 } /* Name.Tag */ .highlight .nv { color: #f8f8f2 } /* Name.Variable */ .highlight .ow { color: #f92672 } /* Operator.Word */ .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ .highlight .mb { color: #ae81ff } /* Literal.Number.Bin */ .highlight .mf { color: #ae81ff } /* Literal.Number.Float */ .highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ .highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ .highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ .highlight .sa { color: #e6db74 } /* Literal.String.Affix */ .highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ .highlight .sc { color: #e6db74 } /* Literal.String.Char */ .highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */ .highlight .sd { color: #e6db74 } /* Literal.String.Doc */ .highlight .s2 { color: #e6db74 } /* Literal.String.Double */ .highlight .se { color: #ae81ff } /* Literal.String.Escape */ .highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ .highlight .si { color: #e6db74 } /* Literal.String.Interpol */ .highlight .sx { color: #e6db74 } /* Literal.String.Other */ .highlight .sr { color: #e6db74 } /* Literal.String.Regex */ .highlight .s1 { color: #e6db74 } /* Literal.String.Single */ .highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ .highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #a6e22e } /* Name.Function.Magic */ .highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ .highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ .highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ .highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ .highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ } @media (prefers-color-scheme: light) { .highlight .hll { background-color: #ffffcc } .highlight .c { color: #888888 } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { color: #008800; font-weight: bold } /* Keyword */ .highlight .ch { color: #888888 } /* Comment.Hashbang */ .highlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*
 * Copyright (C) 2018 The Qt Company Ltd.
 * Copyright (c) 2018-2019 TOYOTA MOTOR CORPORATION
 *
 * 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 <QtQml/qqml.h>
#include <qlibwindowmanager.h>
#include <QQuickWindow>
#include <QtCore/QCommandLineParser>
#include <QtCore/QDebug>
#include <QtCore/QDir>
#include <QtCore/QStandardPaths>
#include <QtCore/QUrlQuery>
#include <QtGui/QGuiApplication>
#include <QtQml/QQmlApplicationEngine>
#include <QtQml/QQmlContext>
#include <QtQuickControls2/QQuickStyle>
#include "afm_user_daemon_proxy.h"
#include "nativeappmodel.h"
#include "qlibhomescreen.h"
#include "serverappmodel.h"

org::AGL::afm::user* afm_user_daemon_proxy;

namespace {

struct Cleanup {
  static inline void cleanup(org::AGL::afm::user* p) {
    delete p;
    afm_user_daemon_proxy = Q_NULLPTR;
  }
};

void noOutput(QtMsgType, const QMessageLogContext&, const QString&) {}

}  // namespace

int main(int argc, char* argv[]) {
  QString role = QString("warehouse");
  QGuiApplication app(argc, argv);

  // use launch process
  QScopedPointer<org::AGL::afm::user, Cleanup> afm_user_daemon_proxy(
      new org::AGL::afm::user("org.AGL.afm.user", "/org/AGL/afm/user",
                              QDBusConnection::sessionBus(), 0));
  ::afm_user_daemon_proxy = afm_user_daemon_proxy.data();

  app.setApplicationName("warehouse");

  QQuickStyle::setStyle("AGL");

  QQmlApplicationEngine engine;
  QQmlContext* context = engine.rootContext();

  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();

  if (positionalArguments.length() == 2) {
    int port = positionalArguments.takeFirst().toInt();
    QString secret = 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"), secret);
    bindingAddress.setQuery(query);

    std::string token = secret.toStdString();

    // import C++ class to QML
    qmlRegisterType<NativeAppModel>("NativeAppModel", 1, 0, "NativeAppModel");
    qmlRegisterType<ServerAppModel>("ServerAppModel", 1, 0, "ServerAppModel");

    QLibHomeScreen* homescreenHandler = new QLibHomeScreen();
    QLibWindowmanager* qwm = new QLibWindowmanager();

    // WindowManager
    if (qwm->init(port, secret) != 0) {
      exit(EXIT_FAILURE);
    }

    AGLScreenInfo screenInfo(qwm->get_scale_factor());

    // Request a surface as described in layers.json windowmanager’s file
    if (qwm->requestSurface(role) != 0) {
      exit(EXIT_FAILURE);
    }

    // Create an event callback against an event type. Here a lambda is
    // called when SyncDraw event occurs
    qwm->set_event_handler(QLibWindowmanager::Event_SyncDraw,
                           [qwm, role](json_object* object) {
                             fprintf(stderr, "Surface got syncDraw!\n");

                             qwm->endDraw(role);
                           });

    // HomeScreen
    homescreenHandler->init(port, token.c_str());
    // Set the event handler for Event_TapShortcut which will activate the
    // surface for windowmanager
    homescreenHandler->set_event_handler(
        QLibHomeScreen::Event_TapShortcut, [qwm, role](json_object* object) {
            qDebug("Surface warehouse got tapShortcut.\n");
            struct json_object *obj_param = nullptr, *obj_area = nullptr;
            if(json_object_object_get_ex(object, "parameter", &obj_param)
            && json_object_object_get_ex(obj_param, "area", &obj_area)) {
                qwm->activateWindow(role.toStdString().c_str(), json_object_get_string(obj_area));
            }
            else {
                qwm->activateWindow(role.toStdString().c_str(), "normal");
            }
        });

    context->setContextProperty(QStringLiteral("homescreenHandler"),
                                homescreenHandler);
    context->setContextProperty(QStringLiteral("screenInfo"), &screenInfo);
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    QObject* root = engine.rootObjects().first();

    QQuickWindow* window = qobject_cast<QQuickWindow*>(root);
    QObject::connect(window, SIGNAL(frameSwapped()), qwm,
                     SLOT(slotActivateSurface()));
  }
  return app.exec();
}