Introduces shared lib that provides the API of D-Bus org.agl.homescreen.
authorBocklage, Jens <Jens_Bocklage@mentor.com>
Mon, 31 Oct 2016 10:40:18 +0000 (11:40 +0100)
committerBocklage, Jens <Jens_Bocklage@mentor.com>
Mon, 31 Oct 2016 10:40:18 +0000 (11:40 +0100)
Initial implementation to show the idea. Also availabale a sample app that uses the new lib. The lib uses the GNU D-Bus lib.

Signed-off-by: Bocklage, Jens <Jens_Bocklage@mentor.com>
HomeScreen.pro
README.md
SampleHomeScreenInterfaceApp/SampleHomeScreenInterfaceApp.pro [new file with mode: 0644]
SampleHomeScreenInterfaceApp/src/main.cpp [new file with mode: 0644]
SampleHomeScreenInterfaceApp/src/sampleclass.cpp [new file with mode: 0644]
SampleHomeScreenInterfaceApp/src/sampleclass.hpp [new file with mode: 0644]
interfaces/interfaces.pro
libhomescreen/include/libhomescreen.hpp [new file with mode: 0644]
libhomescreen/libhomescreen.pro [new file with mode: 0644]
libhomescreen/src/libhomescreen.cpp [new file with mode: 0644]

index 80ada09..c85f759 100644 (file)
 TEMPLATE = subdirs
 
 SUBDIRS = interfaces \
-        HomeScreen \
-       HomeScreenAppFrameworkBinderTizen \
-       HomeScreenSimulator \
-       InputEventManager \
-       SampleAppTimeDate \
-       WindowManager
+    libhomescreen \
+    HomeScreen \
+    HomeScreenAppFrameworkBinderTizen \
+    HomeScreenSimulator \
+    InputEventManager \
+    SampleAppTimeDate \
+    WindowManager \
+    SampleHomeScreenInterfaceApp
 
 HomeScreen.depends = interfaces
 HomeScreenSimulator.depends = interfaces
@@ -29,6 +31,8 @@ InputEventManager.depends = interfaces
 SampleAppTimeDate.depends = interfaces
 WindowManager.depends = interfaces
 
+SampleHomeScreenInterfaceApp.depends = libhomescreen
+
 # remove generated files
 QMAKE_CLEAN += -r \
     $$OUT_PWD/Makefile
index 6593fc7..945957f 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,7 +1,11 @@
-AGL Home Screen reference implementation
+This project contains:
 
-
-Build with QtCreator 3.0.1
+HomeScreen: AGL Home Screen reference implementation
+HomeScreenSimulator: AGL Home Screen Simulator for development
+InputEventManager: AGL Input event manager
+interfaces: library with the D-Bus interfaces
+SampleAppTimeDate: AGL Sample Application for Home Screen Statusbar
+HomeScreenAppFrameworkBinderTizen: Binder for the TIZEN application framework
 
 AGL repo for source code:
 https://gerrit.automotivelinux.org/gerrit/#/admin/projects/staging/HomeScreen
@@ -10,7 +14,95 @@ AGL repo for bitbake recipe:
 https://gerrit.automotivelinux.org/gerrit/#/admin/projects/AGL/meta-agl-demo/recipes-demo-hmi/HomeScreen/HomeScreen_?.bb
 
 
