summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapp/gdp-hmi-launcher2/content/ListItem.qml4
-rw-r--r--app/gdp-hmi-launcher2/gdp-hmi-launcher2.cpp91
-rw-r--r--app/gdp-hmi-launcher2/gdp-hmi-launcher2.h19
-rw-r--r--app/gdp-hmi-launcher2/gdp-hmi-launcher2.pro2
-rwxr-xr-xapp/gdp-hmi-launcher2/gdp-hmi-launcher2.qml28
-rwxr-xr-xapp/gdp-hmi-launcher2/main.cpp14
6 files changed, 152 insertions, 6 deletions
diff --git a/app/gdp-hmi-launcher2/content/ListItem.qml b/app/gdp-hmi-launcher2/content/ListItem.qml
index bfa63bf..4dcc978 100755
--- a/app/gdp-hmi-launcher2/content/ListItem.qml
+++ b/app/gdp-hmi-launcher2/content/ListItem.qml
@@ -56,8 +56,10 @@ Item {
anchors.fill: parent
onClicked: {
if (isSelected) {
+ //Save the index for Last User Mode
+ GDPLauncher2.setLastAppIndex(model.index);
// Open the item
- mainView.appSelectSignal(model.unit)
+ mainView.appSelectSignal(model.unit);
} else {
pathView.currentIndex = model.index;
}
diff --git a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.cpp b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.cpp
index 84bccff..a79172a 100644
--- a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.cpp
+++ b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.cpp
@@ -32,15 +32,23 @@ DLT_IMPORT_CONTEXT(launcherTraceCtx);
#include <systemd/sd-journal.h>
#endif
+
#include "gdp-hmi-launcher2.h"
static const char *GDP_HMI_PID_FILENAME = "/var/run/gdp-hmi-controller.pid";
static const char *GDP_DBUS_SERVICE_NAME = "org.genivi.gdp.hmi.controller";
static const char *GDP_DBUS_SERVICE_PATH = "/org/genivi/gdp/hmi/controller";
+#define GDP_LAUNCHER2_LAST_APP_UNIT_DB_ID 0xFF
+#define GDP_LAUNCHER2_LAST_APP_UNIT_KEY "LastAppIndex"
+#define GDP_LAUNCHER2_USER 3
+#define GDP_LAUNCHER2_SEAT 2
+#define GDP_LAUNCHER2_INDEX_MAX 0xFF
+
GDPLauncherClass::GDPLauncherClass()
: m_hmiControllerPid(-1)
{
+ int pcl_return;
#ifdef USE_DLT
DLT_LOG(launcherTraceCtx,DLT_LOG_INFO,DLT_STRING("Debug: GDPLauncherClass - dbus session.\n"));
#else
@@ -49,10 +57,93 @@ GDPLauncherClass::GDPLauncherClass()
m_controller = new org::genivi::gdp::HMI_Controller(GDP_DBUS_SERVICE_NAME,
GDP_DBUS_SERVICE_PATH, QDBusConnection::sessionBus(), this);
m_timerId = startTimer(5000); // 5 second timer
+
+ /* Initialize Persistence Client Library */
+ pcl_return = pclInitLibrary("Launcher", PCL_SHUTDOWN_TYPE_NORMAL | PCL_SHUTDOWN_TYPE_FAST);
+ if (pcl_return < 0) {
+#ifdef USE_DLT
+ DLT_LOG(launcherTraceCtx, DLT_LOG_INFO,
+ DLT_STRING("Launcher2: Failed to initialize PCL.");
+ DLT_STRING("Error: Unexpected PCL return.");
+ DLT_STRING("Return:"); DLT_INT(pcl_return));
+#else
+ sd_journal_print(LOG_DEBUG, "Launcher2: Failed to initialize PCL\n");
+#endif
+ return;
+ }
}
GDPLauncherClass::~GDPLauncherClass()
{
+ int pcl_return;
+
+ /* Deinitialize the PCL */
+ pcl_return = pclDeinitLibrary();
+
+ if (pcl_return < 0) {
+#ifdef USE_DLT
+ DLT_LOG(launcherTraceCtx, DLT_LOG_INFO,
+ DLT_STRING("Launcher2: Failed to deinitialize PCL.");
+ DLT_STRING("Error: Unexpected PCL return.");
+ DLT_STRING("Return:"); DLT_INT(pcl_return));
+#else
+ sd_journal_print(LOG_DEBUG, "Launcher2: Failed to deinitialize PCL.\n");
+#endif
+ }
+}
+
+int GDPLauncherClass::readLastUserAppIndex()
+{
+ int pcl_return;
+ unsigned char value[8];
+ /* Get data from persistence */
+
+ pcl_return = pclKeyReadData(GDP_LAUNCHER2_LAST_APP_UNIT_DB_ID,
+ GDP_LAUNCHER2_LAST_APP_UNIT_KEY,
+ GDP_LAUNCHER2_USER,
+ GDP_LAUNCHER2_SEAT,
+ value,
+ sizeof(value));
+ if (pcl_return != sizeof(value)) {
+#ifdef USE_DLT
+ DLT_LOG(launcherTraceCtx, DLT_LOG_INFO,
+ DLT_STRING("Launcher2: Failed to read Last Application Unit.");
+ DLT_STRING("Error: Unexpected PCL return.");
+ DLT_STRING("Return:"); DLT_INT(pcl_return));
+#else
+ sd_journal_print(LOG_DEBUG, "Launcher2: Failed to read Last Application Unit.\n");
+#endif
+ return GDP_LAUNCHER2_INDEX_MAX;
+ }
+
+ return atoi((char*)value);
+}
+
+
+void GDPLauncherClass::writeLastUserAppIndex(int index)
+{
+ int pcl_return;
+ unsigned char value[8];
+
+ sprintf((char*)value, "%d", index);
+ /* Set data to persistence */
+
+ pcl_return = pclKeyWriteData(GDP_LAUNCHER2_LAST_APP_UNIT_DB_ID,
+ GDP_LAUNCHER2_LAST_APP_UNIT_KEY,
+ GDP_LAUNCHER2_USER,
+ GDP_LAUNCHER2_SEAT,
+ value,
+ sizeof(value));
+ if (pcl_return != sizeof(value)) {
+#ifdef USE_DLT
+ DLT_LOG(launcherTraceCtx, DLT_LOG_INFO,
+ DLT_STRING("Launcher2: Failed to write Last Application Unit.");
+ DLT_STRING("Error: Unexpected PCL return.");
+ DLT_STRING("Return:"); DLT_INT(pcl_return));
+#else
+ sd_journal_print(LOG_DEBUG, "Launcher2: Failed to write Last Application Unit.\n");
+#endif
+ }
}
void GDPLauncherClass::timerEvent(QTimerEvent *event)
diff --git a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.h b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.h
index d13e91b..f10b7ca 100644
--- a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.h
+++ b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.h
@@ -28,6 +28,9 @@
#include <sys/types.h>
#include <systemd/sd-journal.h>
+#include <persistence_client_library.h> /* Init/DeInit PCL */
+#include <persistence_client_library_key.h> /* Access persistent data */
+
#include "gdp-hmi-introspect_interface.h"
class GDPLauncherClass : public QObject
@@ -37,6 +40,21 @@ class GDPLauncherClass : public QObject
public:
GDPLauncherClass();
~GDPLauncherClass();
+ int readLastUserAppIndex();
+ void writeLastUserAppIndex(int index);
+
+ Q_INVOKABLE int getLastAppIndex() {
+ m_selectedAppIndex = readLastUserAppIndex();
+ return m_selectedAppIndex;
+ }
+
+ Q_INVOKABLE void setLastAppIndex(int index) {
+ if (index != m_selectedAppIndex) {
+ m_selectedAppIndex = index;
+ }
+ writeLastUserAppIndex(m_selectedAppIndex);
+ }
+
public slots:
void hmiRequestOffSlot() {
@@ -59,6 +77,7 @@ protected:
private:
pid_t m_hmiControllerPid;
int m_timerId;
+ int m_selectedAppIndex;
org::genivi::gdp::HMI_Controller *m_controller;
};
diff --git a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.pro b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.pro
index a98ecc1..6478c1b 100644
--- a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.pro
+++ b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.pro
@@ -39,7 +39,7 @@ QML_IMPORT_PATH =
# enable C standard as published in 2011 as ISO/IEC 9899:2011 (known as C11)
CONFIG += c++11
-LIBS += -lsystemd -ldlt
+LIBS += -lpersistence_client_library -lsystemd -ldlt
target.path = /usr/bin
diff --git a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.qml b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.qml
index caf764c..f9a58af 100755
--- a/app/gdp-hmi-launcher2/gdp-hmi-launcher2.qml
+++ b/app/gdp-hmi-launcher2/gdp-hmi-launcher2.qml
@@ -23,10 +23,30 @@ Item {
width: 1024
height: 768
+ property int lastIndex: GDPLauncher2.getLastAppIndex();
signal appSelectSignal(string unit)
signal requestOffSignal()
+ Timer {
+ id: timer
+ interval: 1000; running: false;
+ onTriggered: mainView.appSelectSignal(listModel.get(mainView.lastIndex).unit)
+ }
+
+ Component.onCompleted: {
+ if (mainView.lastIndex < pathView.count) {
+ //We have a valid Index so let's process it
+
+ //First postion the list to right Application
+ pathView.positionViewAtIndex(mainView.lastIndex, ListView.Beginning);
+
+ //Now let's start the Application
+ timer.running = true
+ }
+ }
+
+
QtObject {
id: settings
property real spotAnimationPosition: 0.0
@@ -120,7 +140,9 @@ Item {
source: "file://usr/share/gdp/arrow-right.png"
MouseArea {
anchors.fill: parent
- onClicked: pathView.incrementCurrentIndex()
+ onClicked: {
+ pathView.incrementCurrentIndex()
+ }
}
}
@@ -133,7 +155,9 @@ Item {
source: "file://usr/share/gdp/arrow-right.png"
MouseArea {
anchors.fill: parent
- onClicked: pathView.decrementCurrentIndex()
+ onClicked: {
+ pathView.decrementCurrentIndex();
+ }
}
}
diff --git a/app/gdp-hmi-launcher2/main.cpp b/app/gdp-hmi-launcher2/main.cpp
index 22099f3..8a399bd 100755
--- a/app/gdp-hmi-launcher2/main.cpp
+++ b/app/gdp-hmi-launcher2/main.cpp
@@ -17,6 +17,7 @@
#include <QGuiApplication>
#include <QQuickView>
#include <QtDBus>
+#include <QQmlContext>
#ifdef USE_DLT
#include <dlt/dlt.h>
@@ -49,21 +50,30 @@ int main(int argc, char* argv[])
QObject *object;
QGuiApplication app(argc,argv);
+ GDPLauncherClass launcher2;
+ QQuickView view;
- QQuickView view(QUrl(QStringLiteral("qrc:/gdp-hmi-launcher2.qml")));
+ //Update QML GDPLauncher2 property
+ view.rootContext()->setContextProperty("GDPLauncher2", &launcher2);
+ //Load the QML file
+ view.setSource(QUrl(QStringLiteral("qrc:/gdp-hmi-launcher2.qml")));
view.setResizeMode(QQuickView::SizeRootObjectToView);
object = (QObject *)view.rootObject();
- GDPLauncherClass launcher2;
+ //Connect signal and slot
QObject::connect(object, SIGNAL(appSelectSignal(QString)),
&launcher2, SLOT(hmiAppLaunchSlot(QString)));
QObject::connect(object, SIGNAL(requestOffSignal()),
&launcher2, SLOT(hmiRequestOffSlot()));
+ //Set Surface property value for controller
view.setProperty("IVI-Surface-ID", GDP_LAUNCHER2_SURFACE_ID);
+
+ //let's show the view
view.showFullScreen();
+ //let's start the App
ret = app.exec();
#ifdef USE_DLT