From 0a6aadf18c17798b2624fb6ec9596ae24fa9eb1d Mon Sep 17 00:00:00 2001 From: "Bocklage, Jens" Date: Wed, 18 Jan 2017 15:29:11 +0100 Subject: Initial source commit Taken from https://gerrit.automotivelinux.org/gerrit/p/staging/HomeScreen.git Signed-off-by: Bocklage, Jens --- libhomescreen/include/libhomescreen.hpp | 36 +++++++ libhomescreen/libhomescreen.pro | 47 ++++++++++ libhomescreen/src/libhomescreen.cpp | 160 ++++++++++++++++++++++++++++++++ 3 files changed, 243 insertions(+) create mode 100644 libhomescreen/include/libhomescreen.hpp create mode 100644 libhomescreen/libhomescreen.pro create mode 100644 libhomescreen/src/libhomescreen.cpp (limited to 'libhomescreen') 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 + +// 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 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 +#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); +} + +std::vector LibHomeScreen::getAllSurfacesOfProcess(int pid) +{ + std::vector 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); + } +} -- cgit 1.2.3-korg