From 949bf001944f462b4fbf8d28ee7e9643c9888bee Mon Sep 17 00:00:00 2001 From: "Bocklage, Jens" Date: Mon, 31 Oct 2016 11:40:18 +0100 Subject: [PATCH] Introduces shared lib that provides the API of D-Bus org.agl.homescreen. 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 --- HomeScreen.pro | 16 ++-- README.md | 102 ++++++++++++++++++++- .../SampleHomeScreenInterfaceApp.pro | 18 ++++ SampleHomeScreenInterfaceApp/src/main.cpp | 19 ++++ SampleHomeScreenInterfaceApp/src/sampleclass.cpp | 22 +++++ SampleHomeScreenInterfaceApp/src/sampleclass.hpp | 19 ++++ interfaces/interfaces.pro | 4 +- libhomescreen/include/libhomescreen.hpp | 22 +++++ libhomescreen/libhomescreen.pro | 53 +++++++++++ libhomescreen/src/libhomescreen.cpp | 59 ++++++++++++ 10 files changed, 320 insertions(+), 14 deletions(-) create mode 100644 SampleHomeScreenInterfaceApp/SampleHomeScreenInterfaceApp.pro create mode 100644 SampleHomeScreenInterfaceApp/src/main.cpp create mode 100644 SampleHomeScreenInterfaceApp/src/sampleclass.cpp create mode 100644 SampleHomeScreenInterfaceApp/src/sampleclass.hpp create mode 100644 libhomescreen/include/libhomescreen.hpp create mode 100644 libhomescreen/libhomescreen.pro create mode 100644 libhomescreen/src/libhomescreen.cpp diff --git a/HomeScreen.pro b/HomeScreen.pro index 80ada09..c85f759 100644 --- a/HomeScreen.pro +++ b/HomeScreen.pro @@ -15,12 +15,14 @@ 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 diff --git a/README.md b/README.md index 6593fc7..945957f 100644 --- 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 index 0000000..4da1e36 --- /dev/null +++ b/SampleHomeScreenInterfaceApp/SampleHomeScreenInterfaceApp.pro @@ -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 index 0000000..1e83d80 --- /dev/null +++ b/SampleHomeScreenInterfaceApp/src/main.cpp @@ -0,0 +1,19 @@ +#include +#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 index 0000000..0d373d1 --- /dev/null +++ b/SampleHomeScreenInterfaceApp/src/sampleclass.cpp @@ -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 index 0000000..aa5f376 --- /dev/null +++ b/SampleHomeScreenInterfaceApp/src/sampleclass.hpp @@ -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 diff --git a/interfaces/interfaces.pro b/interfaces/interfaces.pro index d2e1a19..bd3fa39 100644 --- a/interfaces/interfaces.pro +++ b/interfaces/interfaces.pro @@ -12,11 +12,9 @@ # 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 index 0000000..f92e190 --- /dev/null +++ b/libhomescreen/include/libhomescreen.hpp @@ -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 index 0000000..b488e90 --- /dev/null +++ b/libhomescreen/libhomescreen.pro @@ -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 index 0000000..978a42c --- /dev/null +++ b/libhomescreen/src/libhomescreen.cpp @@ -0,0 +1,59 @@ +#include "homescreen.h" // generated from xml +#include "include/libhomescreen.hpp" + +#include +#include + +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); + } +} -- 2.16.6