aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-demo
diff options
context:
space:
mode:
authorJan-Simon Moeller <jsmoeller@linuxfoundation.org>2020-12-08 11:15:02 +0100
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2020-12-17 13:58:05 +0000
commit41591d4f8c586aa801220fac0924556f406c58bd (patch)
tree85a2803d48a094fb0ba3a76b9e3d0870a4e5edc2 /recipes-demo
parent4830bcef14e7f49cdc851c646a69c9bb9bd92e82 (diff)
SPEC-3723: restructure meta-agl-demo
All demo related components should be in here now. We keep the packagegroups on purpose for now to stay backward-compatible. v2: layer does pass yocto-check-layer, dependencies adapted v3: remove the dynamic-layer setup, use all-in-one approach v4: Fixed comments from Paul Barker. Tnx! v5: Removed wayland/weston/agl-compositor additions, except for demo specific weston-init bbappend Follow-up changes required later: - massaging packagegroups - scrub of recipes Bug-AGL: SPEC-3723 Signed-off-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org> Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: I47cefd8c23d46b2cdd063470e3f7d97d5ad952d8
Diffstat (limited to 'recipes-demo')
-rw-r--r--recipes-demo/alexa-viewer/alexa-viewer_git.bb35
-rw-r--r--recipes-demo/cluster-dashboard/cluster-dashboard_git.bb29
-rw-r--r--recipes-demo/cluster-gauges-qtcompositor/cluster-gauges-qtcompositor_git.bb29
-rw-r--r--recipes-demo/cluster-receiver/cluster-receiver_git.bb25
-rw-r--r--recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb28
-rw-r--r--recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.json40
-rw-r--r--recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json47
-rw-r--r--recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/roles.db34
-rw-r--r--recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf_1.0.bb19
-rw-r--r--recipes-demo/dashboard/dashboard_git.bb23
-rw-r--r--recipes-demo/homescreen-demo-ci/homescreen-demo-ci_git.bb37
-rw-r--r--recipes-demo/homescreen/homescreen_git.bb37
-rw-r--r--recipes-demo/html5-background/html5-background_git.bb13
-rw-r--r--recipes-demo/html5-dashboard/html5-dashboard_git.bb15
-rw-r--r--recipes-demo/html5-homescreen/html5-homescreen_git.bb15
-rw-r--r--recipes-demo/html5-hvac/html5-hvac_git.bb15
-rw-r--r--recipes-demo/html5-launcher/html5-launcher_git.bb15
-rw-r--r--recipes-demo/html5-mediaplayer/html5-mediaplayer_git.bb15
-rw-r--r--recipes-demo/html5-mixer/html5-mixer_git.bb15
-rw-r--r--recipes-demo/html5-settings/html5-settings_git.bb15
-rw-r--r--recipes-demo/hvac/hvac_git.bb22
-rw-r--r--recipes-demo/inputeventmanager/inputeventmanager_git.bb30
-rw-r--r--recipes-demo/launcher/launcher_git.bb28
-rw-r--r--recipes-demo/mediaplayer/mediaplayer_git.bb24
-rw-r--r--recipes-demo/messaging/messaging_git.bb23
-rw-r--r--recipes-demo/mixer/mixer_git.bb28
-rw-r--r--recipes-demo/navigation/navigation-demo_git.bb32
-rw-r--r--recipes-demo/navigation/ondemandnavi-config/naviconfig.ini9
-rw-r--r--recipes-demo/navigation/ondemandnavi-config_1.0.bb21
-rw-r--r--recipes-demo/navigation/ondemandnavi_git.bb33
-rw-r--r--recipes-demo/navigation/poiapp-api-key_1.0.bb21
-rw-r--r--recipes-demo/navigation/poiapp/0001-add-display-permission.patch21
-rw-r--r--recipes-demo/navigation/poiapp_git.bb21
-rw-r--r--recipes-demo/navigation/tbtnavi_git.bb36
-rw-r--r--recipes-demo/onscreenapp/onscreenapp_git.bb18
-rw-r--r--recipes-demo/phone/phone_git.bb24
-rw-r--r--recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb28
-rw-r--r--recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb23
-rw-r--r--recipes-demo/radio/files/presets-ALS.conf12
-rw-r--r--recipes-demo/radio/files/presets-CES.conf14
-rw-r--r--recipes-demo/radio/files/presets-FOSDEM.conf14
-rw-r--r--recipes-demo/radio/radio_git.bb37
-rw-r--r--recipes-demo/settings/settings_git.bb27
-rwxr-xr-xrecipes-demo/simple-can-simulator/files/simple_can_simulator.py381
-rw-r--r--recipes-demo/simple-can-simulator/simple-can-simulator.bb15
-rw-r--r--recipes-demo/taskmanager/taskmanager_git.bb25
-rw-r--r--recipes-demo/telematics-recorder/telematics-recorder_git.bb25
-rw-r--r--recipes-demo/waltham-receiver/waltham-receiver_git.bb26
48 files changed, 1519 insertions, 0 deletions
diff --git a/recipes-demo/alexa-viewer/alexa-viewer_git.bb b/recipes-demo/alexa-viewer/alexa-viewer_git.bb
new file mode 100644
index 000000000..f73a97acb
--- /dev/null
+++ b/recipes-demo/alexa-viewer/alexa-viewer_git.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Demo voice capabilities template viewer for Alexa voiceagent"
+DESCRIPTION = "Demo voice capabilities template viewer for Alexa voiceagent"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/alexa-viewer"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+DEPENDS = " \
+ qtquickcontrols2 \
+ qlibhomescreen \
+ af-binder \
+ libqtappfw \
+ wayland-native \
+ wayland \
+ qtwayland \
+ qtwayland-native \
+"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/alexa-viewer;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+inherit cmake_qt5 aglwgt
+
+OECMAKE_CXX_FLAGS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '' , '-DQT_NO_DEBUG_OUTPUT', d)}"
+
+RDEPENDS_${PN} = " \
+ libqtappfw \
+ libafbwsc \
+ qlibhomescreen \
+ agl-service-voice-high-capabilities \
+"
diff --git a/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb b/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb
new file mode 100644
index 000000000..da15ac83b
--- /dev/null
+++ b/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Instrument Cluster Dashboard AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating instrument cluster dashboard"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-cluster-demo-dashboard"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0 & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \
+ file://app/cluster-gauges.qml;beginline=9;endline=48;md5=54187d50b29429abee6095fe8b7c1a78"
+
+SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-cluster-demo-dashboard;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 qtwebsockets libqtappfw glib-2.0 \
+ wayland-native wayland qtwayland qtwayland-native"
+
+inherit pkgconfig cmake_qt5 aglwgt
+
+RDEPENDS_${PN} += " \
+ qtquickcontrols \
+ qtquickcontrols-qmlplugins \
+ qtquickcontrols2 \
+ qtquickcontrols2-qmlplugins \
+ libqtappfw \
+ agl-service-signal-composer \
+"
diff --git a/recipes-demo/cluster-gauges-qtcompositor/cluster-gauges-qtcompositor_git.bb b/recipes-demo/cluster-gauges-qtcompositor/cluster-gauges-qtcompositor_git.bb
new file mode 100644
index 000000000..44feecb15
--- /dev/null
+++ b/recipes-demo/cluster-gauges-qtcompositor/cluster-gauges-qtcompositor_git.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Minimal cluster demo gauges that can be used standalone"
+DESCRIPTION = "AGL HMI Application for demonstrating instrument cluster gauges as a wayland compositor"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-cluster-demo-gauges"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0 & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \
+ file://app/cluster-gauges.qml;beginline=10;endline=49;md5=54187d50b29429abee6095fe8b7c1a78"
+
+SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-cluster-demo-gauges;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 qtwebsockets"
+
+inherit pkgconfig cmake_qt5 aglwgt
+
+RDEPENDS_${PN} += " \
+ qtquickcontrols \
+ qtquickcontrols-qmlplugins \
+ qtquickcontrols2 \
+ qtquickcontrols2-qmlplugins \
+ qtwebsockets \
+ qtwebsockets-qmlplugins \
+ kms-conf \
+"
diff --git a/recipes-demo/cluster-receiver/cluster-receiver_git.bb b/recipes-demo/cluster-receiver/cluster-receiver_git.bb
new file mode 100644
index 000000000..534351f23
--- /dev/null
+++ b/recipes-demo/cluster-receiver/cluster-receiver_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Instrument Cluster Receiver AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating instrument cluster remote display"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-cluster-demo-receiver"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=374fee6a7817f1e1a5a7bfb7b7989553"
+
+SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-cluster-demo-receiver;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "wayland wayland-native \
+ gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
+
+inherit cmake pkgconfig aglwgt
+
+RDEPENDS_${PN} += " \
+ gstreamer1.0-plugins-base \
+ gstreamer1.0-plugins-good \
+ gstreamer1.0-plugins-bad \
+"
diff --git a/recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb b/recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb
new file mode 100644
index 000000000..10728d569
--- /dev/null
+++ b/recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Instrument Cluster Receiver AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating instrument cluster remote display"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/admin/repos/apps/agl-qt-cluster-demo-receiver"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \
+ file://app/surface.hpp;beginline=5;endline=21;md5=5351c531a191f0e3463aafcd0a6a00a3"
+
+SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/agl-qt-cluster-demo-receiver;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "wayland wayland-native \
+ qtwayland qtwayland-native \
+ qtquickcontrols2 qtwebsockets qtbase qtdeclarative \
+ gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
+
+inherit cmake_qt5 pkgconfig aglwgt
+
+RDEPENDS_${PN} += " \
+ gstreamer1.0-plugins-base \
+ gstreamer1.0-plugins-good \
+ gstreamer1.0-plugins-bad \
+"
diff --git a/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.json b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.json
new file mode 100644
index 000000000..90180dcaf
--- /dev/null
+++ b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.json
@@ -0,0 +1,40 @@
+{
+ "areas": [
+ {
+ "name": "fullscreen",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "w": 1920,
+ "h": 1080
+ }
+ },
+ {
+ "name": "normal.full",
+ "rect": {
+ "x": 640,
+ "y": 180,
+ "w": 640,
+ "h": 720
+ }
+ },
+ {
+ "name": "restriction.normal",
+ "rect": {
+ "x": 640,
+ "y": 180,
+ "w": 640,
+ "h": 720
+ }
+ },
+ {
+ "name": "on_screen",
+ "rect": {
+ "x": 640,
+ "y": 180,
+ "w": 640,
+ "h": 720
+ }
+ }
+ ]
+}
diff --git a/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json
new file mode 100644
index 000000000..5c6a5b35d
--- /dev/null
+++ b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json
@@ -0,0 +1,47 @@
+{
+ "description": "Layer mapping",
+ "mappings": [
+ {
+ "name": "BackGroundLayer",
+ "role" : "receiver",
+ "id_range_begin": 0,
+ "id_range_end": 0,
+ "comment": "Work Around: This is a special fallback layer that not stopping wayland event loop."
+ },
+ {
+ "name": "FarHomeScreen",
+ "role": "homescreen",
+ "id_range_begin": 100,
+ "id_range_end": 199,
+ "comment": "FarHomeScreen is the part of HomeScreen. The z order of this layer is lower than NearHomeScreen"
+ },
+ {
+ "name": "Apps",
+ "role": "receiver|fallback",
+ "id_range_begin": 1000,
+ "id_range_end": 2999,
+ "comment": "Application layer"
+ },
+ {
+ "name": "Popup",
+ "role": "popup*",
+ "id_range_begin": 4000,
+ "id_range_end": 4999,
+ "comment": "This layer is for popup application layer"
+ },
+ {
+ "name": "Restriction",
+ "role": "restriction",
+ "id_range_begin": 5000,
+ "id_range_end": 5999,
+ "comment": "This layer is for restriction notification on driving. This is used by restriction role"
+ },
+ {
+ "name": "OnScreen",
+ "role": "^on_screen.*",
+ "id_range_begin": 6000,
+ "id_range_end": 6999,
+ "comment": "System notification layer. For example, on_screen_low_battery_alert to notify user"
+ }
+ ]
+}
diff --git a/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/roles.db b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/roles.db
new file mode 100644
index 000000000..13702144a
--- /dev/null
+++ b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf/roles.db
@@ -0,0 +1,34 @@
+{
+ "roles":[
+ {
+ "category": "homescreen",
+ "role": "homescreen",
+ "area": "fullscreen",
+ "layer": "homescreen",
+ },
+ {
+ "category": "debug",
+ "role": "receiver | fallback",
+ "area": "normal.full",
+ "layer": "apps",
+ },
+ {
+ "category": "restriction",
+ "role": "restriction",
+ "area": "restriction.normal",
+ "layer": "restriction",
+ },
+ {
+ "category": "pop_up",
+ "role": "on_screen | on_screen_phone",
+ "area": "on_screen",
+ "layer": "on_screen",
+ },
+ {
+ "category": "system_alert",
+ "role": "system_alert",
+ "area": "on_screen",
+ "layer": "on_screen",
+ }
+ ]
+}
diff --git a/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf_1.0.bb b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf_1.0.bb
new file mode 100644
index 000000000..4be666bc4
--- /dev/null
+++ b/recipes-demo/cluster-windowmanager-conf/cluster-windowmanager-conf_1.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Cluster demo windowmanager configuration"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://layers.json \
+ file://areas.json \
+ file://roles.db \
+"
+
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d ${D}${sysconfdir}/xdg/windowmanager
+ install -m 0644 ${WORKDIR}/layers.json ${D}${sysconfdir}/xdg/windowmanager/layers.json
+ install -m 0644 ${WORKDIR}/areas.json ${D}${sysconfdir}/xdg/windowmanager/areas.json
+ install -m 0644 ${WORKDIR}/roles.db ${D}${sysconfdir}/xdg/windowmanager/roles.db
+}
+
+#FILES_${PN} += "${sysconfdir}/*"
diff --git a/recipes-demo/dashboard/dashboard_git.bb b/recipes-demo/dashboard/dashboard_git.bb
new file mode 100644
index 000000000..70a8793d2
--- /dev/null
+++ b/recipes-demo/dashboard/dashboard_git.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Dashboard for CES2017 AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating dashboard on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/dashboard"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/dashboard;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 qttools-native libqtappfw"
+
+inherit qmake5 aglwgt
+
+RDEPENDS_${PN} += " \
+ libqtappfw \
+ agl-service-signal-composer \
+"
diff --git a/recipes-demo/homescreen-demo-ci/homescreen-demo-ci_git.bb b/recipes-demo/homescreen-demo-ci/homescreen-demo-ci_git.bb
new file mode 100644
index 000000000..c3814f114
--- /dev/null
+++ b/recipes-demo/homescreen-demo-ci/homescreen-demo-ci_git.bb
@@ -0,0 +1,37 @@
+SUMMARY = "homescreen-demo-ci AGL client shell for testing in CI"
+DESCRIPTION = "homescreen-demo-ci AGL client shell for testing in CI"
+HOMEPAGE = "http://docs.automotivelinux.org"
+LICENSE = "MIT"
+SECTION = "apps"
+LIC_FILES_CHKSUM = "file://COPYING;md5=374fee6a7817f1e1a5a7bfb7b7989553"
+
+DEPENDS = "\
+ qtbase \
+ qtdeclarative \
+ qtquickcontrols2 \
+ agl-service-homescreen \
+ agl-service-weather \
+ libqtappfw \
+ libhomescreen \
+ libafb-helpers-qt \
+ wayland-native \
+ wayland \
+ qtwayland \
+ qtwayland-native \
+"
+
+inherit qmake5 systemd pkgconfig aglwgt
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/homescreen-demo-ci;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+PATH_prepend = "${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}:"
+
+OE_QMAKE_CXXFLAGS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '' , '-DQT_NO_DEBUG_OUTPUT', d)}"
+
+RDEPENDS_${PN} += " \
+ libqtappfw \
+"
diff --git a/recipes-demo/homescreen/homescreen_git.bb b/recipes-demo/homescreen/homescreen_git.bb
new file mode 100644
index 000000000..bfdf06e72
--- /dev/null
+++ b/recipes-demo/homescreen/homescreen_git.bb
@@ -0,0 +1,37 @@
+SUMMARY = "AGL Home Screen Application"
+DESCRIPTION = "AGL Home Screen Application build with recipe method"
+HOMEPAGE = "http://docs.automotivelinux.org"
+LICENSE = "Apache-2.0"
+SECTION = "apps"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+DEPENDS = "\
+ qtbase \
+ qtdeclarative \
+ qtquickcontrols2 \
+ agl-service-homescreen \
+ agl-service-weather \
+ libqtappfw \
+ libhomescreen \
+ libafb-helpers-qt \
+ wayland-native \
+ wayland \
+ qtwayland \
+ qtwayland-native \
+"
+
+inherit qmake5 systemd pkgconfig aglwgt
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/homescreen;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+PATH_prepend = "${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}:"
+
+OE_QMAKE_CXXFLAGS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '' , '-DQT_NO_DEBUG_OUTPUT', d)}"
+
+RDEPENDS_${PN} += " \
+ libqtappfw \
+"
diff --git a/recipes-demo/html5-background/html5-background_git.bb b/recipes-demo/html5-background/html5-background_git.bb
new file mode 100644
index 000000000..c0ac220f5
--- /dev/null
+++ b/recipes-demo/html5-background/html5-background_git.bb
@@ -0,0 +1,13 @@
+SUMMARY = "AGL HTML5 Background Application"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://github.com/AGL-web-applications/background.git;protocol=https;branch=master"
+SRCREV = "3b8dae349d428c0230b9885f86d421d43cda5638"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/html5-dashboard/html5-dashboard_git.bb b/recipes-demo/html5-dashboard/html5-dashboard_git.bb
new file mode 100644
index 000000000..ac874755e
--- /dev/null
+++ b/recipes-demo/html5-dashboard/html5-dashboard_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "AGL HTML5 dashboard Application"
+HOMEPAGE = "https://git.automotivelinux.org/apps/html5-dashboard/"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/html5-dashboard;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/html5-homescreen/html5-homescreen_git.bb b/recipes-demo/html5-homescreen/html5-homescreen_git.bb
new file mode 100644
index 000000000..37ca70737
--- /dev/null
+++ b/recipes-demo/html5-homescreen/html5-homescreen_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "AGL HTML5 Homescreen Application"
+HOMEPAGE = "https://git.automotivelinux.org/apps/html5-homescreen/"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/html5-homescreen;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/html5-hvac/html5-hvac_git.bb b/recipes-demo/html5-hvac/html5-hvac_git.bb
new file mode 100644
index 000000000..7fc89aed9
--- /dev/null
+++ b/recipes-demo/html5-hvac/html5-hvac_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "AGL HTML5 HVAC Application"
+HOMEPAGE = "https://git.automotivelinux.org/apps/html5-hvac/"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/html5-hvac;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/html5-launcher/html5-launcher_git.bb b/recipes-demo/html5-launcher/html5-launcher_git.bb
new file mode 100644
index 000000000..47760f676
--- /dev/null
+++ b/recipes-demo/html5-launcher/html5-launcher_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "AGL HTML5 Launcher Application"
+HOMEPAGE = "https://git.automotivelinux.org/apps/html5-launcher/"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/html5-launcher;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/html5-mediaplayer/html5-mediaplayer_git.bb b/recipes-demo/html5-mediaplayer/html5-mediaplayer_git.bb
new file mode 100644
index 000000000..a87b9bcf4
--- /dev/null
+++ b/recipes-demo/html5-mediaplayer/html5-mediaplayer_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "AGL HTML5 Mediaplayer Application"
+HOMEPAGE = "https://git.automotivelinux.org/apps/html5-mediaplayer/"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/html5-mediaplayer;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/html5-mixer/html5-mixer_git.bb b/recipes-demo/html5-mixer/html5-mixer_git.bb
new file mode 100644
index 000000000..97b1195c8
--- /dev/null
+++ b/recipes-demo/html5-mixer/html5-mixer_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "AGL HTML5 Mixer Application"
+HOMEPAGE = "https://git.automotivelinux.org/apps/html5-mixer/"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/html5-mixer;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/html5-settings/html5-settings_git.bb b/recipes-demo/html5-settings/html5-settings_git.bb
new file mode 100644
index 000000000..a167b1428
--- /dev/null
+++ b/recipes-demo/html5-settings/html5-settings_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "AGL HTML5 Settings Application"
+HOMEPAGE = "https://git.automotivelinux.org/apps/html5-settings/"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/html5-settings;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+DEPENDS = "nodejs-native"
+
+inherit aglwgt
diff --git a/recipes-demo/hvac/hvac_git.bb b/recipes-demo/hvac/hvac_git.bb
new file mode 100644
index 000000000..5e36e2d41
--- /dev/null
+++ b/recipes-demo/hvac/hvac_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = "HVAC for CES2017 AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating HVAC on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/hvac"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/hvac;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 libhomescreen \
+ qttools-native \
+ libqtappfw"
+
+RDEPENDS_${PN} = "agl-service-hvac libqtappfw"
+
+inherit qmake5 aglwgt
diff --git a/recipes-demo/inputeventmanager/inputeventmanager_git.bb b/recipes-demo/inputeventmanager/inputeventmanager_git.bb
new file mode 100644
index 000000000..16ee007f7
--- /dev/null
+++ b/recipes-demo/inputeventmanager/inputeventmanager_git.bb
@@ -0,0 +1,30 @@
+SUMMARY = "AGL InputEventManager Application"
+DESCRIPTION = "InputEventManager"
+HOMEPAGE = "http://docs.automotivelinux.org"
+LICENSE = "Apache-2.0"
+SECTION = "apps"
+S = "${WORKDIR}/git/"
+
+inherit qmake5 systemd
+DEPENDS = " qtbase "
+
+LIC_FILES_CHKSUM = "file://inputeventmanager/LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/inputeventmanager.git;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "b2f1646ac78cf61acd66c643b7638bd1b007d5a0"
+# PV needs to be modified with SRCPV to work AUTOREV correctly
+PV = "0.0+git${SRCPV}"
+
+PATH_prepend = "${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}:"
+
+do_install() {
+ install -d ${D}/usr/AGL/${PN}
+ install -m 0755 ${B}/inputeventmanager/InputEventManager ${D}/usr/AGL/${PN}/
+
+ install -d ${D}${systemd_user_unitdir}
+ install -m 0644 ${S}/inputeventmanager/conf/InputEventManager.service ${D}${systemd_user_unitdir}
+}
+
+FILES_${PN} += "/usr/AGL/${PN}/ ${systemd_user_unitdir}"
+FILES_${PN}-dbg += "/usr/AGL/${PN}/.debug"
+
diff --git a/recipes-demo/launcher/launcher_git.bb b/recipes-demo/launcher/launcher_git.bb
new file mode 100644
index 000000000..5b1de0134
--- /dev/null
+++ b/recipes-demo/launcher/launcher_git.bb
@@ -0,0 +1,28 @@
+SUMMARY = "AGL Launcher Application"
+DESCRIPTION = "AGL Launcher Application build with recipe method"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/apps/launcher"
+SECTION = "apps"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS = "\
+ qtbase \
+ qtdeclarative \
+ qtquickcontrols2 \
+ qtwebsockets \
+ qlibhomescreen \
+ wayland-native \
+ wayland \
+ qtwayland \
+ qtwayland-native \
+"
+
+inherit qmake5 systemd pkgconfig aglwgt
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/launcher;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git/"
+
+PATH_prepend = "${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}:"
diff --git a/recipes-demo/mediaplayer/mediaplayer_git.bb b/recipes-demo/mediaplayer/mediaplayer_git.bb
new file mode 100644
index 000000000..974b20275
--- /dev/null
+++ b/recipes-demo/mediaplayer/mediaplayer_git.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Media Player for CES2017 AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating Media Player on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/mediaplayer"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/mediaplayer;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 \
+ qtwebsockets \
+ libqtappfw \
+ libhomescreen \
+"
+
+inherit qmake5 aglwgt
+
+RDEPENDS_${PN} += "agl-service-mediaplayer libqtappfw"
diff --git a/recipes-demo/messaging/messaging_git.bb b/recipes-demo/messaging/messaging_git.bb
new file mode 100644
index 000000000..d2e3ff80d
--- /dev/null
+++ b/recipes-demo/messaging/messaging_git.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Messaging application for AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating messaging on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/messaging"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/messaging;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 \
+ libqtappfw \
+ libhomescreen \
+"
+
+inherit qmake5 aglwgt
+
+RDEPENDS_${PN} += "agl-service-bluetooth-map libqtappfw"
diff --git a/recipes-demo/mixer/mixer_git.bb b/recipes-demo/mixer/mixer_git.bb
new file mode 100644
index 000000000..1e4a2717c
--- /dev/null
+++ b/recipes-demo/mixer/mixer_git.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Mixer for CES2017 AGL Demonstration"
+DESCRIPTION = "AGL HMI application for control of PipeWire mixer elements"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/mixer"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/mixer;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 \
+ qtwebsockets \
+ libafb-helpers-qt \
+"
+
+RDEPENDS_${PN} += "agl-service-audiomixer"
+
+PROVIDES += "virtual/mixer"
+RPROVIDES_${PN} += "virtual/mixer"
+
+inherit cmake_qt5 aglwgt
+
+OECMAKE_CXX_FLAGS_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '' , '-DQT_NO_DEBUG_OUTPUT', d)}"
diff --git a/recipes-demo/navigation/navigation-demo_git.bb b/recipes-demo/navigation/navigation-demo_git.bb
new file mode 100644
index 000000000..7f3fcdf10
--- /dev/null
+++ b/recipes-demo/navigation/navigation-demo_git.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Navigation demo based on Qt examples"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/navigation"
+SECTION = "apps"
+
+LICENSE = "BSD-3-Clause & CC0v1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b6bbd37d85cd2b68082aa7be27853da1 \
+ file://LICENSE.for_car_png;md5=65d3616852dbf7b1a6d4b53b00626032 \
+ "
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/navigation;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+RPROVIDES_${PN} = "virtual/navigation"
+
+DEPENDS += "qtquickcontrols2 \
+ libhomescreen \
+ qtvirtualkeyboard \
+ qtlocation \
+ "
+
+RDEPENDS_${PN} = " \
+ agl-service-gps \
+ agl-service-geoclue \
+ agl-service-geofence \
+ qtlocation \
+ qtvirtualkeyboard \
+ "
+
+inherit qmake5 aglwgt
diff --git a/recipes-demo/navigation/ondemandnavi-config/naviconfig.ini b/recipes-demo/navigation/ondemandnavi-config/naviconfig.ini
new file mode 100644
index 000000000..356c6ae61
--- /dev/null
+++ b/recipes-demo/navigation/ondemandnavi-config/naviconfig.ini
@@ -0,0 +1,9 @@
+{
+ "mapAccessToken":"MAPBOX_ACCESS_TOKEN",
+ "speed":60,
+ "interval":100,
+ "latitude":36.1363,
+ "longitude":-115.151,
+ "mapStyleUrls":"mapbox://styles/v1/mapbox/streets-v11",
+ "enableOSM":true
+}
diff --git a/recipes-demo/navigation/ondemandnavi-config_1.0.bb b/recipes-demo/navigation/ondemandnavi-config_1.0.bb
new file mode 100644
index 000000000..212971f26
--- /dev/null
+++ b/recipes-demo/navigation/ondemandnavi-config_1.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "AGL Reference On Demand Navigation application config."
+DESCRIPTION = "Config file for on-demand navigation app."
+HOMEPAGE = "https://github.com/YoshitoMomiyama/aglqtnavigation.git"
+SECTION = "apps"
+LICENSE = "Proprietary"
+
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Proprietary;md5=0557f9d92cf58f2ccdd50f62f8ac0b28"
+
+SRC_URI = "file://naviconfig.ini \
+ "
+
+inherit allarch
+
+MAPBOX_ACCESS_TOKEN ?= "Please set mapbox access token"
+
+do_compile[noexec] = "1"
+
+do_install () {
+ install -D -m 644 ${WORKDIR}/naviconfig.ini ${D}${sysconfdir}/naviconfig.ini
+ sed -i -e 's/MAPBOX_ACCESS_TOKEN/${MAPBOX_ACCESS_TOKEN}/' ${D}${sysconfdir}/naviconfig.ini
+}
diff --git a/recipes-demo/navigation/ondemandnavi_git.bb b/recipes-demo/navigation/ondemandnavi_git.bb
new file mode 100644
index 000000000..c06dcae22
--- /dev/null
+++ b/recipes-demo/navigation/ondemandnavi_git.bb
@@ -0,0 +1,33 @@
+SUMMARY = "AGL Reference On Demand Navigation application."
+DESCRIPTION = "Demo AGL navigation application based on QtLocation widget."
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/ondemandnavi"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+DEPENDS += "qtquickcontrols2 \
+ qlibhomescreen \
+ qtlocation \
+ libqtappfw \
+"
+
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/ondemandnavi;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+S = "${WORKDIR}/git"
+
+inherit qmake5 aglwgt pkgconfig
+
+RDEPENDS_${PN} += "qtlocation \
+ flite \
+ libqtappfw \
+ openjtalk \
+ gstreamer1.0 \
+ ondemandnavi-config \
+"
+
+RPROVIDES_${PN} = "virtual/navigation"
+
diff --git a/recipes-demo/navigation/poiapp-api-key_1.0.bb b/recipes-demo/navigation/poiapp-api-key_1.0.bb
new file mode 100644
index 000000000..d353d7dd5
--- /dev/null
+++ b/recipes-demo/navigation/poiapp-api-key_1.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "AGL Reference POI application API key."
+DESCRIPTION = "Preload the API key for the AGL POI application."
+HOMEPAGE = "https://github.com/AGLExport/genivi-navi-yelp-client"
+SECTION = "apps"
+LICENSE = "Proprietary"
+LIC_FILES_CHKSUM="file://${COMMON_LICENSE_DIR}/Proprietary;md5=0557f9d92cf58f2ccdd50f62f8ac0b28"
+
+inherit allarch
+
+do_fetch[noexec] = "1"
+do_unpack[noexec] = "1"
+do_compile[noexec] = "1"
+
+POIAPP_CLIENT_ID ?= ""
+POIAPP_API_KEY ?= ""
+
+do_install () {
+ install -d ${D}${sysconfdir}
+ echo "${POIAPP_CLIENT_ID}" > ${D}${sysconfdir}/poikey
+ echo "${POIAPP_API_KEY}" >> ${D}${sysconfdir}/poikey
+}
diff --git a/recipes-demo/navigation/poiapp/0001-add-display-permission.patch b/recipes-demo/navigation/poiapp/0001-add-display-permission.patch
new file mode 100644
index 000000000..25a8fc313
--- /dev/null
+++ b/recipes-demo/navigation/poiapp/0001-add-display-permission.patch
@@ -0,0 +1,21 @@
+Add display permission
+
+Add display permission required to work with the running as non-root
+change for applications.
+
+Upstream-Status: pending
+
+Signed-off-by: Scott Murray <scott.murray@konsulko.com>
+
+diff --git a/config.xml.in b/config.xml.in
+index b8cfccd..bec206d 100755
+--- a/config.xml.in
++++ b/config.xml.in
+@@ -13,6 +13,7 @@
+ <feature name="urn:AGL:widget:required-permission">
+ <param name="urn:AGL:permission::public:no-htdocs" value="required" />
+ <param name="http://tizen.org/privilege/internal/dbus" value="required" />
++ <param name="urn:AGL:permission::public:display" value="required" />
+ </feature>
+ <license>GPL</license>
+ </widget>
diff --git a/recipes-demo/navigation/poiapp_git.bb b/recipes-demo/navigation/poiapp_git.bb
new file mode 100644
index 000000000..2942bf07c
--- /dev/null
+++ b/recipes-demo/navigation/poiapp_git.bb
@@ -0,0 +1,21 @@
+SUMMARY = "AGL Reference POI application."
+DESCRIPTION = "This application provides the function of destination search to AGL. It uses the API provided by AGL Reference Navigation. This application uses yelp WebAPI."
+HOMEPAGE = "https://github.com/AGLExport/genivi-navi-yelp-client"
+SECTION = "apps"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ee23c52855c222cba72583d301d2338"
+
+DEPENDS += "qtbase json-c \
+ libhomescreen \
+ libqtappfw \
+ "
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/poi-yelp;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+S = "${WORKDIR}/git"
+
+inherit cmake_qt5 pkgconfig aglwgt
+
+RDEPENDS_${PN} = "qtbase libqtappfw"
diff --git a/recipes-demo/navigation/tbtnavi_git.bb b/recipes-demo/navigation/tbtnavi_git.bb
new file mode 100644
index 000000000..d2e8e633e
--- /dev/null
+++ b/recipes-demo/navigation/tbtnavi_git.bb
@@ -0,0 +1,36 @@
+SUMMARY = "AGL Reference Navigation Cluster Streaming application"
+DESCRIPTION = "Demo AGL turn by turn cluster navigation application based on QtLocation widget."
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/admin/repos/apps/tbtnavi"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0 & ISC & BSD-3-Clause & BSL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984 \
+ file://LICENSE.mapbox-cheap-ruler-cpp;md5=761263ee6bdc98e8697d9fbc897021ba \
+ file://LICENSE.mapbox-geometry.hpp;md5=6e44f5d6aeec54f40fc84eebe3c6fc6c \
+ file://LICENSE.mapbox-variant;md5=79558839a9db3e807e4ae6f8cd100c1c \
+ file://include/mapbox/recursive_wrapper.hpp;beginline=4;endline=13;md5=cd3341aae76c0cf8345935abd20f0051 \
+"
+
+DEPENDS += "qtbase \
+ qtquickcontrols2 \
+ qlibhomescreen \
+ qtlocation \
+ libqtappfw \
+ wayland-native \
+ qtwayland-native \
+"
+
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/tbtnavi;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+S = "${WORKDIR}/git"
+
+inherit qmake5 aglwgt pkgconfig
+
+RDEPENDS_${PN} += "qtlocation \
+ ondemandnavi-config \
+ agl-service-navigation \
+ libqtappfw \
+"
diff --git a/recipes-demo/onscreenapp/onscreenapp_git.bb b/recipes-demo/onscreenapp/onscreenapp_git.bb
new file mode 100644
index 000000000..b0f63d162
--- /dev/null
+++ b/recipes-demo/onscreenapp/onscreenapp_git.bb
@@ -0,0 +1,18 @@
+SUMMARY = "onscreenapp for displaying onscreen"
+DESCRIPTION = "AGL HMI Application for displaying onscreen"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/onscreenapp"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/onscreenapp;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 libhomescreen qlibhomescreen"
+
+inherit qmake5 aglwgt
diff --git a/recipes-demo/phone/phone_git.bb b/recipes-demo/phone/phone_git.bb
new file mode 100644
index 000000000..a8781852d
--- /dev/null
+++ b/recipes-demo/phone/phone_git.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Phone for CES2017 AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating phone on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/phone"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/phone;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 \
+ libqtappfw \
+ libhomescreen \
+ gstreamer1.0 \
+"
+
+inherit qmake5 aglwgt
+
+RDEPENDS_${PN} += "agl-service-telephony agl-service-bluetooth-pbap libqtappfw"
diff --git a/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb b/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb
new file mode 100644
index 000000000..e9e8b2b37
--- /dev/null
+++ b/recipes-demo/qtquickcontrols2-agl-style/qtquickcontrols2-agl-style_git.bb
@@ -0,0 +1,28 @@
+SUMMARY = "AGL QtQuickControls2 style customizations"
+HOMEPAGE = "https://git.automotivelinux.org/gerrit/#/admin/projects/src/qtquickcontrols2-agl-style"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=815ca599c9df247a0c7f619bab123dad"
+
+DEPENDS = "qtquickcontrols2"
+
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qtquickcontrols2-agl-style;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "c02692a3c20d9aed1192137a67d5be882c60e71f"
+
+S = "${WORKDIR}/git/"
+
+inherit qmake5
+
+FILES_${PN} += "${OE_QMAKE_PATH_QML}/QtQuick/Controls.2/AGL/*"
+
+RDEPENDS_${PN} += " \
+ qtquickcontrols-qmlplugins \
+ qtquickcontrols2-qmlplugins \
+ qtsvg-plugins \
+"
+
+do_install_append_class-target() {
+ install -d ${D}/${sysconfdir}/afm/unit.env.d
+ echo "QT_QUICK_CONTROLS_STYLE=AGL" > ${D}${sysconfdir}/afm/unit.env.d/qtquickcontrols2-style
+}
diff --git a/recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb b/recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb
new file mode 100644
index 000000000..0a432db0e
--- /dev/null
+++ b/recipes-demo/qtquickcontrols2-agl/qtquickcontrols2-agl_git.bb
@@ -0,0 +1,23 @@
+SUMMARY = "AGL demo custom QtQuickControls2 widgets"
+HOMEPAGE = "https://git.automotivelinux.org/gerrit/#/admin/projects/src/qtquickcontrols2-agl"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=815ca599c9df247a0c7f619bab123dad"
+
+DEPENDS = "qtquickcontrols2"
+
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/qtquickcontrols2-agl;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "22b538aae1f69de5273f1e42a854cfab23a32b60"
+
+S = "${WORKDIR}/git/"
+
+inherit qmake5
+
+FILES_${PN} += "${OE_QMAKE_PATH_QML}/AGL/Demo/Controls/*"
+
+RDEPENDS_${PN} += " \
+ qtquickcontrols-qmlplugins \
+ qtquickcontrols2-qmlplugins \
+ qtsvg-plugins \
+"
diff --git a/recipes-demo/radio/files/presets-ALS.conf b/recipes-demo/radio/files/presets-ALS.conf
new file mode 100644
index 000000000..ff5592272
--- /dev/null
+++ b/recipes-demo/radio/files/presets-ALS.conf
@@ -0,0 +1,12 @@
+[fmPresets]
+1\frequency=76100000
+1\title=Inter FM
+2\frequency=77100000
+2\title=The Open University of Japan
+3\frequency=80000000
+3\title=TOKYO FM
+4\frequency=81300000
+4\title=J-WAVE
+5\frequency=82500000
+5\title=NHK FM Tokyo
+size=5
diff --git a/recipes-demo/radio/files/presets-CES.conf b/recipes-demo/radio/files/presets-CES.conf
new file mode 100644
index 000000000..83caeffe1
--- /dev/null
+++ b/recipes-demo/radio/files/presets-CES.conf
@@ -0,0 +1,14 @@
+[fmPresets]
+1\frequency=93100000
+1\title=93.1 The Mountain
+2\frequency=94100000
+2\title=Mix 94.1
+3\frequency=96300000
+3\title=96.3 KKLZ
+4\frequency=102700000
+4\title=102.7 THE COYOTE
+5\frequency=88900000
+5\title=News 88.9
+6\frequency=91500000
+6\title=KUNV
+size=6
diff --git a/recipes-demo/radio/files/presets-FOSDEM.conf b/recipes-demo/radio/files/presets-FOSDEM.conf
new file mode 100644
index 000000000..b88364f72
--- /dev/null
+++ b/recipes-demo/radio/files/presets-FOSDEM.conf
@@ -0,0 +1,14 @@
+[fmPresets]
+1\frequency=92100000
+1\title=92.1 Radio Campus
+2\frequency=92500000
+2\title=92.5 RTBF La Première
+3\frequency=93200000
+3\title=93.2 RTBF Classic 21
+4\frequency=98800000
+4\title=98.8 FM Brussel
+5\frequency=103700000
+5\title=103.7 NRJ
+6\frequency=104000000
+6\title=104.0 Bel RTL
+size=6
diff --git a/recipes-demo/radio/radio_git.bb b/recipes-demo/radio/radio_git.bb
new file mode 100644
index 000000000..7b0934faa
--- /dev/null
+++ b/recipes-demo/radio/radio_git.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Radio for CES2017 AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating Radio on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/radio"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0 & GPLv2+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/radio;protocol=https;branch=${AGL_BRANCH} \
+ file://presets-ALS.conf \
+ file://presets-CES.conf \
+ file://presets-FOSDEM.conf \
+"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS = "qtquickcontrols2 rtl-sdr"
+DEPENDS += "libhomescreen libqtappfw"
+
+inherit qmake5 aglwgt
+
+# ALS, CES, FOSDEM available
+AGL_RADIO_PRESETS_LOCALE ?= "CES"
+do_install_append() {
+ install -d ${D}${sysconfdir}/xdg/AGL
+ install -m 0644 ${WORKDIR}/presets-CES.conf ${D}${sysconfdir}/xdg/AGL/radio-presets-CES.conf
+ install -m 0644 ${WORKDIR}/presets-ALS.conf ${D}${sysconfdir}/xdg/AGL/radio-presets-ALS.conf
+ install -m 0644 ${WORKDIR}/presets-FOSDEM.conf ${D}${sysconfdir}/xdg/AGL/radio-presets-FOSDEM.conf
+ install -m 0644 ${WORKDIR}/presets-${AGL_RADIO_PRESETS_LOCALE}.conf ${D}${sysconfdir}/xdg/AGL/radio-presets.conf
+}
+
+FILES_${PN} += "${sysconfdir}/xdg/AGL/*"
+
+RDEPENDS_${PN} += "agl-service-radio libqtappfw"
diff --git a/recipes-demo/settings/settings_git.bb b/recipes-demo/settings/settings_git.bb
new file mode 100644
index 000000000..776c764ca
--- /dev/null
+++ b/recipes-demo/settings/settings_git.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Settings for CES2017 AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating Settings on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/settings"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/settings;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "libqtappfw qtquickcontrols2 qt-qrcode"
+DEPENDS += "libhomescreen qtvirtualkeyboard"
+
+# runtime dependencies
+RDEPENDS_${PN} += " \
+ qt-qrcode \
+ agl-service-bluetooth \
+ agl-service-network \
+ libqtappfw \
+"
+
+inherit qmake5 aglwgt
diff --git a/recipes-demo/simple-can-simulator/files/simple_can_simulator.py b/recipes-demo/simple-can-simulator/files/simple_can_simulator.py
new file mode 100755
index 000000000..83f88706e
--- /dev/null
+++ b/recipes-demo/simple-can-simulator/files/simple_can_simulator.py
@@ -0,0 +1,381 @@
+#!/usr/bin/env python3
+# Copyright (c) 2016 Alex Bencz
+# Copyright (c) 2019 Konsulko Group, smurray@konsulko.com
+# Copyright (c) 2020 The Linux Foundation, jsmoeller@linuxfoundation.org
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy of
+# this software and associated documentation files (the "Software"), to deal in
+# the Software without restriction, including without limitation the rights to
+# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+# of the Software, and to permit persons to whom the Software is furnished to do
+# so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+#
+# CANSocket from:
+#
+# https://github.com/abencz/python_socketcan/blob/master/python_socketcan_example.py
+#
+
+import sys
+import socket
+import argparse
+import struct
+import errno
+import threading
+import time
+
+class CANSocket(object):
+ FORMAT = "<IB3x8s"
+ FD_FORMAT = "<IB3x64s"
+
+ def __init__(self, interface=None):
+ self.sock = socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
+ if interface is not None:
+ self.bind(interface)
+
+ def bind(self, interface):
+ self.sock.bind((interface,))
+ self.sock.setsockopt(socket.SOL_CAN_RAW, socket.CAN_RAW_FD_FRAMES, 1)
+
+ def send(self, can_id, data, flags=0):
+ can_id = can_id | flags
+ can_pkt = struct.pack(self.FORMAT, can_id, len(data), data)
+ self.sock.send(can_pkt)
+
+ def sendfd(self, can_id, data, flags=0):
+ can_id = can_id | flags
+ datafd = data.ljust(64, b'\x00');
+ can_pkt = struct.pack(self.FD_FORMAT, can_id, len(datafd), datafd)
+ self.sock.send(can_pkt)
+
+ def recv(self, flags=0):
+ can_pkt = self.sock.recv(72)
+
+ if len(can_pkt) == 16:
+ can_id, length, data = struct.unpack(self.FORMAT, can_pkt)
+ else:
+ can_id, length, data = struct.unpack(self.FD_FORMAT, can_pkt)
+
+ can_id &= socket.CAN_EFF_MASK
+ return (can_id, data[:length])
+
+class VehicleSimulator(object):
+ DEFAULT_IDLE_RPM = 600
+
+ def __init__(self):
+ self.CRUISEMODE = False
+ self.CRUISEACTIVE = False
+ self.CRUISESPEED = 0
+ self.CRUISERPM = 0
+ self.freq = 10
+ self.vehicle_speed = 0
+ self.engine_speed = self.DEFAULT_IDLE_RPM
+ self.thread = threading.Thread(target=self.run, daemon=True)
+ self.lock = threading.Lock()
+
+ def reset(self):
+ with self.lock:
+ self.vehicle_speed = 0
+ self.engine_speed = self.DEFAULT_IDLE_RPM
+
+ def start(self):
+ self.thread.start()
+
+ def get_engine_speed(self):
+ with self.lock:
+ return int(self.engine_speed)
+
+ def get_vehicle_speed(self):
+ with self.lock:
+ return int(self.vehicle_speed)
+
+ def accelerate(self, target_speed, target_rpm, duration, bycruise = False):
+ if target_speed <= self.vehicle_speed:
+ return
+ v = (target_speed - self.vehicle_speed) / (duration * self.freq)
+ r = (target_rpm - self.engine_speed) / (duration * self.freq)
+ while self.vehicle_speed < target_speed and (not self.CRUISEACTIVE or bycruise):
+ with self.lock:
+ self.vehicle_speed += v;
+ self.engine_speed += r;
+ time.sleep(1 / self.freq)
+
+ def brake(self, target_speed, target_rpm, duration, bycruise = False):
+ if target_speed >= self.vehicle_speed:
+ return
+ v = (self.vehicle_speed - target_speed) / (duration * self.freq)
+ r = (self.engine_speed - target_rpm) / (duration * self.freq)
+ while self.vehicle_speed > target_speed and (not self.CRUISEACTIVE or bycruise):
+ with self.lock:
+ self.vehicle_speed -= v;
+ self.engine_speed -= r;
+ time.sleep(1 / self.freq)
+
+ def increase(self, bycruise = True):
+ if self.CRUISEACTIVE:
+ target_speed = self.vehicle_speed + 5
+ target_rpm = self.engine_speed * 1.1
+ self.accelerate(target_speed, target_rpm, 2, bycruise)
+
+ def decrease(self, bycruise = True):
+ if self.CRUISEACTIVE:
+ target_speed = self.vehicle_speed - 5
+ target_rpm = self.engine_speed * 0.9
+ self.brake(target_speed, target_rpm, 2, bycruise)
+
+ def resume(self, bycruise = True):
+ target_speed = self.CRUISESPEED
+ target_rpm = self.CRUISERPM
+ current_speed = self.get_vehicle_speed()
+ if target_speed > current_speed:
+ self.accelerate(target_speed, target_rpm, 2, bycruise)
+ else:
+ self.brake(target_speed, target_rpm, 2, bycruise)
+
+ def run(self):
+ while True:
+ if not self.CRUISEACTIVE:
+ self.accelerate(80, 3000, 5)
+ self.accelerate(104, 4000, 3)
+ self.brake(80, 3000, 3)
+ self.accelerate(104, 4000, 6)
+ self.brake(40, 2000, 4)
+ self.accelerate(90, 3000, 5)
+ self.brake(1, 650, 5)
+ if not self.CRUISEACTIVE:
+ self.reset()
+ time.sleep(5)
+
+class DiagnosticMessageHandler(object):
+ def __init__(self, can_sock, simulator, verbose=False):
+ self.can_sock = can_sock
+ self.simulator = simulator
+ self.verbose = verbose
+ self.thread = threading.Thread(target=self.run, daemon=True)
+
+ def start(self):
+ self.thread.start()
+
+ def run(self):
+ while True:
+ can_id, data = self.can_sock.recv()
+ #print('%03X#%s' % (can_id, ''.join(format(x, '02X') for x in data)))
+ if can_id == 0x7df:
+ # OBD-II request
+ if data[1] == 0x01 and data[2] == 0x0C:
+ # Engine speed
+ speed = self.simulator.get_engine_speed()
+ #print('engine speed = %d' % speed)
+ if speed > 16383.75:
+ speed = 16383.75
+ reply = [ 0x04, 0x41, 0x0C ]
+ reply.append(4 * speed // 256)
+ reply.append(4 * speed % 256)
+ # pad remaining bytes to make 8
+ reply.append(0)
+ reply.append(0)
+ reply.append(0)
+ self.can_sock.send(0x7e8, bytes(reply), 0)
+ elif data[1] == 0x01 and data[2] == 0x0D:
+ # Vehicle speed
+ speed = int(self.simulator.get_vehicle_speed()) % 256
+ #print('vehicle speed = %d' % speed)
+ reply = [ 0x03, 0x41, 0x0D ]
+ reply.append(speed)
+ # pad remaining bytes to make 8
+ reply.append(0)
+ reply.append(0)
+ reply.append(0)
+ reply.append(0)
+ self.can_sock.send(0x7e8, bytes(reply), 0)
+
+class SteeringWheelMessageHandler(object):
+ def __init__(self, can_sock, simulator, verbose=False):
+ self.can_sock = can_sock
+ self.simulator = simulator
+ self.verbose = verbose
+ self.thread = threading.Thread(target=self.run, daemon=True)
+ self.buttonpressed = False
+ self.buttonenabled = False
+ self.buttoncancel = False
+ self.buttondec = False
+ self.buttoninc = False
+ self.cruisemode = False
+ self.cruiseactive = False
+
+ def start(self):
+ self.thread.start()
+
+ def run(self):
+ while True:
+ can_id, data = self.can_sock.recv()
+ #print('%03X#%s' % (can_id, ''.join(format(x, '02X') for x in data)))
+ if can_id == 0x21:
+ #print('%03X#%s' % (can_id, ''.join(format(x, '02X') for x in data)))
+ if data:
+ #if data[6]:
+ #print('data6: %02X' % (data[6]))
+ if data[6] == 0x80 and not self.buttonpressed:
+ # we do skip any further lin messages
+ # two buttons at the same time won't work
+ # (aka unlikely w/o twisting fingers)
+ self.buttonpressed = True
+ self.buttonenabled = True
+ if data[6] == 0x08 and not self.buttonpressed:
+ self.buttonpressed = True
+ self.buttoncancel = True
+ if data[6] == 0x10 and not self.buttonpressed:
+ self.buttonpressed = True
+ self.buttondec = True
+ if data[6] == 0x40 and not self.buttonpressed:
+ self.buttonpressed = True
+ self.buttoninc = True
+ if data[6] == 0x00 and self.buttonpressed:
+ #now handle it as the button was released
+ if self.buttonenabled:
+ self.buttonenabled = False
+ self.cruisemode = not self.cruisemode
+ #print("set cruisemode to %s" % self.cruisemode)
+ self.simulator.CRUISEMODE = self.cruisemode
+ # disable/reset all if going off
+ if not self.cruisemode:
+ self.cruiseactive = False
+ self.simulator.CRUISEACTIVE = self.cruiseactive
+ self.simulator.CRUISESPEED = 0
+ self.simulator.CRUISERPM = 0
+ #print("set cruiseactive to %s" % self.cruiseactive)
+ if self.buttoncancel:
+ self.buttoncancel = False
+ self.simulator.CRUISESPEED = self.simulator.get_vehicle_speed()
+ self.simulator.CRUISERPM = self.simulator.get_engine_speed()
+ #print("set cruisespeed to %d" % self.simulator.CRUISESPEED )
+ #print("set cruiserpm to %d" % self.simulator.CRUISERPM )
+ self.cruiseactive = False
+ #print("set cruiseactive to %s" % self.cruiseactive )
+ self.simulator.CRUISEACTIVE = self.cruiseactive
+ if self.buttondec:
+ self.buttondec = False
+ if self.cruiseactive:
+ #print("decrease")
+ self.simulator.decrease()
+ else:
+ # set speed
+ #print("set speed")
+ self.simulator.CRUISESPEED = self.simulator.get_vehicle_speed()
+ self.simulator.CRUISERPM = self.simulator.get_engine_speed()
+ #print("set cruisespeed to %d" % self.simulator.CRUISESPEED )
+ #print("set cruiserpm to %d" % self.simulator.CRUISERPM )
+ self.cruiseactive = not self.cruiseactive
+ #print("set cruiseactive to %s" % self.cruiseactive )
+ self.simulator.CRUISEACTIVE = self.cruiseactive
+ if self.buttoninc:
+ self.buttoninc = False
+ if self.cruiseactive:
+ #print("increase")
+ self.simulator.increase()
+ else:
+ if self.simulator.CRUISESPEED > 0:
+ # resume
+ self.cruiseactive = not self.cruiseactive
+ self.simulator.CRUISEACTIVE = self.cruiseactive
+ #print("set cruiseactive to %s" % self.cruiseactive )
+ #print("resume")
+ self.simulator.resume()
+ self.buttonpressed = False
+
+
+class StatusMessageSender(object):
+ def __init__(self, can_sock, simulator, verbose=False):
+ self.can_sock = can_sock
+ self.simulator = simulator
+ self.verbose = verbose
+ self.thread = threading.Thread(target=self.run, daemon=True)
+
+ def start(self):
+ self.thread.start()
+
+ def run(self):
+ while True:
+ # Engine speed
+ speed = self.simulator.get_engine_speed()
+ if self.verbose:
+ print('engine speed = %d' % speed)
+ if speed > 16383.75:
+ speed = 16383.75
+ # Message is 1 byte unknown, 1 byte fuel level, 2 bytes engine speed (4x), fuel low @ bit 55
+ msg = [ 0, 0 ]
+ speed *= 4
+ msg.append(speed // 256)
+ msg.append(speed % 256)
+ # pad remaining bytes to make 8
+ msg.append(0)
+ msg.append(0)
+ msg.append(0)
+ msg.append(0)
+ self.can_sock.send(0x3d9, bytes(msg), 0)
+
+ # Vehicle speed
+ speed = int(self.simulator.get_vehicle_speed()) % 256
+ if self.verbose:
+ print('vehicle speed = %d' % speed)
+ # Message is 15 bits speed (64x), left aligned
+ msg = [ ]
+ # Note: extra 2x to yield required left-alignment
+ speed *= 128
+ msg.append(speed // 256)
+ msg.append(speed % 256)
+ # pad remaining bytes to make 8
+ msg.append(0)
+ msg.append(0)
+ msg.append(0)
+ msg.append(0)
+ msg.append(0)
+ msg.append(0)
+ self.can_sock.send(0x3e9, bytes(msg), 0)
+
+ # Sleep 100 ms
+ time.sleep(0.1)
+
+def main():
+ parser = argparse.ArgumentParser(description='Simple CAN vehicle simulator.')
+ parser.add_argument('interface', type=str, help='interface name (e.g. vcan0)')
+ parser.add_argument('-v', '--verbose', help='increase output verbosity', action='store_true')
+ args = parser.parse_args()
+
+ try:
+ can_sock = CANSocket(args.interface)
+ diag_can_sock = CANSocket(args.interface)
+ steeringwheel_can_sock = CANSocket(args.interface)
+ except OSError as e:
+ sys.stderr.write('Could not listen on interface {0}\n'.format(args.interface))
+ sys.exit(e.errno)
+
+ print('Using {0}'.format(args.interface))
+ sim = VehicleSimulator()
+ status_sender = StatusMessageSender(can_sock, sim, args.verbose)
+ diag_handler = DiagnosticMessageHandler(diag_can_sock, sim, args.verbose)
+ steeringwheel_handler = SteeringWheelMessageHandler(steeringwheel_can_sock, sim, args.verbose)
+ sim.start()
+ status_sender.start()
+ diag_handler.start()
+ steeringwheel_handler.start()
+ try:
+ while True:
+ time.sleep(60)
+ except (KeyboardInterrupt, SystemExit):
+ #sim.stop()
+ sys.exit(0)
+
+if __name__ == '__main__':
+ main()
diff --git a/recipes-demo/simple-can-simulator/simple-can-simulator.bb b/recipes-demo/simple-can-simulator/simple-can-simulator.bb
new file mode 100644
index 000000000..bca448763
--- /dev/null
+++ b/recipes-demo/simple-can-simulator/simple-can-simulator.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Simulator that generates CAN messages of a driving car"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+
+SRC_URI = "file://simple_can_simulator.py"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/simple_can_simulator.py ${D}${sbindir}
+}
+
+RDEPENDS_${PN} = "python3"
diff --git a/recipes-demo/taskmanager/taskmanager_git.bb b/recipes-demo/taskmanager/taskmanager_git.bb
new file mode 100644
index 000000000..68965eb55
--- /dev/null
+++ b/recipes-demo/taskmanager/taskmanager_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Task Manager for AGL Demonstration"
+DESCRIPTION = "AGL HMI Application for demonstrating task visualisation and management on AGL Distribution"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/taskmanager"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/taskmanager;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "qtquickcontrols2 \
+ qtwebsockets \
+ qtcharts \
+ libqtappfw \
+ libhomescreen \
+"
+
+inherit qmake5 aglwgt
+
+RDEPENDS_${PN} += "agl-service-taskmanager libqtappfw"
diff --git a/recipes-demo/telematics-recorder/telematics-recorder_git.bb b/recipes-demo/telematics-recorder/telematics-recorder_git.bb
new file mode 100644
index 000000000..1636cb000
--- /dev/null
+++ b/recipes-demo/telematics-recorder/telematics-recorder_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Telematics Recorder AGL Demonstration"
+DESCRIPTION = "AGL Application for demonstrating telematics recorder functionality"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-telematics-demo-recorder"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-telematics-demo-recorder;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AUTOREV}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS = "glib-2.0 mosquitto"
+
+inherit cmake aglwgt
+
+RDEPENDS_${PN} += " \
+ agl-service-can-low-level \
+ agl-service-gps \
+ agl-service-network \
+ libmosquitto1 \
+"
diff --git a/recipes-demo/waltham-receiver/waltham-receiver_git.bb b/recipes-demo/waltham-receiver/waltham-receiver_git.bb
new file mode 100644
index 000000000..d793b0669
--- /dev/null
+++ b/recipes-demo/waltham-receiver/waltham-receiver_git.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Waltham-receiver"
+DESCRIPTION = "Waltham-receiver is a demo application for testing out Waltham"
+HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/apps/waltham-receiver.git"
+SECTION = "apps"
+
+LICENSE = "Apache-2.0 & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=374fee6a7817f1e1a5a7bfb7b7989553"
+
+SRC_URI = "gitsm://gerrit.automotivelinux.org/gerrit/apps/waltham-receiver.git;protocol=https;branch=${AGL_BRANCH}"
+SRCREV = "${AGL_APP_REVISION}"
+
+PV = "1.0+git${SRCPV}"
+S = "${WORKDIR}/git"
+
+# build-time dependencies
+DEPENDS += "waltham wayland wayland-native \
+ gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
+
+inherit cmake pkgconfig aglwgt
+
+RDEPENDS_${PN} += " \
+ gstreamer1.0-plugins-base \
+ gstreamer1.0-plugins-good \
+ gstreamer1.0-plugins-bad \
+ waltham \
+"