aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2019-12-29 18:36:48 -0500
committerScott Murray <scott.murray@konsulko.com>2019-12-29 18:46:56 -0500
commit0be8a1ddb505354f6ab028f2af359674211c0273 (patch)
tree087d9b1df1377c361a35ce2d0e1319ebe376a272
parent1007e85d17d9b86aa82ed41872d207da1eba69e1 (diff)
Add virtual sllin support and LIN bridging to CAN for demos
To enable seeing the steering wheel LIN messages on the cluster board for the planned CES demo, a systemd unit that wraps the use of candump in bridging mode is added when the agl-cluster-support feature is enabled. To make sure that the sllin0 interface is always available for testing without the specific demo LIN hardware, a vcan interface is set up as sllin0 when the ttyUSB0 device representing the serial adapter for the LIN transceiver is not present. Since this virtual sllin0 interface is very useful for general testing of the steering wheel event support up through the low-can and signal-composer stack, it has not been hidden behind agl-cluster-demo-support. Bug-AGL: SPEC-3049 Change-Id: I527763176ce0f8b4d50cc472ec2343a6596286e2 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
-rw-r--r--recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb29
-rw-r--r--recipes-config/cluster-lin-bridging-config/files/cluster-lin-bridging.service11
-rw-r--r--recipes-kernel/sllin/files/sllin-demo-virtual.service12
-rwxr-xr-x[-rw-r--r--]recipes-kernel/sllin/files/start_lin_demo.sh12
-rw-r--r--recipes-kernel/sllin/sllin.bb7
-rw-r--r--recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb13
6 files changed, 76 insertions, 8 deletions
diff --git a/recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb b/recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb
new file mode 100644
index 00000000..2b6567a7
--- /dev/null
+++ b/recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "Configure LIN to external CAN bridging"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+
+SRC_URI = "\
+ file://cluster-lin-bridging.service \
+"
+
+inherit systemd
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "cluster-lin-bridging.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "enable"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/cluster-lin-bridging.service ${D}${systemd_system_unitdir}
+}
+
+FILES_${PN} += "${systemd_system_unitdir}"
+
+RDEPENDS_${PN} = " \
+ can-utils \
+ sllin \
+ sllin-virtual \
+"
diff --git a/recipes-config/cluster-lin-bridging-config/files/cluster-lin-bridging.service b/recipes-config/cluster-lin-bridging-config/files/cluster-lin-bridging.service
new file mode 100644
index 00000000..1dde3378
--- /dev/null
+++ b/recipes-config/cluster-lin-bridging-config/files/cluster-lin-bridging.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=LIN to CAN bridging
+After=sllin-demo.service sllin-demo-virtual.service
+Requires=sllin-demo.service sllin-demo-virtual.service
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/candump -s 2 -B can0 sllin0
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-kernel/sllin/files/sllin-demo-virtual.service b/recipes-kernel/sllin/files/sllin-demo-virtual.service
new file mode 100644
index 00000000..78824219
--- /dev/null
+++ b/recipes-kernel/sllin/files/sllin-demo-virtual.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=LIN demo configuration (virtual)
+ConditionPathExists=!/dev/ttyUSB0
+After=afm-system-daemon.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/start_lin_demo.sh
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-kernel/sllin/files/start_lin_demo.sh b/recipes-kernel/sllin/files/start_lin_demo.sh
index 4fcfcc6d..26f64c0a 100644..100755
--- a/recipes-kernel/sllin/files/start_lin_demo.sh
+++ b/recipes-kernel/sllin/files/start_lin_demo.sh
@@ -1,10 +1,14 @@
#!/bin/sh
# Attach serial LIN->CAN bridge and set up LIN polling
-sleep 1
-/usr/bin/lin_config -c /etc/lin_config.conf -a sllin:/dev/ttyUSB0
-pidof lin_config > /var/run/lin_config.pid
-sleep 1
+if [ -c /dev/ttyUSB0 ]; then
+ sleep 1
+ /usr/bin/lin_config -c /etc/lin_config.conf -a sllin:/dev/ttyUSB0
+ pidof lin_config > /var/run/lin_config.pid
+ sleep 1
+else
+ ip link add dev sllin0 type vcan
+fi
ip link set sllin0 up
# Initialize HVAC controller
diff --git a/recipes-kernel/sllin/sllin.bb b/recipes-kernel/sllin/sllin.bb
index 0478b21a..7c4313f1 100644
--- a/recipes-kernel/sllin/sllin.bb
+++ b/recipes-kernel/sllin/sllin.bb
@@ -18,6 +18,7 @@ SRC_URI_append = " \
file://0003-Allow-recent-kernels-newer-4.11.x-to-build.patch;pnum=2 \
file://0001-Disable-sllin-driver-debug-log.patch;pnum=2 \
file://sllin-demo.service \
+ file://sllin-demo-virtual.service \
file://start_lin_demo.sh \
file://lin_config.conf \
"
@@ -29,16 +30,22 @@ SLLINBAUDRATE ??= "9600"
module_conf_sllin = "options sllin baudrate=${SLLINBAUDRATE}"
SYSTEMD_SERVICE_${PN} = "sllin-demo.service"
+SYSTEMD_SERVICE_${PN}-virtual = "sllin-demo-virtual.service"
do_install_append () {
install -d 644 ${D}/${bindir}
install -m 755 ${WORKDIR}/start_lin_demo.sh ${D}/${bindir}/start_lin_demo.sh
install -d ${D}${systemd_system_unitdir}
install -m 0644 ${WORKDIR}/sllin-demo.service ${D}${systemd_system_unitdir}/
+ install -m 0644 ${WORKDIR}/sllin-demo-virtual.service ${D}${systemd_system_unitdir}/
install -d ${D}${sysconfdir}
install -m 0644 ${WORKDIR}/lin_config.conf ${D}${sysconfdir}/
}
+PACKAGES =+ "${PN}-virtual"
+
FILES_${PN} += "${bindir}/start_lin_demo.sh ${sysconfdir}/lin_config.conf"
+FILES_${PN}-virtual = "${systemd_system_unitdir}/sllin-demo-virtual.service"
+
RDEPENDS_${PN} += "lin-config"
diff --git a/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb b/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb
index 65e043ea..092d4a71 100644
--- a/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb
+++ b/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb
@@ -32,10 +32,10 @@ MOST_DRIVERS_dragonboard-410c ?= ""
# HVAC dependencies
###################
-LIN_DRIVERS ??= " sllin"
+LIN_DRIVERS ??= " sllin sllin-virtual"
# These boards use different kernels - needs to be checked
-LIN_DRIVERS_dra7xx-evm ?= ""
-LIN_DRIVERS_dragonboard-410c ?= ""
+LIN_DRIVERS_dra7xx-evm ?= "sllin-virtual"
+LIN_DRIVERS_dragonboard-410c ?= "sllin-virtual"
# UNICENS service
UNICENS ?= " \
@@ -66,7 +66,12 @@ QTAGLEXTRAS = "${@bb.utils.contains("DISTRO_FEATURES", "agl-hmi-framework", " qt
# Cluster demo support.
# ATM no cluster map viewer is supported with the older navigation application.
MAPVIEWER = "${@bb.utils.contains("PREFERRED_RPROVIDER_virtual/navigation", "ondemandnavi", "tbtnavi", "",d)}"
-CLUSTER_SUPPORT = "${@bb.utils.contains("DISTRO_FEATURES", "agl-cluster-demo-support", "${MAPVIEWER} cluster-demo-network-config", "",d)}"
+CLUSTER_SUPPORT_PACKAGES = " \
+ ${MAPVIEWER} \
+ cluster-demo-network-config \
+ cluster-lin-bridging-config \
+"
+CLUSTER_SUPPORT = "${@bb.utils.contains("DISTRO_FEATURES", "agl-cluster-demo-support", "${CLUSTER_SUPPORT_PACKAGES}", "",d)}"
# Hook for demo platform configuration
# ATM used for: