aboutsummaryrefslogtreecommitdiffstats
path: root/libhomescreen
diff options
context:
space:
mode:
authorBocklage, Jens <Jens_Bocklage@mentor.com>2017-01-18 15:29:11 +0100
committerBocklage, Jens <Jens_Bocklage@mentor.com>2017-01-18 15:29:11 +0100
commit0a6aadf18c17798b2624fb6ec9596ae24fa9eb1d (patch)
treed240edccc82c8c3d69f1335eab6e367c4761e7e1 /libhomescreen
parent72d085b03604286e045f978d2d100d677b6534d6 (diff)
Initial source commit
Taken from https://gerrit.automotivelinux.org/gerrit/p/staging/HomeScreen.git Signed-off-by: Bocklage, Jens <Jens_Bocklage@mentor.com>
Diffstat (limited to 'libhomescreen')
-rw-r--r--libhomescreen/include/libhomescreen.hpp36
-rw-r--r--libhomescreen/libhomescreen.pro47
-rw-r--r--libhomescreen/src/libhomescreen.cpp160
3 files changed, 243 insertions, 0 deletions
diff --git a/libhomescreen/include/libhomescreen.hpp b/libhomescreen/include/libhomescreen.hpp
new file mode 100644
index 0000000..6baa805
--- /dev/null
+++ b/libhomescreen/include/libhomescreen.hpp
@@ -0,0 +1,36 @@
+#ifndef LIBHOMESCREEN_HPP
+#define LIBHOMESCREEN_HPP
+
+#include <vector>
+
+// forward declarations
+struct _LibHomeScreenHomescreen;
+typedef struct _LibHomeScreenHomescreen LibHomeScreenHomescreen;
+
+typedef struct
+{
+ int x;
+ int y;
+ int width;
+ int height;
+} sRectangle;
+
+class LibHomeScreen
+{
+public:
+ LibHomeScreen();
+ ~LibHomeScreen();
+
+ // these are representing the D-Bus methods:
+ std::vector<int> getAllSurfacesOfProcess(int pid);
+ int getSurfaceStatus(int surfaceId);
+ void hardKeyPressed(int key);
+ void renderSurfaceToArea(int surfaceId, int layoutArea);
+ bool renderAppToAreaAllowed(int appCategory, int layoutArea);
+ void requestSurfaceIdToFullScreen(int surfaceId);
+private:
+ LibHomeScreenHomescreen *mp_libHomeScreenHomescreen_Proxy;
+};
+
+#endif // LIBHOMESCREEN_HPP
+
diff --git a/libhomescreen/libhomescreen.pro b/libhomescreen/libhomescreen.pro
new file mode 100644
index 0000000..f7cae8e
--- /dev/null
+++ b/libhomescreen/libhomescreen.pro
@@ -0,0 +1,47 @@
+TEMPLATE = lib
+TARGET = homescreen
+CONFIG -= qt
+
+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
+
+
+gen_docbook.target = doc
+gen_docbook.commands = \
+ gdbus-codegen --generate-docbook doc $$PWD/../interfaces/homescreen.xml
+
+QMAKE_EXTRA_TARGETS += gen_docbook
+PRE_TARGETDEPS += doc
+
+CONFIG += create_pc create_prl
+QMAKE_PKGCONFIG_NAME = libhomescreen
+QMAKE_PKGCONFIG_DESCRIPTION = A generic interface for the HomeScreen app
+QMAKE_PKGCONFIG_LIBDIR = /usr/lib64
+QMAKE_PKGCONFIG_INCDIR = /usr/include
+QMAKE_PKGCONFIG_REQUIRES = glib-2.0 gio-unix-2.0
+QMAKE_PKGCONFIG_DESTDIR = pkgconfig
diff --git a/libhomescreen/src/libhomescreen.cpp b/libhomescreen/src/libhomescreen.cpp
new file mode 100644
index 0000000..ae8f563
--- /dev/null
+++ b/libhomescreen/src/libhomescreen.cpp
@@ -0,0 +1,160 @@
+extern "C" {
+#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);
+}
+
+std::vector<int> LibHomeScreen::getAllSurfacesOfProcess(int pid)
+{
+ std::vector<int> result;
+
+ GError *err = NULL;
+
+ GVariant *out_surfaceIds;
+
+ lib_home_screen_homescreen_call_get_all_surfaces_of_process_sync(
+ mp_libHomeScreenHomescreen_Proxy,
+ pid,
+ &out_surfaceIds,
+ NULL,
+ &err);
+
+ if (NULL != err)
+ {
+ fprintf(stderr, "Unable to call getAllSurfacesOfProcess: %s\n", err->message);
+ }
+
+
+ GVariant *element;
+ GVariantIter iter;
+ int i;
+
+ if (g_variant_iter_init(&iter, out_surfaceIds))
+ {
+ while ((element = g_variant_iter_next_value(&iter)) != NULL)
+ {
+ g_variant_get(element, "i", &i);
+ result.push_back(i);
+ g_variant_unref(element);
+ }
+ }
+
+ return result;
+}
+
+int LibHomeScreen::getSurfaceStatus(int surfaceId)
+{
+ int result;
+ GError *err = NULL;
+
+ GVariant *out_renderArea;
+
+ lib_home_screen_homescreen_call_get_surface_status_sync(
+ mp_libHomeScreenHomescreen_Proxy,
+ surfaceId,
+ &result,
+ NULL,
+ &err);
+
+ if (NULL != err)
+ {
+ fprintf(stderr, "Unable to call getSurfaceStatus: %s\n", err->message);
+ }
+
+ return result;
+}
+
+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::renderSurfaceToArea(int surfaceId, int layoutArea)
+{
+ GError *err = NULL;
+
+ lib_home_screen_homescreen_call_render_surface_to_area_sync(
+ mp_libHomeScreenHomescreen_Proxy,
+ surfaceId,
+ layoutArea,
+ NULL,
+ &err);
+
+ if (NULL != err)
+ {
+ fprintf(stderr, "Unable to call renderSurfaceToArea: %s\n", err->message);
+ }
+}
+
+bool LibHomeScreen::renderAppToAreaAllowed(int appCategory, int layoutArea)
+{
+ gboolean result = true;
+ GError *err = NULL;
+
+ lib_home_screen_homescreen_call_render_app_to_area_allowed_sync(
+ mp_libHomeScreenHomescreen_Proxy,
+ appCategory,
+ layoutArea,
+ &result,
+ NULL,
+ &err);
+
+ if (NULL != err)
+ {
+ fprintf(stderr, "Unable to call renderAppToAreaAllowed: %s\n", err->message);
+ }
+
+ return result;
+}
+
+void LibHomeScreen::requestSurfaceIdToFullScreen(int surfaceId)
+{
+ GError *err = NULL;
+
+ lib_home_screen_homescreen_call_request_surface_id_to_full_screen_sync(
+ mp_libHomeScreenHomescreen_Proxy,
+ surfaceId,
+ NULL,
+ &err);
+
+ if (NULL != err)
+ {
+ fprintf(stderr, "Unable to call requestSurfaceIdToFullScreen: %s\n", err->message);
+ }
+}