-Thanks to Umar Irshad for his free iconset available here:
-https://dribbble.com/shots/1569128-Freebie-48-Bubbles-Iconset
+Instructions for running on porter board
+----------------------------------------
+
+Add "HomeScreen" to your image recipe.
+Right now, HomeScreen depends on the TIZEN application manager, because the HomeScreenAppFrameworkBinderTizen makes use of it.
+So also add this to your image recipe:
+"
+    tizen-platform-wrapper \
+    tizen-platform-config \
+    xdgmime \
+    libdlog \
+    dlogutil \
+    libiri \
+    \
+    smack \
+    libprivilege-control \
+    libslp-db-util \
+    \
+    vconf \
+    capi-base-common \
+    ail \
+    \
+    sensor \
+    libsf-common \
+    \
+    iniparser \
+    app-svc \
+    heynoti \
+    notification \
+    app-core-efl \
+    app-core-common \
+    capi-system-info \
+    \
+    pkgmgr-info \
+    librua \
+    bundle \
+    app-checker \
+    \
+    libcom-core \
+    privacy-manager-server \
+    pkgmgr \
+    pkgmgr-info \
+    pkgmgr-info-parser \
+    aul \
+    aul-test \
+    \
+    dlt-daemon \
+    dlt-daemon-systemd \
+    \
+    amhelloworld \
+    pkgmgr-first-setup-service \
+"
+
+
+All "HomeScreen" applications can be found in /opt/AGL/HomeScreen.
+
+Make sure, weston is using the IVI shell extension:
+
+/etc/xdg/weston/weston.ini:
+
+[core]
+shell=ivi-shell.so
+
+[ivi-shell]
+ivi-module=ivi-controller.so
+ivi-shell-user-interface=/usr/lib/weston/weston-ivi-shell-user-interface
+
+[output]
+name=HDMI-A-1
+transform=270
+
+
+
+If you want to use the TIZEN application manager to launch apps, you need to execute HomeScreen app with the user "aglglobalapp":
+
+Therefore you need to change the owner of the weston socket:
+
+chown aglglobalapp:aglglobalapp /tmp/wayland-0
+
+P.S.: the path may also something likle /run/user/0, depending on the XDG_RUNTIME_DIR.
+
+If not already stared, launch D-Bus:
+export `dbus-launch`
+
+Now you can start the HomeScreen apps:
+cd /opt/AGL/HomeScreen
+./WindowManager &
+./InputEventManager &
+./HomeScreenAppFrameworkBinderTizen &
+./HomeScreen &
 
 
diff --git a/SampleHomeScreenInterfaceApp/SampleHomeScreenInterfaceApp.pro b/SampleHomeScreenInterfaceApp/SampleHomeScreenInterfaceApp.pro
new file mode 100644 (file)
index 0000000..4da1e36
--- /dev/null
@@ -0,0 +1,18 @@
+TEMPLATE = app
+CONFIG += console
+CONFIG -= app_bundle
+CONFIG -= qt
+
+SOURCES += src/main.cpp \
+    src/sampleclass.cpp
+
+HEADERS += \
+    src/sampleclass.hpp
+
+INCLUDEPATH += $$PWD/../libhomescreen/include/
+
+LIBS += -L$$OUT_PWD/../libhomescreen -lhomescreen
+
+# remove generated files
+QMAKE_CLEAN += -r \
+    $$OUT_PWD/*
diff --git a/SampleHomeScreenInterfaceApp/src/main.cpp b/SampleHomeScreenInterfaceApp/src/main.cpp
new file mode 100644 (file)
index 0000000..1e83d80
--- /dev/null
@@ -0,0 +1,19 @@
+#include <iostream>
+#include "sampleclass.hpp"
+
+using namespace std;
+
+int main()
+{
+    cout << "SampleHomeScreenInterfaceApp" << endl;
+
+    SampleClass *sampleClass = new SampleClass();
+
+    sampleClass->hardKeyPressed(100);
+    sampleClass->hardKeyPressed(101);
+    sampleClass->hardKeyPressed(102);
+
+    delete sampleClass;
+
+    return 0;
+}
diff --git a/SampleHomeScreenInterfaceApp/src/sampleclass.cpp b/SampleHomeScreenInterfaceApp/src/sampleclass.cpp
new file mode 100644 (file)
index 0000000..0d373d1
--- /dev/null
@@ -0,0 +1,22 @@
+#include "sampleclass.hpp"
+
+SampleClass::SampleClass() :
+    mp_libHomeScreen(0)
+{
+    mp_libHomeScreen = new LibHomeScreen();
+}
+
+SampleClass::~SampleClass()
+{
+    delete mp_libHomeScreen;
+}
+
+void SampleClass::hardKeyPressed(int key)
+{
+    mp_libHomeScreen->hardKeyPressed(key);
+}
+
+void SampleClass::toggleFullScreen()
+{
+    mp_libHomeScreen->toggleFullScreen();
+}
diff --git a/SampleHomeScreenInterfaceApp/src/sampleclass.hpp b/SampleHomeScreenInterfaceApp/src/sampleclass.hpp
new file mode 100644 (file)
index 0000000..aa5f376
--- /dev/null
@@ -0,0 +1,19 @@
+#ifndef SAMPLECLASS_HPP
+#define SAMPLECLASS_HPP
+
+#include "libhomescreen.hpp"
+
+class SampleClass
+{
+public:
+    SampleClass();
+    ~SampleClass();
+
+    void hardKeyPressed(int key);
+    void toggleFullScreen();
+
+private:
+    LibHomeScreen *mp_libHomeScreen;
+};
+
+#endif // SAMPLECLASS_HPP
index d2e1a19..bd3fa39 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-QT  += core dbus
+QT  += dbus
 QT  -= gui
 
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
 TEMPLATE = lib
 CONFIG += staticlib
 TARGET = interfaces
diff --git a/libhomescreen/include/libhomescreen.hpp b/libhomescreen/include/libhomescreen.hpp
new file mode 100644 (file)
index 0000000..f92e190
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef LIBHOMESCREEN_HPP
+#define LIBHOMESCREEN_HPP
+
+// forward declarations
+struct _LibHomeScreenHomescreen;
+typedef struct _LibHomeScreenHomescreen LibHomeScreenHomescreen;
+
+class LibHomeScreen
+{
+public:
+    LibHomeScreen();
+    ~LibHomeScreen();
+
+    // these are representing the D-Bus methods:
+    void hardKeyPressed(int key);
+    void toggleFullScreen();
+
+private:
+    LibHomeScreenHomescreen *mp_libHomeScreenHomescreen_Proxy;
+};
+
+#endif // LIBHOMESCREEN_HPP
diff --git a/libhomescreen/libhomescreen.pro b/libhomescreen/libhomescreen.pro
new file mode 100644 (file)
index 0000000..b488e90
--- /dev/null
@@ -0,0 +1,53 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2016-10-28T11:05:51
+#
+#-------------------------------------------------
+
+QT       -= core gui
+
+TARGET = homescreen
+TEMPLATE = lib
+
+SOURCES += \
+        src/libhomescreen.cpp
+
+HEADERS += \
+        include/libhomescreen.hpp
+
+CONFIG += link_pkgconfig
+PKGCONFIG += glib-2.0 gio-unix-2.0
+
+XMLSOURCES = \
+    ../interfaces/homescreen.xml
+
+gen_proxy_skeleton_h.input = XMLSOURCES
+gen_proxy_skeleton_h.commands = \
+    gdbus-codegen --generate-c-code ${QMAKE_FILE_IN_BASE} --c-namespace LibHomeScreen --interface-prefix org.agl. ${QMAKE_FILE_IN}
+gen_proxy_skeleton_h.output = ${QMAKE_FILE_IN_BASE}.h
+gen_proxy_skeleton_h.variable_out = HEADERS
+gen_proxy_skeleton_h.clean = ${QMAKE_FILE_IN_BASE}.h
+
+gen_proxy_skeleton_c.input = XMLSOURCES
+gen_proxy_skeleton_c.commands = \
+    gdbus-codegen --generate-c-code ${QMAKE_FILE_IN_BASE} --c-namespace LibHomeScreen --interface-prefix org.agl. ${QMAKE_FILE_IN}
+gen_proxy_skeleton_c.output = ${QMAKE_FILE_IN_BASE}.c
+gen_proxy_skeleton_c.variable_out = SOURCES
+gen_proxy_skeleton_c.clean = ${QMAKE_FILE_IN_BASE}.c
+
+
+QMAKE_EXTRA_COMPILERS += gen_proxy_skeleton_h gen_proxy_skeleton_c
+
+# remove generated files
+QMAKE_CLEAN += -r \
+    $$OUT_PWD/*
+
+
+#    ../interfaces/appframework.xml \
+#    ../interfaces/daynightmode.xml \
+#    ../interfaces/homescreen.xml \
+#    ../interfaces/inputevent.xml \
+#    ../interfaces/popup.xml \
+#    ../interfaces/proximity.xml \
+#    ../interfaces/statusbar.xml \
+#    ../interfaces/windowmanager.xml
diff --git a/libhomescreen/src/libhomescreen.cpp b/libhomescreen/src/libhomescreen.cpp
new file mode 100644 (file)
index 0000000..978a42c
--- /dev/null
@@ -0,0 +1,59 @@
+#include "homescreen.h" // generated from xml
+#include "include/libhomescreen.hpp"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+LibHomeScreen::LibHomeScreen()
+{
+    GError *err = NULL;
+
+    mp_libHomeScreenHomescreen_Proxy = lib_home_screen_homescreen_proxy_new_for_bus_sync(
+                G_BUS_TYPE_SESSION,
+                G_DBUS_PROXY_FLAGS_NONE,
+                "org.agl.homescreen",
+                "/HomeScreen",
+                NULL,
+                &err);
+
+    if (NULL != err)
+    {
+        fprintf(stderr, "Unable to create proxy: %s\n", err->message);
+    }
+}
+
+LibHomeScreen::~LibHomeScreen()
+{
+    g_object_unref(mp_libHomeScreenHomescreen_Proxy);
+}
+
+void LibHomeScreen::hardKeyPressed(int key)
+{
+    GError *err = NULL;
+
+    lib_home_screen_homescreen_call_hard_key_pressed_sync(
+                mp_libHomeScreenHomescreen_Proxy,
+                key,
+                NULL,
+                &err);
+
+    if (NULL != err)
+    {
+        fprintf(stderr, "Unable to call hardKeyPressed: %s\n", err->message);
+    }
+}
+
+void LibHomeScreen::toggleFullScreen()
+{
+    GError *err = NULL;
+
+    lib_home_screen_homescreen_call_toggle_full_screen_sync(
+                mp_libHomeScreenHomescreen_Proxy,
+                NULL,
+                &err);
+
+    if (NULL != err)
+    {
+        fprintf(stderr, "Unable to call toggleFullScreen: %s\n", err->message);
+    }
+}