From fb407cc3cbb66df0a154ef400294d209fb681b22 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Sun, 29 Dec 2019 18:36:48 -0500 Subject: 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: Idb478e3fe4085859e8704ab0329a341b1a11e0ef Signed-off-by: Scott Murray --- .../cluster-lin-bridging-config.bb | 29 ++++++++++++++++++++++ .../files/cluster-lin-bridging.service | 11 ++++++++ .../sllin/files/sllin-demo-virtual.service | 12 +++++++++ recipes-kernel/sllin/files/start_lin_demo.sh | 12 ++++++--- recipes-kernel/sllin/sllin.bb | 7 ++++++ .../packagegroup-agl-demo-platform.bb | 7 +++++- .../packagegroups/packagegroup-agl-demo.bb | 6 ++--- 7 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 recipes-config/cluster-lin-bridging-config/cluster-lin-bridging-config.bb create mode 100644 recipes-config/cluster-lin-bridging-config/files/cluster-lin-bridging.service create mode 100644 recipes-kernel/sllin/files/sllin-demo-virtual.service mode change 100644 => 100755 recipes-kernel/sllin/files/start_lin_demo.sh 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 old mode 100644 new mode 100755 index 4fcfcc6d..26f64c0a --- 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 d62141ae..80ad559e 100644 --- a/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb +++ b/recipes-platform/packagegroups/packagegroup-agl-demo-platform.bb @@ -56,7 +56,12 @@ HOMESCREEN = "packagegroup-hmi-framework" # 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: diff --git a/recipes-platform/packagegroups/packagegroup-agl-demo.bb b/recipes-platform/packagegroups/packagegroup-agl-demo.bb index 47fb4e37..164684f2 100644 --- a/recipes-platform/packagegroups/packagegroup-agl-demo.bb +++ b/recipes-platform/packagegroups/packagegroup-agl-demo.bb @@ -23,10 +23,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 ?= " \ -- cgit 1.2.3-korg