Restore cluster and telematics demo images 49/27249/2
authorScott Murray <scott.murray@konsulko.com>
Mon, 7 Mar 2022 21:21:05 +0000 (16:21 -0500)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tue, 8 Mar 2022 14:49:45 +0000 (14:49 +0000)
Changes:
- Restore the image recipes for the agl-cluster-demo-platform and
  agl-telematics-demo-platform images, with updates to them and
  their associated packagegroups for the app framework removal.
- Restore updated recipes required for the above, including:
  * cluster-dashboard
  * cluster-receiver
  * qt-cluster-receiver
  * tbtnavi
- Simple systemd unit files have been added for the cluster
  applications and are installed as user session units.  Starting
  of cluster-dashboard (the XDG version) and cluster-receiver in
  the AGL user session is enabled by default.
- The recipes to install the dedicated network configuration for
  the cluster demo have been restored so that the
  agl-cluster-demo-support and agl-demo-preload features will do
  what is expected again.

Known outstanding issues:
- The previous signal-composer binding support has been removed
  from cluster-dashboard, so related functionality (i.e. driving
  it from CAN) is disabled until replacement is worked out.
- While tbtnavi builds, the previous use of the navigation binding
  is stubbed out in libqtappfw, so it will not receive location
  and route information from ondemandnavi.
- Nothing has been added yet to start tbtnavi in the AGL user
  session, the plan is to do so with a systemd user unit once a
  new mechanism for controlling it from ondemandnavi has been
  implemented.
- The telematics-recorder application has not yet been updated
  to replace its signal-composer, gps, and network binding use.

The intent is to address these issues in the 13.0.x point releases.

Bug-AGL: SPEC-4283

Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: I520c23775b21504cb7dd92538319cc5bf826ff64

16 files changed:
recipes-config/cluster-demo-network-config/cluster-demo-network-config_1.0.bb [new file with mode: 0644]
recipes-config/cluster-demo-network-config/files/cluster-demo-network-conf.sh [new file with mode: 0644]
recipes-config/cluster-demo-network-config/files/cluster-demo-network-conf@.service [new file with mode: 0644]
recipes-demo/cluster-dashboard/cluster-dashboard/cluster-dashboard.service [new file with mode: 0644]
recipes-demo/cluster-dashboard/cluster-dashboard_git.bb [new file with mode: 0644]
recipes-demo/cluster-receiver/cluster-receiver/cluster-receiver.service [new file with mode: 0644]
recipes-demo/cluster-receiver/cluster-receiver_git.bb [new file with mode: 0644]
recipes-demo/cluster-receiver/qt-cluster-receiver/qt-cluster-receiver.service [new file with mode: 0644]
recipes-demo/cluster-receiver/qt-cluster-receiver_git.bb [new file with mode: 0644]
recipes-demo/navigation/tbtnavi_git.bb [new file with mode: 0644]
recipes-platform/images/agl-cluster-demo-platform.bb [new file with mode: 0644]
recipes-platform/images/agl-telematics-demo-platform.bb [new file with mode: 0644]
recipes-platform/packagegroups/packagegroup-agl-cluster-demo-platform.bb [new file with mode: 0644]
recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb
recipes-platform/packagegroups/packagegroup-agl-profile-cluster-qt5.bb
recipes-platform/packagegroups/packagegroup-agl-telematics-demo-platform.bb

