aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2018-12-07 16:46:37 -0500
committerScott Murray <scott.murray@konsulko.com>2018-12-10 13:50:24 -0500
commit251fb524e791d40cb7a7e1581649e63da9da3b08 (patch)
tree1c39d533cb1a7318b83146a0e43e563654f0f6fb
parent7ea4459ecd58198e4932db3f41fadecf0024325c (diff)
Define instrument cluster demo platform. This layer is similar to meta-agl-demo, except it defines a small platform for the instrument cluster demo, based on the agl-profile-cluster-qt5 profile. There is a "agl-cluster-demo" feature defined to enable building the platform. At the moment, only qemux86-64 and Minnowboard turbot versions have been built and tested. Other architectures should be feasible, but the agl-cluster-demo-receiver application needs some further development to support non-Intel platforms, as currently it is using the vaapisink gstreamer plug-in. Change-Id: I217608a1ecc9678d5d55a95c65f3ab6f10d5b54f Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-rw-r--r--.gitignore1
-rw-r--r--.gitreview5
-rw-r--r--README.md97
-rw-r--r--conf/conf-notes.txt4
-rw-r--r--conf/include/agl-cluster-demo.inc5
-rw-r--r--conf/layer.conf10
-rw-r--r--recipes-config/agl-login-manager/agl-login-manager_%.bbappend1
-rw-r--r--recipes-connectivity/cluster-connman-conf/cluster-connman-conf/cluster.config3
-rw-r--r--recipes-connectivity/cluster-connman-conf/cluster-connman-conf_1.0.bb15
-rw-r--r--recipes-demo-hmi/cluster-dashboard/cluster-dashboard_git.bb29
-rw-r--r--recipes-demo-hmi/cluster-receiver/cluster-receiver_git.bb26
-rw-r--r--recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.db40
-rw-r--r--recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json41
-rw-r--r--recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/roles.db34
-rw-r--r--recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf_1.0.bb19
-rw-r--r--recipes-graphics/wayland/weston-ini-conf.bbappend23
-rw-r--r--recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg4
-rw-r--r--recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg3
-rw-r--r--recipes-platform/images/agl-cluster-demo-platform-crosssdk.bb33
-rw-r--r--recipes-platform/images/agl-cluster-demo-platform.bb14
-rw-r--r--recipes-platform/images/agl-cluster-demo-platform.inc3
-rw-r--r--recipes-platform/packagegroups/packagegroup-agl-cluster-demo-platform.bb53
-rw-r--r--templates/feature/agl-cluster-demo/50_bblayers.conf.inc5
-rw-r--r--templates/feature/agl-cluster-demo/50_local.conf.inc2
-rw-r--r--templates/feature/agl-cluster-demo/included.dep1
25 files changed, 471 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b25c15b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*~
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..dcfeb9d
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,5 @@
+[gerrit]
+host=gerrit.automotivelinux.org
+port=29418
+project=AGL/meta-agl-cluster-demo
+defaultbranch=master
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ea133e3
--- /dev/null
+++ b/README.md
@@ -0,0 +1,97 @@
+**README.md for the 'meta-agl-cluster-demo' layer.**
+
+**See README-AGL.md in meta-agl for general information about Automotive Grade Linux.**
+
+
+meta-agl-cluster-demo, the layer for the Instrument Cluster DEMO platform of Automotive Grade Linux
+=================================================================================
+
+The layer 'meta-agl-cluster-demo' provides a reference/demo platform and
+applications for the AGL Distribution.
+
+AGL is creating an automotive specific Linux distribution (AGL UCB) that unifies
+the software that has been written in a number of places already,
+such as GENIVI and Tizen IVI.
+
+The AGL community appreciates feedback, ideas, suggestion, bugs and
+documentation just as much as code. Please join the irc conversation
+at the #automotive channel on irc.freenode.net and our mailing list.
+
+For infomation for subscribing to the mailing list
+ [automotive-discussions](http://lists.linuxfoundation.org/mailman/listinfo/automotive-discussions)
+For information about AGL Distribution, see the
+ [AGL Distribution](https://wiki.automotivelinux.org/agl-distro)
+For information abount Getting started with AGL
+ [here](https://wiki.automotivelinux.org/start/getting-started)
+For information about contributing to the AGL Distro
+ [here](https://wiki.automotivelinux.org/agl-distro/contributing)
+
+
+Quick start guide
+-----------------
+See README-AGL.md in meta-agl
+
+
+Layer Dependencies
+------------------
+
+* Base dependencies [agl-cluster-demo]:
+
+URI: git://git.yoctoproject.org/poky
+
+URI: https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl
+
+URI: https://gerrit.automotivelinux.org/gerrit/AGL/meta-agl-devel
+
+URI: git://git.openembedded.org/meta-openembedded
+
+Specifically out of meta-openembedded these sub-layers are used:
+
+ - meta-openembedded/meta-oe
+ - meta-openembedded/meta-multimedia
+ - meta-openembedded/meta-efl
+ - meta-openembedded/meta-networking
+ - meta-openembedded/meta-python
+ - meta-openembedded/meta-ruby
+
+URI: https://github.com/meta-qt5/meta-qt5.git
+
+* Hardware dependencies:
+
+The Minnowboard Turbot board depends in addition on:
+
+URI: http://git.yoctoproject.org/meta-intel
+
+
+Packagegroups
+-------------
+
+AGL Cluster Demo Platform's package group design:
+
+* packagegroup-agl-cluster-demo-platform
+
+This is for generating the image 'agl-cluster-demo-platform' which is a full
+image for the Instrument Cluster profile of the AGL distro.
+
+Following meta-agl's design of packagegroups, ``agl-cluster-demo-platform.bb``
+contains only ``packagegroup-agl-cluster-demo-platform``.
+
+``packagegroup-agl-cluster-demo-platform`` has one packagegroup in it,
+``packagegroup-agl-profile-cluster-qt5``, and the packages required for the DEMO
+applications.
+
+Supported Machines
+------------------
+
+At the moment only the Minnowboard Turbot has been tested, but the other
+AGL supported platforms (see `README-AGL.md` in meta-agl layer), should be
+possible to make work by modifying the gstreamer pipeline used in the
+agl-cluster-demo-receiver application to replace the use of vaapisink with
+an alternative that works for the platform.
+
+Supported Target of bitbake
+------------------------
+
+* `agl-cluster-demo-platform` is the full image of the AGL Instrument Cluster
+Demo Platform with all applications
+
diff --git a/conf/conf-notes.txt b/conf/conf-notes.txt
new file mode 100644
index 0000000..2060128
--- /dev/null
+++ b/conf/conf-notes.txt
@@ -0,0 +1,4 @@
+Common targets are:
+ agl-cluster-demo-platform
+ agl-cluster-demo-platform-crosssdk
+ agl-cluster-demo-platform-qa
diff --git a/conf/include/agl-cluster-demo.inc b/conf/include/agl-cluster-demo.inc
new file mode 100644
index 0000000..a8847e0
--- /dev/null
+++ b/conf/include/agl-cluster-demo.inc
@@ -0,0 +1,5 @@
+IMAGE_FEATURES =+ "debug-tweaks"
+
+#DISTRO_FEATURES_append = " "
+
+#IMAGE_INSTALL_append = " "
diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644
index 0000000..3e98b51
--- /dev/null
+++ b/conf/layer.conf
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH =. "${LAYERDIR}:"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "agl-cluster-demo"
+BBFILE_PATTERN_agl-cluster-demo = "^${LAYERDIR}/"
+BBFILE_PRIORITY_agl-cluster-demo = "7"
diff --git a/recipes-config/agl-login-manager/agl-login-manager_%.bbappend b/recipes-config/agl-login-manager/agl-login-manager_%.bbappend
new file mode 100644
index 0000000..7b7cd35
--- /dev/null
+++ b/recipes-config/agl-login-manager/agl-login-manager_%.bbappend
@@ -0,0 +1 @@
+LOGIN_USER ?= "0"
diff --git a/recipes-connectivity/cluster-connman-conf/cluster-connman-conf/cluster.config b/recipes-connectivity/cluster-connman-conf/cluster-connman-conf/cluster.config
new file mode 100644
index 0000000..6ce2a76
--- /dev/null
+++ b/recipes-connectivity/cluster-connman-conf/cluster-connman-conf/cluster.config
@@ -0,0 +1,3 @@
+[service_cluster_ethernet]
+Type=ethernet
+IPv4=@CLUSTER_DEMO_SERVER_IP@/255.255.255.0
diff --git a/recipes-connectivity/cluster-connman-conf/cluster-connman-conf_1.0.bb b/recipes-connectivity/cluster-connman-conf/cluster-connman-conf_1.0.bb
new file mode 100644
index 0000000..78528aa
--- /dev/null
+++ b/recipes-connectivity/cluster-connman-conf/cluster-connman-conf_1.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Cluster demo connman configuration"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://cluster.config"
+
+CLUSTER_DEMO_SERVER_IP ?= "192.168.20.99"
+
+do_install() {
+ install -d ${D}${localstatedir}/lib/connman
+ sed "s/@CLUSTER_DEMO_SERVER_IP@/${CLUSTER_DEMO_SERVER_IP}/g" \
+ ${WORKDIR}/cluster.config > ${D}${localstatedir}/lib/connman/cluster.config
+}
+
+FILES_${PN} += "${localstatedir}/*"
diff --git a/recipes-demo-hmi/cluster-dashboard/cluster-dashboard_git.bb b/recipes-demo-hmi/cluster-dashboard/cluster-dashboard_git.bb
new file mode 100644
index 0000000..74974eb
--- /dev/null
+++ b/recipes-demo-hmi/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 qlibwindowmanager"
+
+inherit pkgconfig cmake_qt5 aglwgt
+
+RDEPENDS_${PN} += " \
+ qlibwindowmanager \
+ qtquickcontrols \
+ qtquickcontrols-qmlplugins \
+ qtquickcontrols2 \
+ qtquickcontrols2-qmlplugins \
+ qtwebsockets \
+ qtwebsockets-qmlplugins \
+"
diff --git a/recipes-demo-hmi/cluster-receiver/cluster-receiver_git.bb b/recipes-demo-hmi/cluster-receiver/cluster-receiver_git.bb
new file mode 100644
index 0000000..92f9221
--- /dev/null
+++ b/recipes-demo-hmi/cluster-receiver/cluster-receiver_git.bb
@@ -0,0 +1,26 @@
+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=ae6497158920d9524cf208c09cc4c984 \
+ file://app/surface.hpp;beginline=5;endline=21;md5=5351c531a191f0e3463aafcd0a6a00a3"
+
+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-ivi-extension libwindowmanager gstreamer1.0"
+
+inherit cmake aglwgt
+
+RDEPENDS_${PN} += " \
+ gstreamer1.0-plugins-base \
+ gstreamer1.0-plugins-good \
+ gstreamer1.0-plugins-bad \
+ gstreamer1.0-vaapi \
+"
diff --git a/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.db b/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.db
new file mode 100644
index 0000000..00322ac
--- /dev/null
+++ b/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/areas.db
@@ -0,0 +1,40 @@
+{
+ "areas": [
+ {
+ "name": "fullscreen",
+ "rect": {
+ "x": 0,
+ "y": 0,
+ "w": 1920,
+ "h": 1080
+ }
+ },
+ {
+ "name": "normal.full",
+ "rect": {
+ "x": 672,
+ "y": 264,
+ "w": 576,
+ "h": 552
+ }
+ },
+ {
+ "name": "restriction.normal",
+ "rect": {
+ "x": 672,
+ "y": 264,
+ "w": 576,
+ "h": 552
+ }
+ },
+ {
+ "name": "on_screen",
+ "rect": {
+ "x": 672,
+ "y": 264,
+ "w": 576,
+ "h": 552
+ }
+ }
+ ]
+}
diff --git a/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json b/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json
new file mode 100644
index 0000000..1fd9d18
--- /dev/null
+++ b/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/layers.json
@@ -0,0 +1,41 @@
+{
+ "comment": "Surface ID to Layer ID mapping",
+
+ "main_surface": {
+ "surface_role": "HomeScreen",
+ "comment": "This surface should never be made invisible (The HomeScreen)"
+ },
+
+ "mappings": [
+ {
+ "role": "BackGroundLayer",
+ "name": "BackGroundLayer",
+ "layer_id": 999,
+ "comment": "Single BackGround layer map for the map, radio, music and video"
+ },
+ {
+ "role": "homescreen",
+ "name": "FarHomeScreen",
+ "layer_id": 1000,
+ "comment": "FarHomeScreen is the part of HomeScreen. The z order of this layer is lower than NearHomeScreen"
+ },
+ {
+ "role": "receiver|fallback",
+ "name": "Apps",
+ "layer_id": 1001,
+ "comment": "Range of IDs that will always be placed on layer 1001"
+ },
+ {
+ "role": "restriction",
+ "name": "Restriction",
+ "layer_id": 1002,
+ "comment": "This layer is for restriction notification. This is used by restriction role"
+ },
+ {
+ "role": "^on_screen.*",
+ "name": "OnScreen",
+ "layer_id": 9999,
+ "comment": "Range of IDs that will always be placed on the OnScreen layer, that gets a very high 'dummy' id of 9999"
+ }
+ ]
+}
diff --git a/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/roles.db b/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf/roles.db
new file mode 100644
index 0000000..1370214
--- /dev/null
+++ b/recipes-demo-hmi/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-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf_1.0.bb b/recipes-demo-hmi/cluster-windowmanager-conf/cluster-windowmanager-conf_1.0.bb
new file mode 100644
index 0000000..0cef85c
--- /dev/null
+++ b/recipes-demo-hmi/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.db \
+ 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.db ${D}${sysconfdir}/xdg/windowmanager/areas.db
+ install -m 0644 ${WORKDIR}/roles.db ${D}${sysconfdir}/xdg/windowmanager/roles.db
+}
+
+#FILES_${PN} += "${sysconfdir}/*"
diff --git a/recipes-graphics/wayland/weston-ini-conf.bbappend b/recipes-graphics/wayland/weston-ini-conf.bbappend
new file mode 100644
index 0000000..6879975
--- /dev/null
+++ b/recipes-graphics/wayland/weston-ini-conf.bbappend
@@ -0,0 +1,23 @@
+# Remove all rotated portrait mode config fragments, and add our own
+# instead, as the cluster demo display is landscape orientation.
+# NOTES:
+# (1) Cannot over-ride virtual.cfg simply by having a copy here and
+# getting it picked up via our FILESEXTRAPATHS_prepend due to AGL's
+# layer priority scheme (this layer is lower priority than
+# meta-agl-bsp), so need to remove it and add a replacement.
+# (2) The HDMI-A-1 config here uses a transform of 180 degrees to work
+# with the monitor setup in the AGL demo hardware platform. The
+# virtual-landscape.cfg is left unrotated, since it's used with
+# QEMU on the desktop.
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
+
+SRC_URI_remove = " \
+ file://hdmi-a-1-270.cfg \
+ file://hdmi-a-1-90.cfg \
+ file://virtual.cfg \
+"
+SRC_URI += " \
+ file://hdmi-a-1-180.cfg \
+ file://virtual-landscape.cfg \
+"
diff --git a/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg b/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg
new file mode 100644
index 0000000..7648c77
--- /dev/null
+++ b/recipes-graphics/wayland/weston-ini-conf/hdmi-a-1-180.cfg
@@ -0,0 +1,4 @@
+# A display is connected to HDMI-A-1
+[output]
+name=HDMI-A-1
+transform=180
diff --git a/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg b/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg
new file mode 100644
index 0000000..d692536
--- /dev/null
+++ b/recipes-graphics/wayland/weston-ini-conf/virtual-landscape.cfg
@@ -0,0 +1,3 @@
+[output]
+name=Virtual-1
+mode=1920x1080
diff --git a/recipes-platform/images/agl-cluster-demo-platform-crosssdk.bb b/recipes-platform/images/agl-cluster-demo-platform-crosssdk.bb
new file mode 100644
index 0000000..fd99a77
--- /dev/null
+++ b/recipes-platform/images/agl-cluster-demo-platform-crosssdk.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Cross SDK of AGL Distribution for Cluster profile Demo"
+
+DESCRIPTION = "SDK image for AGL Distribution for Cluster profile Demo. \
+It includes the full meta-toolchain, plus developement headers and libraries \
+to form a standalone cross SDK."
+
+require agl-cluster-demo-platform.bb
+
+LICENSE = "MIT"
+
+IMAGE_FEATURES_append = " dev-pkgs"
+IMAGE_INSTALL_append = " kernel-dev kernel-devsrc"
+
+inherit populate_sdk populate_sdk_qt5
+
+# Task do_populate_sdk and do_rootfs can't be exec simultaneously.
+# Both exec "createrepo" on the same directory, and so one of them
+# can failed (randomly).
+addtask do_populate_sdk after do_rootfs
+
+# Add wayland-scanner to SDK (SPEC-945)
+# Use TOOLCHAIN_HOST_TASK instead of adding to the packagegroup
+# wayland-scanner is in nativesdk-wayland-dev !
+# option: add also nativesdk-qtwayland-tools
+TOOLCHAIN_HOST_TASK_append = " nativesdk-wayland nativesdk-wayland-dev"
+
+TOOLCHAIN_HOST_TASK_append = " nativesdk-perl-modules "
+
+# Add libvcard to the SDK to support libqtappfw
+TOOLCHAIN_TARGET_TASK += " \
+ libvcard-dev \
+ libvcard-staticdev \
+ "
diff --git a/recipes-platform/images/agl-cluster-demo-platform.bb b/recipes-platform/images/agl-cluster-demo-platform.bb
new file mode 100644
index 0000000..52d737b
--- /dev/null
+++ b/recipes-platform/images/agl-cluster-demo-platform.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "AGL Cluster Demo Platform image currently contains a simple cluster interface."
+
+require agl-cluster-demo-platform.inc
+
+LICENSE = "MIT"
+
+IMAGE_FEATURES_append = " \
+ "
+
+# add packages for cluster demo platform (include demo apps) here
+IMAGE_INSTALL_append = " \
+ packagegroup-agl-cluster-demo-platform \
+ "
+
diff --git a/recipes-platform/images/agl-cluster-demo-platform.inc b/recipes-platform/images/agl-cluster-demo-platform.inc
new file mode 100644
index 0000000..8745ca9
--- /dev/null
+++ b/recipes-platform/images/agl-cluster-demo-platform.inc
@@ -0,0 +1,3 @@
+# Base image
+require recipes-platform/images/agl-image-cluster-qt5.inc
+
diff --git a/recipes-platform/packagegroups/packagegroup-agl-cluster-demo-platform.bb b/recipes-platform/packagegroups/packagegroup-agl-cluster-demo-platform.bb
new file mode 100644
index 0000000..d639495
--- /dev/null
+++ b/recipes-platform/packagegroups/packagegroup-agl-cluster-demo-platform.bb
@@ -0,0 +1,53 @@
+SUMMARY = "The software for demo platform of AGL cluster profile"
+DESCRIPTION = "A set of packages belong to AGL Cluster Demo Platform"
+
+LICENSE = "MIT"
+
+inherit packagegroup
+
+PACKAGES = "\
+ packagegroup-agl-cluster-demo-platform \
+ "
+
+ALLOW_EMPTY_${PN} = "1"
+
+RDEPENDS_${PN} += "\
+ packagegroup-agl-profile-cluster-qt5 \
+ "
+
+# fonts
+TTF_FONTS = " \
+ ttf-bitstream-vera \
+ ttf-dejavu-sans \
+ ttf-dejavu-sans-mono \
+ ttf-dejavu-serif \
+ source-han-sans-cn-fonts \
+ source-han-sans-jp-fonts \
+ source-han-sans-tw-fonts \
+ "
+
+AGL_APPS = " \
+ cluster-dashboard \
+ cluster-receiver \
+ "
+
+AGL_APIS = " \
+ agl-service-windowmanager \
+ "
+
+RDEPENDS_${PN}_append = " \
+ wayland-ivi-extension \
+ cluster-windowmanager-conf \
+ hmi-debug \
+ libva-utils \
+ linux-firmware-ralink \
+ connman \
+ connman-client \
+ connman-tools \
+ cluster-connman-conf \
+ iproute2 \
+ dhcp-client \
+ ${TTF_FONTS} \
+ ${AGL_APPS} \
+ ${AGL_APIS} \
+"
diff --git a/templates/feature/agl-cluster-demo/50_bblayers.conf.inc b/templates/feature/agl-cluster-demo/50_bblayers.conf.inc
new file mode 100644
index 0000000..d8357f2
--- /dev/null
+++ b/templates/feature/agl-cluster-demo/50_bblayers.conf.inc
@@ -0,0 +1,5 @@
+# This layer contains the WIP cluster feature/demo code only
+#-----------------------------------------------------------
+BBLAYERS =+ " \
+ ${METADIR}/meta-agl-cluster-demo \
+"
diff --git a/templates/feature/agl-cluster-demo/50_local.conf.inc b/templates/feature/agl-cluster-demo/50_local.conf.inc
new file mode 100644
index 0000000..90b0380
--- /dev/null
+++ b/templates/feature/agl-cluster-demo/50_local.conf.inc
@@ -0,0 +1,2 @@
+#see meta-agl-cluster-demo/conf/include/agl-cluster-demo.inc
+require conf/include/agl-cluster-demo.inc
diff --git a/templates/feature/agl-cluster-demo/included.dep b/templates/feature/agl-cluster-demo/included.dep
new file mode 100644
index 0000000..1724b64
--- /dev/null
+++ b/templates/feature/agl-cluster-demo/included.dep
@@ -0,0 +1 @@
+agl-profile-cluster-qt5 agl-hmi-framework