diff --git a/recipes-config/cluster-demo-network-config/cluster-demo-network-config_1.0.bb b/recipes-config/cluster-demo-network-config/cluster-demo-network-config_1.0.bb
new file mode 100644 (file)
index 0000000..8d73728
--- /dev/null
@@ -0,0 +1,33 @@
+SUMMARY     = "Setting files for cluster network for the AGL Demonstrator"
+DESCRIPTION = "Setting files for cluster network for the AGL Demonstrator"
+LICENSE     = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit systemd allarch
+
+SRC_URI = "file://cluster-demo-network-conf@.service \
+           file://cluster-demo-network-conf.sh \
+"
+
+# Network device for dedicated connection to cluster
+AGL_CLUSTER_NET_DEVICE ?= "eth1"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+    # Install helper script
+    install -d ${D}${sbindir}
+    install -m 0755 ${WORKDIR}/cluster-demo-network-conf.sh ${D}${sbindir}/
+
+    # Install service unit
+    install -d ${D}${systemd_system_unitdir}
+    install -m 0644 ${WORKDIR}/cluster-demo-network-conf@.service ${D}${systemd_system_unitdir}/
+
+    # Add symlink to network.target.wants
+    install -d ${D}${sysconfdir}/systemd/system/network.target.wants
+    ln -s ${systemd_system_unitdir}/cluster-demo-network-conf@.service \
+        ${D}${sysconfdir}/systemd/system/network.target.wants/cluster-demo-network-conf@${AGL_CLUSTER_NET_DEVICE}.service
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
diff --git a/recipes-config/cluster-demo-network-config/files/cluster-demo-network-conf.sh b/recipes-config/cluster-demo-network-config/files/cluster-demo-network-conf.sh
new file mode 100644 (file)
index 0000000..3f53817
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+CONNMAN_CONF=/etc/connman/main.conf
+CLUSTER_ADDRESS=192.168.20.93
+
+if [ -z "$1" ]; then
+    echo "Usage: $0 <network device>"
+    exit 1
+fi
+
+# Need to blacklist given device with connman if it isn't already,
+# otherwise connman will over-ride address configuration.
+if ! grep '^NetworkInterfaceBlacklist=' ${CONNMAN_CONF} | grep -q $1; then
+    sed -i "s/^\(NetworkInterfaceBlacklist=.*\)/\1,$1/" ${CONNMAN_CONF}
+fi
+
+/sbin/ifconfig $1 ${CLUSTER_ADDRESS}
diff --git a/recipes-config/cluster-demo-network-config/files/cluster-demo-network-conf@.service b/recipes-config/cluster-demo-network-config/files/cluster-demo-network-conf@.service
new file mode 100644 (file)
index 0000000..5fc29b7
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=Configure dedicated link for cluster demo network
+After=sys-subsystem-net-devices-%i.device
+Requires=sys-subsystem-net-devices-%i.device
+Before=network.target
+
+[Service]
+ExecStart=/usr/sbin/cluster-demo-network-conf.sh %i
+Type=oneshot
+
+[Install]
+WantedBy=network.target
diff --git a/recipes-demo/cluster-dashboard/cluster-dashboard/cluster-dashboard.service b/recipes-demo/cluster-dashboard/cluster-dashboard/cluster-dashboard.service
new file mode 100644 (file)
index 0000000..d96c738
--- /dev/null
@@ -0,0 +1,20 @@
+[Unit]
+Description=cluster-dashboard
+
+Requires=agl-compositor.service
+After=agl-compositor.service
+
+# Since we are part of the agl session, make sure we are started before
+# it is complete.
+Before=agl-session.target
+
+[Service]
+ExecStart=/usr/bin/cluster-dashboard
+
+Restart=always
+
+StandardOutput=journal
+StandardError=journal
+
+[Install]
+WantedBy=agl-session.target
diff --git a/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb b/recipes-demo/cluster-dashboard/cluster-dashboard_git.bb
new file mode 100644 (file)
index 0000000..2f5bbec
--- /dev/null
@@ -0,0 +1,46 @@
+SUMMARY     = "Instrument Cluster Dashboard application"
+DESCRIPTION = "AGL demonstration instrument cluster dashboard application"
+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"
+
+DEPENDS = " \
+    qtquickcontrols2 \
+    libqtappfw \
+    glib-2.0 \
+    wayland wayland-native \
+    qtwayland qtwayland-native \
+"
+
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-cluster-demo-dashboard;protocol=https;branch=${AGL_BRANCH} \
+           file://cluster-dashboard.service \
+"
+SRCREV  = "${AGL_APP_REVISION}"
+
+S  = "${WORKDIR}/git"
+
+inherit pkgconfig cmake_qt5
+
+do_install:append() {
+    install -d ${D}${systemd_user_unitdir}/agl-session.target.wants
+    install -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_user_unitdir}/${BPN}.service
+    ln -s ../${BPN}.service ${D}${systemd_user_unitdir}/agl-session.target.wants/${BPN}.service
+}
+
+FILES:${PN} += " ${systemd_user_unitdir}"
+
+RDEPENDS:${PN} += " \
+    qtwayland \
+    qtbase-qmlplugins \
+    qtquickcontrols \
+    qtquickcontrols-qmlplugins \
+    qtquickcontrols2 \
+    qtquickcontrols2-qmlplugins \
+    qtgraphicaleffects-qmlplugins \
+    qtsvg-plugins \
+"
diff --git a/recipes-demo/cluster-receiver/cluster-receiver/cluster-receiver.service b/recipes-demo/cluster-receiver/cluster-receiver/cluster-receiver.service
new file mode 100644 (file)
index 0000000..e544e25
--- /dev/null
@@ -0,0 +1,20 @@
+[Unit]
+Description=cluster-receiver
+
+Requires=agl-compositor.service
+After=agl-compositor.service
+
+# Since we are part of the agl session, make sure we are started before
+# it is complete.
+Before=agl-session.target
+
+[Service]
+ExecStart=/usr/bin/xdg-cluster-receiver
+
+Restart=always
+
+StandardOutput=journal
+StandardError=journal
+
+[Install]
+WantedBy=agl-session.target
diff --git a/recipes-demo/cluster-receiver/cluster-receiver_git.bb b/recipes-demo/cluster-receiver/cluster-receiver_git.bb
new file mode 100644 (file)
index 0000000..3b1dd6a
--- /dev/null
@@ -0,0 +1,38 @@
+SUMMARY     = "Instrument Cluster receiver application"
+DESCRIPTION = "AGL demonstration instrument cluster XDG remote display application"
+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"
+
+DEPENDS = " \
+    wayland wayland-native \
+    agl-compositor \
+    gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad \
+"
+
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-cluster-demo-receiver;protocol=https;branch=${AGL_BRANCH} \
+           file://cluster-receiver.service \
+"
+SRCREV  = "${AGL_APP_REVISION}"
+
+S  = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+do_install:append() {
+    install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_user_unitdir}/${BPN}.service
+    install -d ${D}${systemd_user_unitdir}/agl-session.target.wants
+    ln -s ../${BPN}.service ${D}${systemd_user_unitdir}/agl-session.target.wants/${BPN}.service
+}
+
+FILES:${PN} += " ${systemd_user_unitdir}"
+
+RDEPENDS:${PN} += " \
+    gstreamer1.0-plugins-base \
+    gstreamer1.0-plugins-good \
+    gstreamer1.0-plugins-bad \
+"
diff --git a/recipes-demo/cluster-receiver/qt-cluster-receiver/qt-cluster-receiver.service b/recipes-demo/cluster-receiver/qt-cluster-receiver/qt-cluster-receiver.service
new file mode 100644 (file)
index 0000000..bc328f9
--- /dev/null
@@ -0,0 +1,20 @@
+[Unit]
+Description=qt-cluster-receiver
+
+Requires=agl-compositor.service
+After=agl-compositor.service
+
+# Since we are part of the agl session, make sure we are started before
+# it is complete.
+Before=agl-session.target
+
+[Service]
+ExecStart=/usr/bin/qt-cluster-receiver
+
+Restart=always
+
+StandardOutput=journal
+StandardError=journal
+
+[Install]
+WantedBy=agl-session.target
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 (file)
index 0000000..d43ab43
--- /dev/null
@@ -0,0 +1,40 @@
+SUMMARY     = "Instrument Cluster receiver application"
+DESCRIPTION = "AGL demonstration instrument cluster Qt remote display application"
+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"
+
+DEPENDS = " \
+    wayland wayland-native \
+    qtwayland qtwayland-native \
+    qtquickcontrols2 qtwebsockets qtbase qtdeclarative \
+    gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad \
+"
+
+PV = "1.0+git${SRCPV}"
+
+SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-qt-cluster-demo-receiver;protocol=https;branch=${AGL_BRANCH} \
+           file://qt-cluster-receiver.service \
+"
+SRCREV  = "${AGL_APP_REVISION}"
+
+S  = "${WORKDIR}/git"
+
+inherit cmake_qt5 pkgconfig
+
+do_install:append() {
+    # Only install unit, do not enable it by default
+    install -D -m 0644 ${WORKDIR}/${BPN}.service ${D}${systemd_user_unitdir}/${BPN}.service
+}
+
+FILES:${PN} += " ${systemd_user_unitdir}"
+
+RDEPENDS:${PN} += " \
+    qtwayland \
+    gstreamer1.0-plugins-base \
+    gstreamer1.0-plugins-good \
+    gstreamer1.0-plugins-bad \
+"
diff --git a/recipes-demo/navigation/tbtnavi_git.bb b/recipes-demo/navigation/tbtnavi_git.bb
new file mode 100644 (file)
index 0000000..5981cc5
--- /dev/null
@@ -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 \
+    qtlocation \
+    libqtappfw \
+    wayland-native \
+    qtwayland-native \
+"
+
+PV = "2.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 pkgconfig
+
+RDEPENDS:${PN} += " \
+    qtlocation \
+    ondemandnavi-config \
+    libqtappfw \
+"
diff --git a/recipes-platform/images/agl-cluster-demo-platform.bb b/recipes-platform/images/agl-cluster-demo-platform.bb
new file mode 100644 (file)
index 0000000..d5c9274
--- /dev/null
@@ -0,0 +1,18 @@
+DESCRIPTION = "AGL Cluster Demo Platform image currently contains a simple cluster interface."
+
+LICENSE = "MIT"
+
+require recipes-platform/images/agl-image-boot.inc
+
+IMAGE_FEATURES += "splash package-management ssh-server-openssh"
+
+inherit features_check
+
+REQUIRED_DISTRO_FEATURES = "wayland"
+
+# add packages for cluster demo platform (include demo apps) here
+IMAGE_INSTALL:append = " \
+    packagegroup-agl-cluster-demo-platform \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-demo-preload", "cluster-dashboard-demo-config", "", d)} \
+    ${@bb.utils.contains("AGL_FEATURES", "agl-demo-preload", "weston-ini-conf-landscape-inverted", "weston-ini-conf-landscape", d)} \
+    "
diff --git a/recipes-platform/images/agl-telematics-demo-platform.bb b/recipes-platform/images/agl-telematics-demo-platform.bb
new file mode 100644 (file)
index 0000000..b8a9961
--- /dev/null
@@ -0,0 +1,13 @@
+DESCRIPTION = "AGL Telematics Demo Platform image."
+
+LICENSE = "MIT"
+
+require recipes-platform/images/agl-image-boot.inc
+
+inherit features_check
+
+REQUIRED_DISTRO_FEATURES = "3g"
+
+IMAGE_INSTALL:append = " \
+    packagegroup-agl-telematics-demo-platform \
+"
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 (file)
index 0000000..c414adf
--- /dev/null
@@ -0,0 +1,30 @@
+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 \
+    packagegroup-agl-ttf-fonts \
+    packagegroup-agl-source-han-sans-ttf-fonts \
+    packagegroup-agl-networking \
+    "
+
+AGL_APPS = " \
+    cluster-dashboard \
+    cluster-receiver \
+    qt-cluster-receiver \
+    "
+
+RDEPENDS:${PN}:append = " \
+    can-utils \
+    ${AGL_APPS} \
+"
index a86da2e..9c4553f 100644 (file)
@@ -34,6 +34,13 @@ AGL_APPS = " \
     radio \
     "
 
+# Cluster demo support.
+CLUSTER_SUPPORT_PACKAGES = " \
+       tbtnavi \
+       cluster-demo-network-config \
+"
+CLUSTER_SUPPORT = "${@bb.utils.contains("AGL_FEATURES", "agl-cluster-demo-support", "${CLUSTER_SUPPORT_PACKAGES}", "",d)}"
+
 # Hook for demo platform configuration
 # ATM used for:
 # 1) Adding udev configuration and scripts for supporting USB attached
@@ -49,5 +56,6 @@ RDEPENDS:${PN}:append = " \
     qtquickcontrols2-agl-style \
     ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'unzip mpc' , '', d)} \
     ${AGL_APPS} \
+    ${CLUSTER_SUPPORT} \
     ${DEMO_PRELOAD} \
     "
index aeef45d..39b0c37 100644 (file)
@@ -15,7 +15,6 @@ RDEPENDS:${PN} += "\
     packagegroup-agl-image-boot \
     packagegroup-agl-core-security \
     packagegroup-agl-graphical-weston \
-    packagegroup-agl-appfw-native-qt5 \
 "
 
 RDEPENDS:profile-cluster-qt5 = "${PN}"