diff options
author | 2024-05-16 18:24:25 -0400 | |
---|---|---|
committer | 2024-05-27 21:28:34 +0000 | |
commit | b26515dcf2afc510cc59782f99965f10b96be433 (patch) | |
tree | 60cb8103f410306171ae487bd4784b0363403297 | |
parent | 2e0fd28b2470f6d81bfb1b0b273af5742060ed6a (diff) |
Add gateway demo
Changes:
- Add recipe for AGL VSS to MQTT proxy daemon
- Update agl-vcar.dbc CAN database definition to add signals useful
for demoing the proxy (per V2C EG discussion).
- Add a patch to kuksa-dbc-feeder to allow sensor signal updates to
generate CAN messages in output mode.
- Add VSS vspec variants to define the desired CAN input and output
support for the various kuksa-dbc-feeder instances in the default
and full gateway demos.
- Add configurations for kuksa-dbc-feeder for the running the default
gateway demo with CAN output from a demo control panel instance on
a single CAN interface, as well as a fuller setup with a second
kuksa-dbc-feeder running against a second CAN interface on the
gateway to handle the demo steering wheel and HVAC support.
- Add gateway demo specific configuration files for various KUKSA.val
databroker clients to override the databroker location.
- Add agl-gateway-demo and agl-gateway-demo-preconfigured images for
the default and full demos.
- Add *-preconfigured-gateway image flavors for the Flutter IVI, IC,
and KVM demo images that support running with the databroker on
the gateway.
NOTES:
- The *-preconfigured-gateway images assume the gateway has an IP
address of 192.168.10.4.
- Required changes to the agl-demo-control-panel application and the
addition of a agl-ivi-demo-control-panel-preconfigured-gateway
image will come in a subsequent change.
Bug-AGL: SPEC-5107, SPEC-5138
Change-Id: I9797aa72737af7af3d791a5151198f80b6d90e0d
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl-demo/+/29921
ci-image-boot-test: Jenkins Job builder account
ci-image-build: Jenkins Job builder account
Tested-by: Jenkins Job builder account
47 files changed, 2130 insertions, 75 deletions
diff --git a/meta-agl-kvm-demo/recipes-config/qemu-config/files/agl-cluster-demo-flutter-guest-preconfigured-gateway.conf b/meta-agl-kvm-demo/recipes-config/qemu-config/files/agl-cluster-demo-flutter-guest-preconfigured-gateway.conf new file mode 100644 index 00000000..37003abd --- /dev/null +++ b/meta-agl-kvm-demo/recipes-config/qemu-config/files/agl-cluster-demo-flutter-guest-preconfigured-gateway.conf @@ -0,0 +1,6 @@ +QEMU_TASKSET_CPUS="4-7" +QEMU_SMP_OPT="-smp 2" +QEMU_MEM_OPT="-m 1G" +QEMU_NET_OPT="-netdev bridge,br=vmnet0,id=net0 -device virtio-net-device,mac=52:54:00:12:00:03,netdev=net0" +QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=2048M video=Virtual-1:1920x1080" +QEMU_XDG_APP_ID="agl-cluster-demo" diff --git a/meta-agl-kvm-demo/recipes-config/qemu-config/files/agl-ivi-demo-flutter-guest-preconfigured-gateway.conf b/meta-agl-kvm-demo/recipes-config/qemu-config/files/agl-ivi-demo-flutter-guest-preconfigured-gateway.conf new file mode 100644 index 00000000..c2d420eb --- /dev/null +++ b/meta-agl-kvm-demo/recipes-config/qemu-config/files/agl-ivi-demo-flutter-guest-preconfigured-gateway.conf @@ -0,0 +1,13 @@ +QEMU_TASKSET_CPUS="0-3" +QEMU_SMP_OPT="-smp 4" +QEMU_MEM_OPT="-m 4G" +# With touchscreen plugged into the bottom connector of the 2x USB 2.0 +# on the reference hardware +QEMU_INPUT_OPT="-device qemu-xhci -usb -device usb-host,hostbus=5,hostport=1" +# Fallback for touchscreen or other pointing device plugged in elsewhere +#QEMU_INPUT_OPT="-device virtio-tablet-device" +QEMU_AUDIO_OPT="-audiodev alsa,id=agl -device intel-hda -device hda-duplex,audiodev=agl" +QEMU_NET_OPT="-netdev bridge,br=vmnet0,id=net0 -device virtio-net-device,mac=52:54:00:12:00:02,netdev=net0" +QEMU_CAN_OPT="-object can-bus,id=canbus0 -object can-host-socketcan,id=canhost0,if=can0,canbus=canbus0 -device kvaser_pci,canbus=canbus0" +QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=4196M video=Virtual-1:1920x1080" +QEMU_XDG_APP_ID="agl-ivi-demo" diff --git a/meta-agl-kvm-demo/recipes-config/qemu-config/qemu-config-agl-cluster-demo-flutter-guest-preconfigured-gateway.bb b/meta-agl-kvm-demo/recipes-config/qemu-config/qemu-config-agl-cluster-demo-flutter-guest-preconfigured-gateway.bb new file mode 100644 index 00000000..45568faf --- /dev/null +++ b/meta-agl-kvm-demo/recipes-config/qemu-config/qemu-config-agl-cluster-demo-flutter-guest-preconfigured-gateway.bb @@ -0,0 +1,3 @@ +require qemu-config-agl-cluster-demo-flutter-guest.bb + +QEMU_IMAGE = "agl-cluster-demo-flutter-guest-preconfigured-gateway" diff --git a/meta-agl-kvm-demo/recipes-config/qemu-config/qemu-config-agl-ivi-demo-flutter-guest-preconfigured-gateway.bb b/meta-agl-kvm-demo/recipes-config/qemu-config/qemu-config-agl-ivi-demo-flutter-guest-preconfigured-gateway.bb new file mode 100644 index 00000000..a8c8fa75 --- /dev/null +++ b/meta-agl-kvm-demo/recipes-config/qemu-config/qemu-config-agl-ivi-demo-flutter-guest-preconfigured-gateway.bb @@ -0,0 +1,3 @@ +require qemu-config-agl-ivi-demo-flutter-guest.bb + +QEMU_IMAGE = "agl-ivi-demo-flutter-guest-preconfigured-gateway" diff --git a/meta-agl-kvm-demo/recipes-platform/images/agl-cluster-demo-flutter-guest-preconfigured-gateway.bb b/meta-agl-kvm-demo/recipes-platform/images/agl-cluster-demo-flutter-guest-preconfigured-gateway.bb new file mode 100644 index 00000000..2377d87d --- /dev/null +++ b/meta-agl-kvm-demo/recipes-platform/images/agl-cluster-demo-flutter-guest-preconfigured-gateway.bb @@ -0,0 +1,5 @@ +require agl-cluster-demo-flutter-guest-preconfigured.bb + +SUMMARY = "AGL KVM + gateway demo preconfigured guest cluster Flutter image" + +FLUTTER_CLUSTER_DASHBOARD_CONF = "flutter-cluster-dashboard-conf-gateway-demo" diff --git a/meta-agl-kvm-demo/recipes-platform/images/agl-ivi-demo-flutter-guest-preconfigured-gateway.bb b/meta-agl-kvm-demo/recipes-platform/images/agl-ivi-demo-flutter-guest-preconfigured-gateway.bb new file mode 100644 index 00000000..2e9b2ccb --- /dev/null +++ b/meta-agl-kvm-demo/recipes-platform/images/agl-ivi-demo-flutter-guest-preconfigured-gateway.bb @@ -0,0 +1,7 @@ +require agl-ivi-demo-flutter-guest-preconfigured.bb + +SUMMARY = "AGL KVM + gateway demo preconfigured guest IVI Flutter image" + +FLUTTER_ICS_HOMESCREEN_CONF = "flutter-ics-homescreen-conf-kvm-gateway-demo" +ONDEMANDNAVI_CONF = "ondemandnavi-conf-gateway-demo" +TBTNAVI_CONF = "tbtnavi-conf-gateway-demo" diff --git a/meta-agl-kvm-demo/recipes-platform/images/agl-kvm-demo-flutter-preconfigured-gateway.bb b/meta-agl-kvm-demo/recipes-platform/images/agl-kvm-demo-flutter-preconfigured-gateway.bb new file mode 100644 index 00000000..b98f52ee --- /dev/null +++ b/meta-agl-kvm-demo/recipes-platform/images/agl-kvm-demo-flutter-preconfigured-gateway.bb @@ -0,0 +1,18 @@ +require agl-kvm-demo-flutter-preconfigured.bb + +SUMMARY = "AGL KVM + gateway preconfigured Flutter demo image" + +# We only want KUKSA.val client support, not the databroker (since +# that will be running on the gateway) +IMAGE_FEATURES:remove = "kuksa-val-databroker" + +# Not needed if we're not running the databroker +IMAGE_INSTALL:remove = "kuksa-databroker-agl-demo-cluster" + +IMAGE_INSTALL += "\ + agl-service-hvac-conf-gateway-demo \ + agl-service-audiomixer-conf-gateway-demo \ +" + +GUEST_VM1_IMAGE = "agl-ivi-demo-flutter-guest-preconfigured-gateway" +GUEST_VM2_IMAGE = "agl-cluster-demo-flutter-guest-preconfigured-gateway" diff --git a/meta-agl-kvm-demo/recipes-platform/images/agl-kvm-demo-flutter-preconfigured.bb b/meta-agl-kvm-demo/recipes-platform/images/agl-kvm-demo-flutter-preconfigured.bb index 9b02c68c..ac392cbc 100644 --- a/meta-agl-kvm-demo/recipes-platform/images/agl-kvm-demo-flutter-preconfigured.bb +++ b/meta-agl-kvm-demo/recipes-platform/images/agl-kvm-demo-flutter-preconfigured.bb @@ -1,11 +1,9 @@ -LICENSE = "MIT" - require agl-kvm-demo.bb -SUMMARY = "AGL KVM+QEMU preconfigured Flutter demo image" +SUMMARY = "AGL KVM preconfigured Flutter demo image" -# If building with "agl-kvm-host-kuksa", the databroker and likely -# some clients run on the host +# The databroker runs on the host to simplify things when running +# clients on the host instead of just in the guests. IMAGE_FEATURES += " \ kuksa-val-databroker \ kuksa-val-databroker-client \ diff --git a/recipes-connectivity/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.json b/recipes-connectivity/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.json new file mode 100644 index 00000000..fe04b037 --- /dev/null +++ b/recipes-connectivity/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.json @@ -0,0 +1,10 @@ +{ + "sub": "local dev", + "iss": "createToken.py", + "aud": [ + "kuksa.val" + ], + "iat": 1516239022, + "exp": 1767225599, + "scope": "read" +}
\ No newline at end of file diff --git a/recipes-connectivity/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.token b/recipes-connectivity/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.token new file mode 100644 index 00000000..10fafb53 --- /dev/null +++ b/recipes-connectivity/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.token @@ -0,0 +1 @@ +eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJsb2NhbCBkZXYiLCJpc3MiOiJjcmVhdGVUb2tlbi5weSIsImF1ZCI6WyJrdWtzYS52YWwiXSwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE3NjcyMjU1OTksInNjb3BlIjoicmVhZCJ9.P6tJPRSJWB51UOFDFs8qQ-lGqb1NoWgCekHUKyMiYcs8sR3FGVKSRjSkcqv1tXOlILvqhUwyuTKui25_kFKkTPv47GI0xAqcXtaTmDwHAWZHFC6HWGWGXohu7XvURrim5kMRVHy_VGlzasGgVap0JFk3wmaY-nyFYL_PLDjvGjIQuOwFiUtKK1PfiKviZKyc5EzPUEAoHxFL_BSOsTdDDcaydFe9rSKJzpYrj7qXY0hMJCje2BUGlSUIttR95aSjOZflSxiGystWHME8fKMmDERAx749Jpt37M3taCxBsUzER5olPz65MGzFSikfC-jH_KGmJ4zNYS65_OM1a-CPfW7Ts__pyAXxFULNMHRMIfh8Wiig4UcooMy_ZJO_DN2rq95XdaBbzRua5mxvO2wM6iu5kv4lhNxhjVNGuWFRLLJ_icBUZlvAuC3eqp66B-Y3jJNI0cSnIvsVX8YFVS3ebW8tf40OdeVou8fWZPcQsFAAafBhIxNOW8FbLZ9sRvQ-FGwZy-GyF52IJ5ZKeGfAkeEh9ZLIcyJ2YlGp4q0EOKIdwIBsWfCFtZbAvi2ornO3XvJm94NBqprpvQYN_IB7yyRxDduLjNKqqcFqnrlWYI-ZhvghWH2rEblplgHZdyVD1G9Mbv0_zdNTKFs6J7IP96aV6-4hBOt3kROlS1G7ObA
\ No newline at end of file diff --git a/recipes-connectivity/agl-vss-proxy/agl-vss-proxy_git.bb b/recipes-connectivity/agl-vss-proxy/agl-vss-proxy_git.bb new file mode 100644 index 00000000..b16116e6 --- /dev/null +++ b/recipes-connectivity/agl-vss-proxy/agl-vss-proxy_git.bb @@ -0,0 +1,47 @@ +SUMMARY = "AGL VSS Proxy" +DESCRIPTION = "AGL VSS Proxy" +HOMEPAGE = "https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-vss-proxy" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=ae6497158920d9524cf208c09cc4c984" + +DEPENDS = " \ + glib-2.0 \ + yaml-cpp \ + protobuf-native \ + grpc-native \ + protobuf \ + grpc \ + kuksa-databroker \ + mosquitto \ +" + +SRC_URI = "git://gerrit.automotivelinux.org/gerrit/src/agl-vss-proxy;protocol=https;branch=${AGL_BRANCH} \ + file://agl-vss-proxy.token \ +" +SRCREV = "e437300d0b5c20114ea1843dbf00815304af3f27" + +PV = "1.0+git${SRCPV}" +S = "${WORKDIR}/git" + +inherit meson pkgconfig systemd + +EXTRA_OEMESON += "-Dprotos=${STAGING_INCDIR}" + +SYSTEMD_SERVICE:${PN} = "agl-vss-proxy.service" + +do_install:append() { + # Currently using default global client and CA certificates + # for KUKSA.val SSL, installing app specific ones would go here. + + # VIS authorization token file for KUKSA.val should ideally not + # be readable by other users, but currently that's not doable + # until a packaging/sandboxing/MAC scheme is (re)implemented or + # something like OAuth is plumbed in as an alternative. + install -d ${D}${sysconfdir}/agl-vss-proxy + install -m 0644 ${WORKDIR}/agl-vss-proxy.token ${D}${sysconfdir}/agl-vss-proxy/ +} + +FILES:${PN} += "${systemd_system_unitdir}" + +RDEPENDS:${PN} += "kuksa-databroker kuksa-databroker-agl" diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel.bb b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel.bb new file mode 100644 index 00000000..4afcfaf1 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel.bb @@ -0,0 +1,25 @@ +SUMMARY = "KUKSA.val DBC feeder configuration for gateway demo" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +SRC_URI = "file://kuksa-dbc-feeder.gw-control-panel" + +S = "${WORKDIR}" + +inherit update-alternatives + +do_compile[noexec] = "1" + +do_install() { + install -d ${D}${sysconfdir}/default + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.gw-control-panel ${D}${sysconfdir}/default/ +} + +ALTERNATIVE_LINK_NAME[kuksa-dbc-feeder.env] = "${sysconfdir}/default/kuksa-dbc-feeder" + +RPROVIDES:${PN} = "kuksa-dbc-feeder.env" +ALTERNATIVE:${PN} = "kuksa-dbc-feeder.env" +ALTERNATIVE_TARGET_${PN} = "${sysconfdir}/default/kuksa-dbc-feeder.gw-control-panel" + +RDEPENDS:${PN} += "kuksa-dbc-feeder" diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel/kuksa-dbc-feeder.gw-control-panel b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel/kuksa-dbc-feeder.gw-control-panel new file mode 100644 index 00000000..d6d2e607 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel/kuksa-dbc-feeder.gw-control-panel @@ -0,0 +1,4 @@ +# Leave DBC output disabled until cruise support is added to the +# control panel simulator +EXTRA_ARGS="--no-val2dbc --dbc2val --dbc-default /etc/kuksa-dbc-feeder/dbc_default_values.json" +#LOG_LEVEL=debug diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware.bb b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware.bb new file mode 100644 index 00000000..513a3f6e --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware.bb @@ -0,0 +1,32 @@ +SUMMARY = "KUKSA.val DBC feeder configuration for gateway demo (secondary CAN interface)" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +SRC_URI = "file://kuksa-dbc-feeder.gw-hardware \ + file://config.ini.gw-hardware \ + file://kuksa-dbc-feeder-can1.service \ +" + +S = "${WORKDIR}" + +inherit systemd update-alternatives + +SYSTEMD_SERVICE:${PN} = "kuksa-dbc-feeder-can1.service" + +do_compile[noexec] = "1" + +do_install() { + install -d ${D}${sysconfdir}/default + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.gw-hardware ${D}${sysconfdir}/default/ + install -d ${D}${sysconfdir}/kuksa-dbc-feeder + install -m 0644 ${WORKDIR}/config.ini.gw-hardware ${D}${sysconfdir}/kuksa-dbc-feeder/ + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder-can1.service ${D}${systemd_system_unitdir} + fi +} + +FILES:${PN} += "${systemd_system_unitdir}" + +RDEPENDS:${PN} += "kuksa-dbc-feeder vss-agl-gw-hardware" diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/config.ini.gw-hardware b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/config.ini.gw-hardware new file mode 100644 index 00000000..ee3541a5 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/config.ini.gw-hardware @@ -0,0 +1,30 @@ +[general] +# server type: +# switch between kuksa_databroker and kuksa_val_server +server_type = kuksa_databroker +# VSS mapping file +mapping = /usr/share/vss/vss_rel_4.0-agl-gw-hardware.json + +# IP address for server (KUKSA.val Server or Databroker) +ip = localhost + +# Port for server (KUKSA.val Server or Databroker) +port = 55555 + +# Shall TLS be used (default False for Databroker, True for KUKSA.val Server) +tls = True + +# TLS-related settings +# Path to root CA, needed if using TLS +root_ca_path=/etc/kuksa-val/CA.pem + +# Token file for authorization. +token = /etc/kuksa-dbc-feeder/dbc_feeder.token + +[can] +# CAN port +port = can1 +# Enable SAE-J1939 Mode. False: ignore +j1939 = False +# DBC file used to parse CAN messages +dbcfile = /etc/kuksa-dbc-feeder/agl-vcar.dbc diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder-can1.service b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder-can1.service new file mode 100644 index 00000000..6f123dd5 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder-can1.service @@ -0,0 +1,12 @@ +[Unit] +Description=Eclipse KUKSA.val DBC feeder (can1) +Requires=kuksa-databroker.service can-dev-helper.service +After=kuksa-databroker.service can-dev-helper.service + +[Service] +EnvironmentFile=-/etc/default/kuksa-dbc-feeder.gw-hardware +ExecStart=/usr/bin/dbcfeeder.py $EXTRA_ARGS +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder.gw-hardware b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder.gw-hardware new file mode 100644 index 00000000..562a56b8 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder.gw-hardware @@ -0,0 +1,3 @@ +# DBC input for steering wheel, output for HVAC +EXTRA_ARGS="--val2dbc --dbc2val --dbc-default /etc/kuksa-dbc-feeder/dbc_default_values.json --config /etc/kuksa-dbc-feeder/config.ini.gw-hardware" +#LOG_LEVEL=debug diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0004-Enable-val2dbc-for-sensor-values.patch b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0004-Enable-val2dbc-for-sensor-values.patch new file mode 100644 index 00000000..7f22a90a --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0004-Enable-val2dbc-for-sensor-values.patch @@ -0,0 +1,142 @@ +From d6f1aaa7f26aa52f4b219f60e704d5ab2954f082 Mon Sep 17 00:00:00 2001 +From: Scott Murray <scott.murray@konsulko.com> +Date: Wed, 3 Apr 2024 02:09:11 +0900 +Subject: [PATCH] Enable val2dbc for sensor values + +Rework to allow val2dbc mode to write out sensor values in +addition to actuator target values. + +Upstream-Status: pending + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> +--- + dbc2val/dbcfeeder.py | 8 ++++++-- + .../dbcfeederlib/databrokerclientwrapper.py | 18 ++++++++++++------ + dbc2val/dbcfeederlib/dbc2vssmapper.py | 14 +++++++++----- + dbc2val/dbcfeederlib/serverclientwrapper.py | 2 +- + 4 files changed, 28 insertions(+), 14 deletions(-) + +diff --git a/dbc2val/dbcfeeder.py b/dbc2val/dbcfeeder.py +index e7fd319..5e0df2f 100755 +--- a/dbc2val/dbcfeeder.py ++++ b/dbc2val/dbcfeeder.py +@@ -322,15 +322,19 @@ class Feeder: + log.debug("vss-Update callback!") + dbc_ids = set() + for update in updates: ++ value = None + if update.entry.value is not None: +- # This shall currently never happen as we do not subscribe to this + log.warning(f"Current value for {update.entry.path} is now: " + f"{update.entry.value.value} of type {type(update.entry.value.value)}") ++ value = update.entry.value.value + + if update.entry.actuator_target is not None: + log.debug(f"Target value for {update.entry.path} is now: {update.entry.actuator_target} " + f"of type {type(update.entry.actuator_target.value)}") +- new_dbc_ids = self._mapper.handle_update(update.entry.path, update.entry.actuator_target.value) ++ value = update.entry.actuator_target.value ++ ++ if value != None: ++ new_dbc_ids = self._mapper.handle_update(update.entry.path, value) + dbc_ids.update(new_dbc_ids) + + can_ids = set() +diff --git a/dbc2val/dbcfeederlib/databrokerclientwrapper.py b/dbc2val/dbcfeederlib/databrokerclientwrapper.py +index 35836e9..46ae330 100644 +--- a/dbc2val/dbcfeederlib/databrokerclientwrapper.py ++++ b/dbc2val/dbcfeederlib/databrokerclientwrapper.py +@@ -200,14 +200,20 @@ class DatabrokerClientWrapper(clientwrapper.ClientWrapper): + def supports_subscription(self) -> bool: + return True + +- async def subscribe(self, vss_names: List[str], callback): ++ async def subscribe(self, vss_entries: dict[str, str], callback): + """Creates a subscription and calls the callback when data received""" + entries = [] +- for name in vss_names: +- # Always subscribe to target +- subscribe_entry = SubscribeEntry(name, View.FIELDS, [Field.ACTUATOR_TARGET]) +- log.info(f"Subscribe entry: {subscribe_entry}") +- entries.append(subscribe_entry) ++ for name, signal_type in vss_entries.items(): ++ if signal_type == "actuator": ++ subscribe_entry = SubscribeEntry(name, View.FIELDS, [Field.ACTUATOR_TARGET]) ++ log.info(f"Subscribe entry: {subscribe_entry}") ++ entries.append(subscribe_entry) ++ if signal_type == "sensor": ++ subscribe_entry = SubscribeEntry(name, View.FIELDS, [Field.VALUE]) ++ log.info(f"Subscribe entry: {subscribe_entry}") ++ entries.append(subscribe_entry) ++ if not entries: ++ return + + # If there is a path VSSClient will request a secure connection + if self._tls and self._root_ca_path: +diff --git a/dbc2val/dbcfeederlib/dbc2vssmapper.py b/dbc2val/dbcfeederlib/dbc2vssmapper.py +index 5142a5e..8f04cdd 100644 +--- a/dbc2val/dbcfeederlib/dbc2vssmapper.py ++++ b/dbc2val/dbcfeederlib/dbc2vssmapper.py +@@ -61,12 +61,13 @@ class VSSMapping: + parser: Parser = Parser() + + def __init__(self, vss_name: str, dbc_name: str, transform: dict, interval_ms: int, +- on_change: bool, datatype: str, description: str): ++ on_change: bool, signal_type: str, datatype: str, description: str): + self.vss_name = vss_name + self.dbc_name = dbc_name + self.transform = transform + self.interval_ms = interval_ms + self.on_change = on_change ++ self.signal_type = signal_type + self.datatype = datatype + self.description = description + # For time comparison (interval_ms) we store last value used for comparison. Unit seconds. +@@ -282,7 +283,7 @@ class Mapper: + log.info(f"Using default interval 1000 ms for {expanded_name}") + interval = 1000 + mapping_entry = VSSMapping(expanded_name, dbc_name, transform, interval, on_change, +- node["datatype"], node["description"]) ++ node["type"], node["datatype"], node["description"]) + if dbc_name not in self.dbc2val_mapping: + self.dbc2val_mapping[dbc_name] = [] + self.dbc2val_mapping[dbc_name].append(mapping_entry) +@@ -306,7 +307,7 @@ class Mapper: + log.warning(f"interval_ms attribute ignored for {expanded_name}") + + mapping_entry = VSSMapping(expanded_name, dbc_name, transform, interval, on_change, +- node["datatype"], node["description"]) ++ node["type"], node["datatype"], node["description"]) + if dbc_name not in self.val2dbc_mapping: + self.val2dbc_mapping[expanded_name] = [] + self.val2dbc_mapping[expanded_name].append(mapping_entry) +@@ -380,9 +381,12 @@ class Mapper: + """Return a set of all dbc names used for reception""" + return self.dbc2val_mapping.keys() + +- def get_val2dbc_entries(self) -> KeysView: ++ def get_val2dbc_entries(self) -> Dict[str, str]: + """Return a set of all vss names used for reception""" +- return self.val2dbc_mapping.keys() ++ entries: Dict[str, str] = {} ++ for name, mappings in self.val2dbc_mapping.items(): ++ entries[name] = mappings[0].signal_type ++ return entries + + def get_vss_names(self) -> Set[str]: + """Get all VSS names used in mappings, both vss2dbc and dbc2vss""" +diff --git a/dbc2val/dbcfeederlib/serverclientwrapper.py b/dbc2val/dbcfeederlib/serverclientwrapper.py +index 63bc12e..ca11daf 100644 +--- a/dbc2val/dbcfeederlib/serverclientwrapper.py ++++ b/dbc2val/dbcfeederlib/serverclientwrapper.py +@@ -125,6 +125,6 @@ class ServerClientWrapper(clientwrapper.ClientWrapper): + log.info("Feature not implemented") + return False + +- async def subscribe(self, vss_names: List[str], callback): ++ async def subscribe(self, vss_entries: dict[str, str], callback): + log.error("Feature not implemented") + return +-- +2.34.1 + diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc index 0d012139..e638d128 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc @@ -10,6 +10,44 @@ BO_ 985 Vehicle_Status_2: 8 Vector_XXX SG_ PT_EngineSpeed : 23|16@0+ (0.25,0) [0|0] "" Vector_XXX SG_ PT_FuelLevelLow : 55|1@1+ (1,0) [0|1] "" Vector_XXX +BO_ 986 Vehicle_Status_3: 8 Vector_XXX + SG_ PT_HazardOn : 0|1@1+ (1,0) [0|1] "" Vector_XXX + SG_ PT_LeftTurnOn : 1|1@1+ (1,0) [0|1] "" Vector_XXX + SG_ PT_RightTurnOn : 2|1@1+ (1,0) [0|1] "" Vector_XXX + +BO_ 48 HVAC_Control_1: 8 Vector_XXX + SG_ PT_TempLeft : 7|8@0+ (0.4166666667,0) [0|100] "C" Vector_XXX + SG_ PT_TempRight : 15|8@0+ (0.4166666667,0) [0|100] "C" Vector_XXX + SG_ PT_FanSpeed : 39|8@0+ (0.392157,0) [0|100] "%" Vector_XXX + +BO_ 401 Engine: 8 Vector__XXX + SG_ ThrottlePosition : 63|8@0+ (0.392157,0) [0|100.000035] "%" Vector__XXX + +BO_ 381 ABS: 8 Vector__XXX + SG_ VehicleSpeed : 7|12@0+ (0.0625,0) [0|255.9375] "km / h" ECM_HS,BCM_HS + SG_ SteeringPosition : 23|12@0+ (0.0439453125,-90) [-90|89.9560546875] "deg" ECM_HS,BCM_HS + SG_ BrakePressure : 39|8@0+ (75,0) [0|19125] "kPa" ECM_HS,BCM_HS + +BO_ 532 Transmission: 8 Vector__XXX + SG_ Gear : 7|8@0+ (1,-1) [-1|127] "" ECM_HS,BCM_HS + +BO_ 533 Airbag: 8 Vector__XXX + SG_ CollisionIntensity : 7|12@0+ (24.4140625,0) [0|100000] "N" ECM_HS,BCM_HS + +BO_ 534 IMU1: 8 Vector__XXX + SG_ AccelerationX : 7|12@0+ (0.48828125,-1000) [-1000|1000] "m/s^2" ECM_HS,BCM_HS + SG_ AccelerationY : 23|12@0+ (0.48828125,-1000) [-1000|1000] "m/s^2" ECM_HS,BCM_HS + SG_ AccelerationZ : 39|12@0+ (0.48828125,-1000) [-1000|1000] "m/s^2" ECM_HS,BCM_HS + +BO_ 535 IMU2: 8 Vector__XXX + SG_ GyroscopeX : 7|12@0+ (0.48828125,-1000) [-1000|1000] "rad/s" ECM_HS,BCM_HS + SG_ GyroscopeY : 23|12@0+ (0.48828125,-1000) [-1000|1000] "rad/s" ECM_HS,BCM_HS + SG_ GyroscopeZ : 39|12@0+ (0.48828125,-1000) [-1000|1000] "rad/s" ECM_HS,BCM_HS + +BO_ 536 GNSS: 8 Vector__XXX + SG_ Latitude : 7|32@0+ (0.0000000419095158577,-90) [-90|90] "deg" ECM_HS,BCM_HS + SG_ Longitude : 39|32@0+ (0.00000008381903171539,-180) [-180|180] "deg" ECM_HS,BCM_HS + BO_ 33 Steering_Wheel: 8 Vector_XXX SG_ SW_Previous : 39|1@1+ (1,0) [0|1] "" Vector_XXX SG_ SW_VolumeUp : 38|1@1+ (1,0) [0|1] "" Vector_XXX diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/dbc_default_values.json b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/dbc_default_values.json new file mode 100644 index 00000000..0562569d --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/dbc_default_values.json @@ -0,0 +1,40 @@ +{ + "PT_VehicleAvgSpeed" : 0, + "PT_FuelLevelPct" : 0, + "PT_EngineSpeed" : 0, + "PT_FuelLevelLow" : 0, + "PT_TempLeft" : 0, + "PT_TempRight" : 0, + "PT_FanSpeed" : 0, + "ThrottlePosition" : 0, + "VehicleSpeed" : 0, + "SteeringPosition" : 0, + "BrakePressure" : 0, + "Gear" : 0, + "AccelerationX" : 0, + "AccelerationY" : 0, + "AccelerationZ" : 0, + "GyroscopeX" : 0, + "GyroscopeY" : 0, + "GyroscopeZ" : 0, + "Latitude" : 0, + "Longitude" : 0, + "SW_Previous" : 0, + "SW_VolumeUp" : 0, + "SW_Mode" : 0, + "SW_VolumeDown" : 0, + "SW_Next" : 0, + "SW_Info" : 0, + "SW_VolumeMute" : 0, + "SW_Voice" : 0, + "SW_PhoneHangup" : 0, + "SW_PhoneCall" : 0, + "SW_CruiseEnable" : 0, + "SW_CruiseResume" : 0, + "SW_CruiseSet" : 0, + "SW_CruiseCancel" : 0, + "SW_CruiseLimit" : 0, + "SW_CruiseDistance" : 0, + "SW_Horn" : 0, + "SW_LaneDepartureWarning" : 0 +} diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.default b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.default new file mode 100644 index 00000000..5d787158 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.default @@ -0,0 +1,3 @@ +# For output only mode: +#EXTRA_ARGS="--val2dbc --no-dbc2val --dbc-default /etc/kuksa-dbc-feeder/dbc_default_values.json" +#LOG_LEVEL=debug diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service index a30018c6..857f5c7d 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service @@ -4,7 +4,8 @@ Requires=kuksa-databroker.service can-dev-helper.service After=kuksa-databroker.service can-dev-helper.service [Service] -ExecStart=/usr/bin/dbcfeeder.py +EnvironmentFile=-/etc/default/kuksa-dbc-feeder +ExecStart=/usr/bin/dbcfeeder.py $EXTRA_ARGS Restart=on-failure [Install] diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb index 809152bb..281f10ac 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb @@ -13,16 +13,19 @@ SRC_URI = "git://github.com/eclipse/kuksa.val.feeders.git;protocol=https;branch= file://0001-dbc2val-add-installation-mechanism.patch \ file://0002-dbc2val-usability-improvements.patch \ file://0003-dbc2val-fix-token-file-configuration-option.patch \ + file://0004-Enable-val2dbc-for-sensor-values.patch \ file://config.ini \ file://dbc_feeder.token \ file://agl-vcar.dbc \ + file://dbc_default_values.json \ file://kuksa-dbc-feeder.service \ + file://kuksa-dbc-feeder.default \ " SRCREV = "5bb52eca8d79f7c05a024f69b1faab81dabacdcd" S = "${WORKDIR}/git" -inherit setuptools3 systemd +inherit setuptools3 systemd update-alternatives SETUPTOOLS_SETUP_PATH = "${S}/dbc2val" @@ -36,12 +39,18 @@ do_install:append() { # investigation. install -m 0600 ${WORKDIR}/dbc_feeder.token ${D}${sysconfdir}/kuksa-dbc-feeder/ install -m 0644 ${WORKDIR}/agl-vcar.dbc ${D}${sysconfdir}/kuksa-dbc-feeder/ + install -m 0644 ${WORKDIR}/dbc_default_values.json ${D}${sysconfdir}/kuksa-dbc-feeder/ + install -d ${D}${sysconfdir}/default + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.default ${D}${sysconfdir}/default/ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then install -d ${D}${systemd_system_unitdir} install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.service ${D}${systemd_system_unitdir} fi } +ALTERNATIVE_LINK_NAME[kuksa-dbc-feeder.env] = "${sysconfdir}/default/kuksa-dbc-feeder" + +ALTERNATIVE_TARGET_${PN} = "${sysconfdir}/default/kuksa-dbc-feeder.default" FILES:${PN} += "${systemd_system_unitdir}" RDEPENDS:${PN} += " \ diff --git a/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec index 6c0a08ae..b8a01e36 100644 --- a/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec +++ b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec @@ -1,23 +1,184 @@ -# Define DBC mappings for vehicle and engine speeds +# DBC mappings for vehicle and engine speeds Vehicle.Speed: datatype: float type: sensor - dbc: + dbc2vss: signal: PT_VehicleAvgSpeed interval_ms: 100 + vss2dbc: + signal: PT_VehicleAvgSpeed Vehicle.Powertrain.CombustionEngine.Speed: datatype: float type: sensor - dbc: + dbc2vss: signal: PT_EngineSpeed interval_ms: 100 transform: math: "floor(x+0.5)" + vss2dbc: + signal: PT_EngineSpeed + +# DBC mappings for other signals for V2C demo + +Vehicle.Body.Lights.Hazard.IsSignaling: + datatype: boolean + type: actuator + dbc2vss: + signal: PT_HazardOn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Body.Lights.DirectionIndicator.Left.IsSignaling: + datatype: boolean + type: actuator + dbc2vss: + signal: PT_LeftTurnOn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Body.Lights.DirectionIndicator.Right.IsSignaling: + datatype: boolean + type: actuator + dbc2vss: + signal: PT_RightTurnOn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.OBD.ThrottlePosition: + datatype: float + type: sensor + dbc2vss: + signal: ThrottlePosition + interval_ms: 100 + vss2dbc: + signal: ThrottlePosition + +Vehicle.Chassis.SteeringWheel.Angle: + datatype: int16 + type: sensor + dbc2vss: + signal: SteeringPosition + interval_ms: 100 + vss2dbc: + signal: SteeringPosition + +Vehicle.Chassis.Brake.PedalPosition: + datatype: uint8 + type: sensor + dbc2vss: + signal: BrakePressure + interval_ms: 100 + transform: + math: "floor(x / 19125 * 100 + 0.5)" + vss2dbc: + signal: BrakePressure + transform: + math: "x * 191.25" + +Vehicle.Powertrain.Transmission.SelectedGear: + datatype: int8 + type: sensor + dbc2vss: + signal: Gear + interval_ms: 100 + vss2dbc: + signal: Gear + +Vehicle.Acceleration.Lateral: + datatype: float + type: sensor + dbc2vss: + signal: AccelerationX + interval_ms: 100 + vss2dbc: + signal: AccelerationX + +Vehicle.Acceleration.Longitudinal: + datatype: float + type: sensor + dbc2vss: + signal: AccelerationY + interval_ms: 100 + vss2dbc: + signal: AccelerationY + +Vehicle.Acceleration.Vertical: + datatype: float + type: sensor + dbc2vss: + signal: AccelerationZ + interval_ms: 100 + vss2dbc: + signal: AccelerationZ + +Vehicle.AngularVelocity.Pitch: + datatype: float + type: sensor + dbc2vss: + signal: GyroscopeX + interval_ms: 100 + vss2dbc: + signal: GyroscopeX + +Vehicle.AngularVelocity.Roll: + datatype: float + type: sensor + dbc2vss: + signal: GyroscopeY + interval_ms: 100 + vss2dbc: + signal: GyroscopeY + +Vehicle.AngularVelocity.Yaw: + datatype: float + type: sensor + dbc2vss: + signal: GyroscopeZ + interval_ms: 100 + vss2dbc: + signal: GyroscopeZ + +Vehicle.CurrentLocation.Latitude: + datatype: double + type: sensor + dbc2vss: + signal: Latitude + interval_ms: 100 + vss2dbc: + signal: Latitude + +Vehicle.CurrentLocation.Longitude: + datatype: double + type: sensor + dbc2vss: + signal: Longitude + interval_ms: 100 + vss2dbc: + signal: Longitude + +# +# AGL VSS additions +# -# Define extra navigation state signals +# Extra navigation state signals Vehicle.Cabin.Infotainment.Navigation.State: datatype: string @@ -32,7 +193,7 @@ Vehicle.Cabin.Infotainment.Navigation.ElapsedDistance: description: Navigation elapsed distance. -# Define audio control signals +# Extra audio control signals Vehicle.Cabin.Infotainment.Media.Audio: type: branch @@ -71,7 +232,7 @@ Vehicle.Cabin.Infotainment.Media.Audio.Treble: description: Audio high-frequency filter control. -# Define extra steering wheel switch signals, including DBC mappings +# Extra steering wheel switch signals, including DBC mappings Vehicle.Cabin.SteeringWheel: type: branch @@ -85,7 +246,7 @@ Vehicle.Cabin.SteeringWheel.Switches.VolumeUp: datatype: boolean type: sensor description: Steering wheel volume up switch engaged. - dbc: + dbc2vss: signal: SW_VolumeUp on_change: true transform: @@ -99,7 +260,7 @@ Vehicle.Cabin.SteeringWheel.Switches.VolumeDown: datatype: boolean type: sensor description: Steering wheel volume down switch engaged. - dbc: + dbc2vss: signal: SW_VolumeDown on_change: true transform: @@ -113,7 +274,7 @@ Vehicle.Cabin.SteeringWheel.Switches.VolumeMute: datatype: boolean type: sensor description: Steering wheel volume mute switch engaged. - dbc: + dbc2vss: signal: SW_VolumeMute on_change: true transform: @@ -127,7 +288,7 @@ Vehicle.Cabin.SteeringWheel.Switches.Next: datatype: boolean type: sensor description: Steering wheel next switch engaged. - dbc: + dbc2vss: signal: SW_Next on_change: true transform: @@ -141,7 +302,7 @@ Vehicle.Cabin.SteeringWheel.Switches.Previous: datatype: boolean type: sensor description: Steering wheel previous switch engaged. - dbc: + dbc2vss: signal: SW_Previous on_change: true transform: @@ -155,7 +316,7 @@ Vehicle.Cabin.SteeringWheel.Switches.Mode: datatype: boolean type: sensor description: Steering wheel mode switch engaged. - dbc: + dbc2vss: signal: SW_Mode on_change: true transform: @@ -169,7 +330,7 @@ Vehicle.Cabin.SteeringWheel.Switches.Info: datatype: boolean type: sensor description: Steering wheel info switch engaged. - dbc: + dbc2vss: signal: SW_Info on_change: true transform: @@ -183,7 +344,7 @@ Vehicle.Cabin.SteeringWheel.Switches.CruiseEnable: datatype: boolean type: sensor description: Steering wheel cruise enable switch engaged. - dbc: + dbc2vss: signal: SW_CruiseEnable on_change: true transform: @@ -197,7 +358,7 @@ Vehicle.Cabin.SteeringWheel.Switches.CruiseSet: datatype: boolean type: sensor description: Steering wheel cruise set switch engaged. - dbc: + dbc2vss: signal: SW_CruiseSet on_change: true transform: @@ -211,7 +372,7 @@ Vehicle.Cabin.SteeringWheel.Switches.CruiseResume: datatype: boolean type: sensor description: Steering wheel cruise resume switch engaged. - dbc: + dbc2vss: signal: SW_CruiseResume on_change: true transform: @@ -225,7 +386,7 @@ Vehicle.Cabin.SteeringWheel.Switches.CruiseCancel: datatype: boolean type: sensor description: Steering wheel cruise cancel switch engaged. - dbc: + dbc2vss: signal: SW_CruiseCancel on_change: true transform: @@ -239,7 +400,7 @@ Vehicle.Cabin.SteeringWheel.Switches.CruiseLimit: datatype: boolean type: sensor description: Steering wheel cruise limit switch engaged. - dbc: + dbc2vss: signal: SW_CruiseLimit on_change: true transform: @@ -253,7 +414,7 @@ Vehicle.Cabin.SteeringWheel.Switches.CruiseDistance: datatype: boolean type: sensor description: Steering wheel cruise distance switch engaged. - dbc: + dbc2vss: signal: SW_CruiseDistance on_change: true transform: @@ -267,7 +428,7 @@ Vehicle.Cabin.SteeringWheel.Switches.Voice: datatype: boolean type: sensor description: Steering wheel voice switch engaged. - dbc: + dbc2vss: signal: SW_Voice on_change: true transform: @@ -281,7 +442,7 @@ Vehicle.Cabin.SteeringWheel.Switches.PhoneCall: datatype: boolean type: sensor description: Steering wheel phone call switch engaged. - dbc: + dbc2vss: signal: SW_PhoneCall on_change: true transform: @@ -295,7 +456,7 @@ Vehicle.Cabin.SteeringWheel.Switches.PhoneHangup: datatype: boolean type: sensor description: Steering wheel phone hangup switch engaged. - dbc: + dbc2vss: signal: SW_PhoneHangup on_change: true transform: @@ -309,7 +470,7 @@ Vehicle.Cabin.SteeringWheel.Switches.Horn: datatype: boolean type: sensor description: Steering wheel horn switch engaged. - dbc: + dbc2vss: signal: SW_Horn on_change: true transform: @@ -323,7 +484,7 @@ Vehicle.Cabin.SteeringWheel.Switches.LaneDepartureWarning: datatype: boolean type: sensor description: Steering wheel lane departure warning switch engaged. - dbc: + dbc2vss: signal: SW_LaneDepartureWarning on_change: true transform: diff --git a/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.control-panel b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.control-panel new file mode 100644 index 00000000..b5e2b8a3 --- /dev/null +++ b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.control-panel @@ -0,0 +1,446 @@ +# DBC mappings for vehicle and engine speeds + +Vehicle.Speed: + datatype: float + type: sensor + vss2dbc: + signal: PT_VehicleAvgSpeed + +Vehicle.Powertrain.CombustionEngine.Speed: + datatype: float + type: sensor + vss2dbc: + signal: PT_EngineSpeed + +# DBC mappings for other signals for V2C demo + +Vehicle.Body.Lights.Hazard.IsSignaling: + datatype: boolean + type: actuator + vss2dbc: + signal: PT_HazardOn + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Body.Lights.DirectionIndicator.Left.IsSignaling: + datatype: boolean + type: actuator + vss2dbc: + signal: PT_LeftTurnOn + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Body.Lights.DirectionIndicator.Right.IsSignaling: + datatype: boolean + type: actuator + vss2dbc: + signal: PT_RightTurnOn + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.OBD.ThrottlePosition: + datatype: float + type: sensor + vss2dbc: + signal: ThrottlePosition + +Vehicle.Chassis.SteeringWheel.Angle: + datatype: int16 + type: sensor + vss2dbc: + signal: SteeringPosition + +Vehicle.Chassis.Brake.PedalPosition: + datatype: uint8 + type: sensor + vss2dbc: + signal: BrakePressure + transform: + math: "x * 191.25" + +Vehicle.Powertrain.Transmission.SelectedGear: + datatype: int8 + type: sensor + vss2dbc: + signal: Gear + +Vehicle.Acceleration.Lateral: + datatype: float + type: sensor + vss2dbc: + signal: AccelerationX + +Vehicle.Acceleration.Longitudinal: + datatype: float + type: sensor + vss2dbc: + signal: AccelerationY + +Vehicle.Acceleration.Vertical: + datatype: float + type: sensor + vss2dbc: + signal: AccelerationZ + +Vehicle.AngularVelocity.Pitch: + datatype: float + type: sensor + vss2dbc: + signal: GyroscopeX + +Vehicle.AngularVelocity.Roll: + datatype: float + type: sensor + vss2dbc: + signal: GyroscopeY + +Vehicle.AngularVelocity.Yaw: + datatype: float + type: sensor + vss2dbc: + signal: GyroscopeZ + +Vehicle.CurrentLocation.Latitude: + datatype: double + type: sensor + vss2dbc: + signal: Latitude + +Vehicle.CurrentLocation.Longitude: + datatype: double + type: sensor + vss2dbc: + signal: Longitude + + +# +# AGL VSS additions +# + +# Extra navigation state signals + +Vehicle.Cabin.Infotainment.Navigation.State: + datatype: string + type: sensor + allowed: [ 'UNKNOWN', 'ACTIVE', 'ARRIVED', 'STOPPED' ] + description: Navigation state. + +Vehicle.Cabin.Infotainment.Navigation.ElapsedDistance: + datatype: float + type: sensor + unit: km + description: Navigation elapsed distance. + + +# Extra audio control signals + +Vehicle.Cabin.Infotainment.Media.Audio: + type: branch + description: Media audio controls. + +Vehicle.Cabin.Infotainment.Media.Audio.Balance: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio left/right balance. + +Vehicle.Cabin.Infotainment.Media.Audio.Fade: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio front/rear balance. + +Vehicle.Cabin.Infotainment.Media.Audio.Bass: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio low-frequency filter control. + +Vehicle.Cabin.Infotainment.Media.Audio.Treble: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio high-frequency filter control. + + +# Extra steering wheel switch signals, including DBC mappings + +Vehicle.Cabin.SteeringWheel: + type: branch + description: AGL steering wheel demo data. + +Vehicle.Cabin.SteeringWheel.Switches: + type: branch + description: AGL steering wheel demo switch data. + +Vehicle.Cabin.SteeringWheel.Switches.VolumeUp: + datatype: boolean + type: sensor + description: Steering wheel volume up switch engaged. + dbc2vss: + signal: SW_VolumeUp + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.VolumeDown: + datatype: boolean + type: sensor + description: Steering wheel volume down switch engaged. + dbc2vss: + signal: SW_VolumeDown + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.VolumeMute: + datatype: boolean + type: sensor + description: Steering wheel volume mute switch engaged. + dbc2vss: + signal: SW_VolumeMute + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Next: + datatype: boolean + type: sensor + description: Steering wheel next switch engaged. + dbc2vss: + signal: SW_Next + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Previous: + datatype: boolean + type: sensor + description: Steering wheel previous switch engaged. + dbc2vss: + signal: SW_Previous + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Mode: + datatype: boolean + type: sensor + description: Steering wheel mode switch engaged. + dbc2vss: + signal: SW_Mode + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Info: + datatype: boolean + type: sensor + description: Steering wheel info switch engaged. + dbc2vss: + signal: SW_Info + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseEnable: + datatype: boolean + type: sensor + description: Steering wheel cruise enable switch engaged. + dbc2vss: + signal: SW_CruiseEnable + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseSet: + datatype: boolean + type: sensor + description: Steering wheel cruise set switch engaged. + dbc2vss: + signal: SW_CruiseSet + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseResume: + datatype: boolean + type: sensor + description: Steering wheel cruise resume switch engaged. + dbc2vss: + signal: SW_CruiseResume + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseCancel: + datatype: boolean + type: sensor + description: Steering wheel cruise cancel switch engaged. + dbc2vss: + signal: SW_CruiseCancel + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseLimit: + datatype: boolean + type: sensor + description: Steering wheel cruise limit switch engaged. + dbc2vss: + signal: SW_CruiseLimit + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseDistance: + datatype: boolean + type: sensor + description: Steering wheel cruise distance switch engaged. + dbc2vss: + signal: SW_CruiseDistance + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Voice: + datatype: boolean + type: sensor + description: Steering wheel voice switch engaged. + dbc2vss: + signal: SW_Voice + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.PhoneCall: + datatype: boolean + type: sensor + description: Steering wheel phone call switch engaged. + dbc2vss: + signal: SW_PhoneCall + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.PhoneHangup: + datatype: boolean + type: sensor + description: Steering wheel phone hangup switch engaged. + dbc2vss: + signal: SW_PhoneHangup + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Horn: + datatype: boolean + type: sensor + description: Steering wheel horn switch engaged. + dbc2vss: + signal: SW_Horn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.LaneDepartureWarning: + datatype: boolean + type: sensor + description: Steering wheel lane departure warning switch engaged. + dbc2vss: + signal: SW_LaneDepartureWarning + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true diff --git a/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-control-panel b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-control-panel new file mode 100644 index 00000000..6b0a9a38 --- /dev/null +++ b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-control-panel @@ -0,0 +1,447 @@ +# DBC mappings for vehicle and engine speeds + +Vehicle.Speed: + datatype: float + type: sensor + dbc2vss: + signal: PT_VehicleAvgSpeed + interval_ms: 100 + +Vehicle.Powertrain.CombustionEngine.Speed: + datatype: float + type: sensor + dbc2vss: + signal: PT_EngineSpeed + interval_ms: 100 + transform: + math: "floor(x+0.5)" + +# DBC mappings for other signals for V2C demo + +Vehicle.Body.Lights.Hazard.IsSignaling: + datatype: boolean + type: actuator + dbc2vss: + signal: PT_HazardOn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Body.Lights.DirectionIndicator.Left.IsSignaling: + datatype: boolean + type: actuator + dbc2vss: + signal: PT_LeftTurnOn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Body.Lights.DirectionIndicator.Right.IsSignaling: + datatype: boolean + type: actuator + dbc2vss: + signal: PT_RightTurnOn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.OBD.ThrottlePosition: + datatype: float + type: sensor + dbc2vss: + signal: ThrottlePosition + interval_ms: 100 + +Vehicle.Chassis.SteeringWheel.Angle: + datatype: int16 + type: sensor + dbc2vss: + signal: SteeringPosition + interval_ms: 100 + +Vehicle.Chassis.Brake.PedalPosition: + datatype: uint8 + type: sensor + dbc2vss: + signal: BrakePressure + interval_ms: 100 + transform: + math: "floor(x / 19125 * 100 + 0.5)" + +Vehicle.Powertrain.Transmission.SelectedGear: + datatype: int8 + type: sensor + dbc2vss: + signal: Gear + interval_ms: 100 + +Vehicle.Acceleration.Lateral: + datatype: float + type: sensor + dbc2vss: + signal: AccelerationX + interval_ms: 100 + +Vehicle.Acceleration.Longitudinal: + datatype: float + type: sensor + dbc2vss: + signal: AccelerationY + interval_ms: 100 + +Vehicle.Acceleration.Vertical: + datatype: float + type: sensor + dbc2vss: + signal: AccelerationZ + interval_ms: 100 + +Vehicle.AngularVelocity.Pitch: + datatype: float + type: sensor + dbc2vss: + signal: GyroscopeX + interval_ms: 100 + +Vehicle.AngularVelocity.Roll: + datatype: float + type: sensor + dbc2vss: + signal: GyroscopeY + interval_ms: 100 + +Vehicle.AngularVelocity.Yaw: + datatype: float + type: sensor + dbc2vss: + signal: GyroscopeZ + interval_ms: 100 + +Vehicle.CurrentLocation.Latitude: + datatype: double + type: sensor + dbc2vss: + signal: Latitude + interval_ms: 100 + +Vehicle.CurrentLocation.Longitude: + datatype: double + type: sensor + dbc2vss: + signal: Longitude + interval_ms: 100 + + +# +# AGL VSS additions +# + +# Extra navigation state signals + +Vehicle.Cabin.Infotainment.Navigation.State: + datatype: string + type: sensor + allowed: [ 'UNKNOWN', 'ACTIVE', 'ARRIVED', 'STOPPED' ] + description: Navigation state. + +Vehicle.Cabin.Infotainment.Navigation.ElapsedDistance: + datatype: float + type: sensor + unit: km + description: Navigation elapsed distance. + + +# Extra audio control signals + +Vehicle.Cabin.Infotainment.Media.Audio: + type: branch + description: Media audio controls. + +Vehicle.Cabin.Infotainment.Media.Audio.Balance: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio left/right balance. + +Vehicle.Cabin.Infotainment.Media.Audio.Fade: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio front/rear balance. + +Vehicle.Cabin.Infotainment.Media.Audio.Bass: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio low-frequency filter control. + +Vehicle.Cabin.Infotainment.Media.Audio.Treble: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio high-frequency filter control. + + +# Extra steering wheel switch signals, including DBC mappings + +Vehicle.Cabin.SteeringWheel: + type: branch + description: AGL steering wheel demo data. + +Vehicle.Cabin.SteeringWheel.Switches: + type: branch + description: AGL steering wheel demo switch data. + +Vehicle.Cabin.SteeringWheel.Switches.VolumeUp: + datatype: boolean + type: sensor + description: Steering wheel volume up switch engaged. + vss2dbc: + signal: SW_VolumeUp + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.VolumeDown: + datatype: boolean + type: sensor + description: Steering wheel volume down switch engaged. + vss2dbc: + signal: SW_VolumeDown + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.VolumeMute: + datatype: boolean + type: sensor + description: Steering wheel volume mute switch engaged. + vss2dbc: + signal: SW_VolumeMute + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.Next: + datatype: boolean + type: sensor + description: Steering wheel next switch engaged. + vss2dbc: + signal: SW_Next + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.Previous: + datatype: boolean + type: sensor + description: Steering wheel previous switch engaged. + vss2dbc: + signal: SW_Previous + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.Mode: + datatype: boolean + type: sensor + description: Steering wheel mode switch engaged. + vss2dbc: + signal: SW_Mode + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.Info: + datatype: boolean + type: sensor + description: Steering wheel info switch engaged. + vss2dbc: + signal: SW_Info + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.CruiseEnable: + datatype: boolean + type: sensor + description: Steering wheel cruise enable switch engaged. + vss2dbc: + signal: SW_CruiseEnable + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.CruiseSet: + datatype: boolean + type: sensor + description: Steering wheel cruise set switch engaged. + vss2dbc: + signal: SW_CruiseSet + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.CruiseResume: + datatype: boolean + type: sensor + description: Steering wheel cruise resume switch engaged. + vss2dbc: + signal: SW_CruiseResume + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.CruiseCancel: + datatype: boolean + type: sensor + description: Steering wheel cruise cancel switch engaged. + vss2dbc: + signal: SW_CruiseCancel + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.CruiseLimit: + datatype: boolean + type: sensor + description: Steering wheel cruise limit switch engaged. + vss2dbc: + signal: SW_CruiseLimit + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.CruiseDistance: + datatype: boolean + type: sensor + description: Steering wheel cruise distance switch engaged. + vss2dbc: + signal: SW_CruiseDistance + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.Voice: + datatype: boolean + type: sensor + description: Steering wheel voice switch engaged. + vss2dbc: + signal: SW_Voice + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.PhoneCall: + datatype: boolean + type: sensor + description: Steering wheel phone call switch engaged. + vss2dbc: + signal: SW_PhoneCall + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.PhoneHangup: + datatype: boolean + type: sensor + description: Steering wheel phone hangup switch engaged. + vss2dbc: + signal: SW_PhoneHangup + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.Horn: + datatype: boolean + type: sensor + description: Steering wheel horn switch engaged. + vss2dbc: + signal: SW_Horn + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 + +Vehicle.Cabin.SteeringWheel.Switches.LaneDepartureWarning: + datatype: boolean + type: sensor + description: Steering wheel lane departure warning switch engaged. + vss2dbc: + signal: SW_LaneDepartureWarning + transform: + mapping: + - from: false + to: 0 + - from: true + to: 1 diff --git a/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-hardware b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-hardware new file mode 100644 index 00000000..869b33d3 --- /dev/null +++ b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-hardware @@ -0,0 +1,341 @@ +# DBC mappings for other signals for V2C demo + +# DBC mappings for demo HVAC + +Vehicle.Cabin.HVAC.Station.Row1.Driver.Temperature: + datatype: int8 + type: actuator + vss2dbc: + signal: PT_TempLeft + +Vehicle.Cabin.HVAC.Station.Row1.Passenger.Temperature: + datatype: int8 + type: actuator + vss2dbc: + signal: PT_TempRight + +Vehicle.Cabin.HVAC.Station.Row1.Driver.FanSpeed: + datatype: uint8 + type: actuator + vss2dbc: + signal: PT_FanSpeed + +# +# AGL VSS additions +# + +# Extra navigation state signals + +Vehicle.Cabin.Infotainment.Navigation.State: + datatype: string + type: sensor + allowed: [ 'UNKNOWN', 'ACTIVE', 'ARRIVED', 'STOPPED' ] + description: Navigation state. + +Vehicle.Cabin.Infotainment.Navigation.ElapsedDistance: + datatype: float + type: sensor + unit: km + description: Navigation elapsed distance. + + +# Extra audio control signals + +Vehicle.Cabin.Infotainment.Media.Audio: + type: branch + description: Media audio controls. + +Vehicle.Cabin.Infotainment.Media.Audio.Balance: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio left/right balance. + +Vehicle.Cabin.Infotainment.Media.Audio.Fade: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio front/rear balance. + +Vehicle.Cabin.Infotainment.Media.Audio.Bass: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio low-frequency filter control. + +Vehicle.Cabin.Infotainment.Media.Audio.Treble: + datatype: int8 + type: actuator + min: -100 + max: 100 + unit: percent + description: Audio high-frequency filter control. + + +# Extra steering wheel switch signals, including DBC mappings + +Vehicle.Cabin.SteeringWheel: + type: branch + description: AGL steering wheel demo data. + +Vehicle.Cabin.SteeringWheel.Switches: + type: branch + description: AGL steering wheel demo switch data. + +Vehicle.Cabin.SteeringWheel.Switches.VolumeUp: + datatype: boolean + type: sensor + description: Steering wheel volume up switch engaged. + dbc2vss: + signal: SW_VolumeUp + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.VolumeDown: + datatype: boolean + type: sensor + description: Steering wheel volume down switch engaged. + dbc2vss: + signal: SW_VolumeDown + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.VolumeMute: + datatype: boolean + type: sensor + description: Steering wheel volume mute switch engaged. + dbc2vss: + signal: SW_VolumeMute + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Next: + datatype: boolean + type: sensor + description: Steering wheel next switch engaged. + dbc2vss: + signal: SW_Next + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Previous: + datatype: boolean + type: sensor + description: Steering wheel previous switch engaged. + dbc2vss: + signal: SW_Previous + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Mode: + datatype: boolean + type: sensor + description: Steering wheel mode switch engaged. + dbc2vss: + signal: SW_Mode + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Info: + datatype: boolean + type: sensor + description: Steering wheel info switch engaged. + dbc2vss: + signal: SW_Info + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseEnable: + datatype: boolean + type: sensor + description: Steering wheel cruise enable switch engaged. + dbc2vss: + signal: SW_CruiseEnable + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseSet: + datatype: boolean + type: sensor + description: Steering wheel cruise set switch engaged. + dbc2vss: + signal: SW_CruiseSet + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseResume: + datatype: boolean + type: sensor + description: Steering wheel cruise resume switch engaged. + dbc2vss: + signal: SW_CruiseResume + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseCancel: + datatype: boolean + type: sensor + description: Steering wheel cruise cancel switch engaged. + dbc2vss: + signal: SW_CruiseCancel + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseLimit: + datatype: boolean + type: sensor + description: Steering wheel cruise limit switch engaged. + dbc2vss: + signal: SW_CruiseLimit + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.CruiseDistance: + datatype: boolean + type: sensor + description: Steering wheel cruise distance switch engaged. + dbc2vss: + signal: SW_CruiseDistance + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Voice: + datatype: boolean + type: sensor + description: Steering wheel voice switch engaged. + dbc2vss: + signal: SW_Voice + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.PhoneCall: + datatype: boolean + type: sensor + description: Steering wheel phone call switch engaged. + dbc2vss: + signal: SW_PhoneCall + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.PhoneHangup: + datatype: boolean + type: sensor + description: Steering wheel phone hangup switch engaged. + dbc2vss: + signal: SW_PhoneHangup + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.Horn: + datatype: boolean + type: sensor + description: Steering wheel horn switch engaged. + dbc2vss: + signal: SW_Horn + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true + +Vehicle.Cabin.SteeringWheel.Switches.LaneDepartureWarning: + datatype: boolean + type: sensor + description: Steering wheel lane departure warning switch engaged. + dbc2vss: + signal: SW_LaneDepartureWarning + on_change: true + transform: + mapping: + - from: 0 + to: false + - from: 1 + to: true diff --git a/recipes-connectivity/vss/vss-agl_4.0.bb b/recipes-connectivity/vss/vss-agl_4.0.bb index 83fb4b1a..00d83a7a 100644 --- a/recipes-connectivity/vss/vss-agl_4.0.bb +++ b/recipes-connectivity/vss/vss-agl_4.0.bb @@ -8,29 +8,58 @@ inherit allarch update-alternatives require vss.inc -SRC_URI += "file://agl_vss_overlay.vspec" - +SRC_URI += "file://agl_vss_overlay.vspec \ + file://agl_vss_overlay.vspec.control-panel \ + file://agl_vss_overlay.vspec.gw-control-panel \ + file://agl_vss_overlay.vspec.gw-hardware \ +" # Since we're not relying on the simple upstream repo Makefile, use # best practices and output into a separate directory. B = "${WORKDIR}/build" do_configure[noexec] = "1" -VSPEC2JSON_OPTS = "-e dbc -o ${WORKDIR}/agl_vss_overlay.vspec --no-uuid --json-pretty" +#VSPEC2JSON_OPTS = "-e dbc2vss,vss2dbc -o ${WORKDIR}/agl_vss_overlay.vspec --no-uuid --json-pretty" +VSPEC2JSON_OPTS = "-e dbc2vss,vss2dbc --no-uuid --json-pretty" do_compile() { - vspec2json.py -I ${S}/spec ${VSPEC2JSON_OPTS} -u ${S}/spec/units.yaml ${S}/spec/VehicleSignalSpecification.vspec vss_rel_${PV}-agl.json + vspec2json.py -I ${S}/spec ${VSPEC2JSON_OPTS} -o ${WORKDIR}/agl_vss_overlay.vspec -u ${S}/spec/units.yaml ${S}/spec/VehicleSignalSpecification.vspec vss_rel_${PV}-agl.json + vspec2json.py -I ${S}/spec ${VSPEC2JSON_OPTS} -o ${WORKDIR}/agl_vss_overlay.vspec.control-panel -u ${S}/spec/units.yaml ${S}/spec/VehicleSignalSpecification.vspec vss_rel_${PV}-agl-control-panel.json + vspec2json.py -I ${S}/spec ${VSPEC2JSON_OPTS} -o ${WORKDIR}/agl_vss_overlay.vspec.gw-control-panel -u ${S}/spec/units.yaml ${S}/spec/VehicleSignalSpecification.vspec vss_rel_${PV}-agl-gw-control-panel.json + vspec2json.py -I ${S}/spec ${VSPEC2JSON_OPTS} -o ${WORKDIR}/agl_vss_overlay.vspec.gw-hardware -u ${S}/spec/units.yaml ${S}/spec/VehicleSignalSpecification.vspec vss_rel_${PV}-agl-gw-hardware.json } do_install() { install -d ${D}${datadir}/vss install -m 0644 vss_rel_${PV}-agl.json ${D}${datadir}/vss/ + install -m 0644 vss_rel_${PV}-agl-control-panel.json ${D}${datadir}/vss/ + install -m 0644 vss_rel_${PV}-agl-gw-control-panel.json ${D}${datadir}/vss/ + install -m 0644 vss_rel_${PV}-agl-gw-hardware.json ${D}${datadir}/vss/ } +PACKAGE_BEFORE_PN += "${PN}-control-panel ${PN}-gw-control-panel ${PN}-gw-hardware" + ALTERNATIVE_LINK_NAME[vss.json] = "${datadir}/vss/vss.json" -ALTERNATIVE_PRIORITY = "20" ALTERNATIVE:${PN} = "vss.json" ALTERNATIVE_TARGET_${PN} = "${datadir}/vss/vss_rel_${PV}-agl.json" +ALTERNATIVE_PRIORITY_${PN} = "20" +FILES:${PN} += "${datadir}/vss/vss_rel_${PV}-agl.json" + +ALTERNATIVE:${PN}-control-panel = "vss.json" +ALTERNATIVE_TARGET_${PN}-control-panel = "${datadir}/vss/vss_rel_${PV}-agl-control-panel.json" +ALTERNATIVE_PRIORITY_${PN}-control-panel = "30" +FILES:${PN}-control-panel += "${datadir}/vss/vss_rel_${PV}-agl-control-panel.json" + +ALTERNATIVE:${PN}-gw-hardware = "vss.json" +ALTERNATIVE_TARGET_${PN}-gw-hardware = "${datadir}/vss/vss_rel_${PV}-agl-gw-hardware.json" +ALTERNATIVE_PRIORITY_${PN}-gw-hardware = "31" +FILES:${PN}-gw-hardware += "${datadir}/vss/vss_rel_${PV}-agl-gw-hardware.json" -FILES:${PN} += "${datadir}/vss/" +# Higher priority than gw-hardware, as we want it to be the default +# if both are installed (as is the case with the full gateway demo +# setup). +ALTERNATIVE:${PN}-gw-control-panel = "vss.json" +ALTERNATIVE_TARGET_${PN}-gw-control-panel = "${datadir}/vss/vss_rel_${PV}-agl-gw-control-panel.json" +ALTERNATIVE_PRIORITY_${PN}-gw-control-panel = "32" +FILES:${PN}-gw-control-panel += "${datadir}/vss/vss_rel_${PV}-agl-gw-control-panel.json" diff --git a/recipes-demo/agl-service-audiomixer/agl-service-audiomixer/agl-service-audiomixer.conf b/recipes-demo/agl-service-audiomixer/agl-service-audiomixer/agl-service-audiomixer.conf.default index e0d84f8f..e0d84f8f 100644 --- a/recipes-demo/agl-service-audiomixer/agl-service-audiomixer/agl-service-audiomixer.conf +++ b/recipes-demo/agl-service-audiomixer/agl-service-audiomixer/agl-service-audiomixer.conf.default diff --git a/recipes-demo/agl-service-audiomixer/agl-service-audiomixer/agl-service-audiomixer.conf.gateway-demo b/recipes-demo/agl-service-audiomixer/agl-service-audiomixer/agl-service-audiomixer.conf.gateway-demo new file mode 100644 index 00000000..c6095ac3 --- /dev/null +++ b/recipes-demo/agl-service-audiomixer/agl-service-audiomixer/agl-service-audiomixer.conf.gateway-demo @@ -0,0 +1,4 @@ +[kuksa-client] +hostname = "192.168.10.4" +tls-server-name = "localhost" +authorization = "/etc/xdg/AGL/agl-service-audiomixer/agl-service-audiomixer.token" diff --git a/recipes-demo/agl-service-audiomixer/agl-service-audiomixer_git.bb b/recipes-demo/agl-service-audiomixer/agl-service-audiomixer_git.bb index e6b7d64b..a1f6f795 100644 --- a/recipes-demo/agl-service-audiomixer/agl-service-audiomixer_git.bb +++ b/recipes-demo/agl-service-audiomixer/agl-service-audiomixer_git.bb @@ -20,7 +20,8 @@ DEPENDS = " \ " SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-audiomixer.git;protocol=https;branch=${AGL_BRANCH} \ - file://agl-service-audiomixer.conf \ + file://agl-service-audiomixer.conf.default \ + file://agl-service-audiomixer.conf.gateway-demo \ file://agl-service-audiomixer.token \ " SRCREV = "0ff3ef1b254364639fc42495bbcfb4760250990a" @@ -28,7 +29,7 @@ SRCREV = "0ff3ef1b254364639fc42495bbcfb4760250990a" PV = "2.0+git${SRCPV}" S = "${WORKDIR}/git" -inherit meson pkgconfig systemd +inherit meson pkgconfig systemd update-alternatives EXTRA_OEMESON += "-Dprotos=${STAGING_INCDIR}" @@ -43,10 +44,28 @@ do_install:append() { # until a packaging/sandboxing/MAC scheme is (re)implemented or # something like OAuth is plumbed in as an alternative. install -d ${D}${sysconfdir}/xdg/AGL/agl-service-audiomixer - install -m 0644 ${WORKDIR}/agl-service-audiomixer.conf ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/agl-service-audiomixer.conf.default ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/agl-service-audiomixer.conf.gateway-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/agl-service-audiomixer.token ${D}${sysconfdir}/xdg/AGL/agl-service-audiomixer/ } FILES:${PN} += "${systemd_system_unitdir}" -RDEPENDS:${PN} += "kuksa-databroker" +RDEPENDS:${PN} += "${PN}-conf" + +ALTERNATIVE_LINK_NAME[agl-service-audiomixer.conf] = "${sysconfdir}/xdg/AGL/agl-service-audiomixer.conf" + +PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-gateway-demo" + +FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/agl-service-audiomixer.conf.default" +RDEPENDS:${PN}-conf = "${PN}" +RPROVIDES:${PN}-conf = "agl-service-audiomixer.conf" +ALTERNATIVE:${PN}-conf = "agl-service-audiomixer.conf" +ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/agl-service-audiomixer.conf.default" + +FILES:${PN}-conf-gateway-demo += "${sysconfdir}/xdg/AGL/agl-service-audiomixer.conf.gateway-demo" +RDEPENDS:${PN}-conf-gateway-demo = "${PN}" +RPROVIDES:${PN}-conf-gateway-demo = "agl-service-audiomixer.conf" +ALTERNATIVE:${PN}-conf-gateway-demo = "agl-service-audiomixer.conf" +ALTERNATIVE_TARGET_${PN}-conf-gateway-demo = "${sysconfdir}/xdg/AGL/agl-service-audiomixer.conf.gateway-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-gateway-demo = "20" diff --git a/recipes-demo/agl-service-hvac/agl-service-hvac/agl-service-hvac.conf b/recipes-demo/agl-service-hvac/agl-service-hvac/agl-service-hvac.conf.default index ca2f4f69..ca2f4f69 100644 --- a/recipes-demo/agl-service-hvac/agl-service-hvac/agl-service-hvac.conf +++ b/recipes-demo/agl-service-hvac/agl-service-hvac/agl-service-hvac.conf.default diff --git a/recipes-demo/agl-service-hvac/agl-service-hvac/agl-service-hvac.conf.gateway-demo b/recipes-demo/agl-service-hvac/agl-service-hvac/agl-service-hvac.conf.gateway-demo new file mode 100644 index 00000000..929bbc1b --- /dev/null +++ b/recipes-demo/agl-service-hvac/agl-service-hvac/agl-service-hvac.conf.gateway-demo @@ -0,0 +1,4 @@ +[kuksa-client] +hostname = "192.168.10.4" +tls-server-name = "localhost" +authorization = "/etc/xdg/AGL/agl-service-hvac/agl-service-hvac.token" diff --git a/recipes-demo/agl-service-hvac/agl-service-hvac_git.bb b/recipes-demo/agl-service-hvac/agl-service-hvac_git.bb index 73d35f55..721cdd7d 100644 --- a/recipes-demo/agl-service-hvac/agl-service-hvac_git.bb +++ b/recipes-demo/agl-service-hvac/agl-service-hvac_git.bb @@ -18,7 +18,8 @@ DEPENDS = " \ " SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/agl-service-hvac;protocol=https;branch=${AGL_BRANCH} \ - file://agl-service-hvac.conf \ + file://agl-service-hvac.conf.default \ + file://agl-service-hvac.conf.gateway-demo \ file://agl-service-hvac.token \ " SRCREV = "1f55937667e35fb79dabee0e180787e34a59169a" @@ -26,7 +27,7 @@ SRCREV = "1f55937667e35fb79dabee0e180787e34a59169a" PV = "2.0+git${SRCPV}" S = "${WORKDIR}/git" -inherit meson pkgconfig systemd +inherit meson pkgconfig systemd update-alternatives EXTRA_OEMESON += "-Dprotos=${STAGING_INCDIR}" @@ -41,10 +42,29 @@ do_install:append() { # until a packaging/sandboxing/MAC scheme is (re)implemented or # something like OAuth is plumbed in as an alternative. install -d ${D}${sysconfdir}/xdg/AGL/agl-service-hvac - install -m 0644 ${WORKDIR}/agl-service-hvac.conf ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/agl-service-hvac.conf.default ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/agl-service-hvac.conf.gateway-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/agl-service-hvac.token ${D}${sysconfdir}/xdg/AGL/agl-service-hvac/ } FILES:${PN} += "${systemd_system_unitdir}" -RDEPENDS:${PN} += "kuksa-databroker kuksa-databroker-agl" +RDEPENDS:${PN} += "${PN}-conf" + +ALTERNATIVE_LINK_NAME[agl-service-hvac.conf] = "${sysconfdir}/xdg/AGL/agl-service-hvac.conf" + +PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-gateway-demo" + +FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/agl-service-hvac.conf.default" +RDEPENDS:${PN}-conf = "${PN}" +RPROVIDES:${PN}-conf = "agl-service-hvac.conf" +ALTERNATIVE:${PN}-conf = "agl-service-hvac.conf" +ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/agl-service-hvac.conf.default" + +FILES:${PN}-conf-gateway-demo += "${sysconfdir}/xdg/AGL/agl-service-hvac.conf.gateway-demo" +RDEPENDS:${PN}-conf-gateway-demo = "${PN}" +RPROVIDES:${PN}-conf-gateway-demo = "agl-service-hvac.conf" +ALTERNATIVE:${PN}-conf-gateway-demo = "agl-service-hvac.conf" +ALTERNATIVE_TARGET_${PN}-conf-gateway-demo = "${sysconfdir}/xdg/AGL/agl-service-hvac.conf.gateway-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-gateway-demo = "20" + diff --git a/recipes-demo/flutter-cluster-dashboard/files/cluster-dashboard.yaml.gateway-demo b/recipes-demo/flutter-cluster-dashboard/files/cluster-dashboard.yaml.gateway-demo new file mode 100644 index 00000000..662a350f --- /dev/null +++ b/recipes-demo/flutter-cluster-dashboard/files/cluster-dashboard.yaml.gateway-demo @@ -0,0 +1,4 @@ +hostname: 192.168.10.4 +authorization : "/etc/xdg/AGL/cluster-dashboard/cluster-dashboard.token" +use-tls : true +tls-server-name : "localhost" diff --git a/recipes-demo/flutter-cluster-dashboard/flutter-cluster-dashboard_git.bb b/recipes-demo/flutter-cluster-dashboard/flutter-cluster-dashboard_git.bb index f81d8e73..f3dd8f1e 100644 --- a/recipes-demo/flutter-cluster-dashboard/flutter-cluster-dashboard_git.bb +++ b/recipes-demo/flutter-cluster-dashboard/flutter-cluster-dashboard_git.bb @@ -13,6 +13,7 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/flutter-instrument-clust file://flutter_cluster_dashboard_on_bg.json \ file://cluster-dashboard.yaml \ file://cluster-dashboard.yaml.demo \ + file://cluster-dashboard.yaml.gateway-demo \ file://cluster-dashboard.yaml.kvm-demo \ file://cluster-dashboard.token \ file://kvm.conf \ @@ -41,6 +42,7 @@ do_install:append() { install -d ${D}${sysconfdir}/xdg/AGL/cluster-dashboard install -m 0644 ${WORKDIR}/cluster-dashboard.yaml ${D}${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.default install -m 0644 ${WORKDIR}/cluster-dashboard.yaml.demo ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/cluster-dashboard.yaml.gateway-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/cluster-dashboard.yaml.kvm-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/cluster-dashboard.token ${D}${sysconfdir}/xdg/AGL/cluster-dashboard/ } @@ -51,30 +53,35 @@ FILES:${PN} += "${datadir} ${sysconfdir}/xdg/AGL" RDEPENDS:${PN} += "flutter-auto agl-flutter-env liberation-fonts" -PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-demo ${PN}-conf-kvm-demo" - +PACKAGE_BEFORE_PN += "${PN}-conf" FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.default" RDEPENDS:${PN}-conf = "${PN}" RPROVIDES:${PN}-conf = "cluster-dashboard.yaml" -RCONFLICTS:${PN}-conf = "${PN}-conf-demo" ALTERNATIVE:${PN}-conf = "cluster-dashboard.yaml" ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.default" -FILES:${PN}-conf-demo += " \ - ${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.demo \ -" +PACKAGE_BEFORE_PN += "${PN}-conf-demo" +FILES:${PN}-conf-demo += "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.demo" RDEPENDS:${PN}-conf-demo = "${PN}" RPROVIDES:${PN}-conf-demo = "cluster-dashboard.yaml" -RCONFLICTS:${PN}-conf-demo = "${PN}-conf" ALTERNATIVE:${PN}-conf-demo = "cluster-dashboard.yaml" ALTERNATIVE_TARGET_${PN}-conf-demo = "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.demo" -FILES:${PN}-conf-kvm-demo += " \ - ${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.kvm-demo \ - ${systemd_system_unitdir}/flutter-cluster-dashboard.service.d/kvm.conf \ -" -RDEPENDS:${PN}-conf-kvm-demo = "${PN}" +PACKAGE_BEFORE_PN += "${PN}-conf-gateway-demo" +FILES:${PN}-conf-gateway-demo += "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.gateway-demo" +RDEPENDS:${PN}-conf-gateway-demo = "${PN}" +RPROVIDES:${PN}-conf-gateway-demo = "cluster-dashboard.yaml" +ALTERNATIVE:${PN}-conf-gateway-demo = "cluster-dashboard.yaml" +ALTERNATIVE_TARGET_${PN}-conf-gateway-demo = "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.gateway-demo" + +# systemd override to add network-online.target dependency for KVM setups +PACKAGE_BEFORE_PN += "${PN}-conf-kvm" +FILES:${PN}-conf-kvm += "${systemd_system_unitdir}/flutter-cluster-dashboard.service.d/kvm.conf" +RDEPENDS:${PN}-conf-kvm = "${PN}" + +PACKAGE_BEFORE_PN += "${PN}-conf-kvm-demo" +FILES:${PN}-conf-kvm-demo += "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.kvm-demo" +RDEPENDS:${PN}-conf-kvm-demo = "${PN} ${PN}-conf-kvm" RPROVIDES:${PN}-conf-kvm-demo = "cluster-dashboard.yaml" -RCONFLICTS:${PN}-conf-kvm-demo = "${PN}-conf" ALTERNATIVE:${PN}-conf-kvm-demo = "cluster-dashboard.yaml" ALTERNATIVE_TARGET_${PN}-conf-kvm-demo = "${sysconfdir}/xdg/AGL/cluster-dashboard.yaml.kvm-demo" diff --git a/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.gateway-demo b/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.gateway-demo new file mode 100644 index 00000000..e9346bc4 --- /dev/null +++ b/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.gateway-demo @@ -0,0 +1,6 @@ +kuksa: + hostname : 192.168.10.4 + port : 55555 + authorization : "/etc/xdg/AGL/ics-homescreen/ics-homescreen.token" + use-tls : true + tls-server-name : localhost diff --git a/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.kvm-gateway-demo b/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.kvm-gateway-demo new file mode 100644 index 00000000..5d6e73b3 --- /dev/null +++ b/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.kvm-gateway-demo @@ -0,0 +1,10 @@ +kuksa: + hostname : 192.168.10.4 + port : 55555 + authorization : "/etc/xdg/AGL/ics-homescreen/ics-homescreen.token" + use-tls : true + tls-server-name : localhost +radio: + hostname : 172.16.10.1 +mpd: + hostname : 172.16.10.1 diff --git a/recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb b/recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb index 17e55994..45d75b7c 100644 --- a/recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb +++ b/recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb @@ -10,7 +10,9 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/flutter-ics-homescreen;p file://flutter-ics-homescreen.json \ file://flutter-ics-homescreen.service \ file://ics-homescreen.yaml \ + file://ics-homescreen.yaml.gateway-demo \ file://ics-homescreen.yaml.kvm-demo \ + file://ics-homescreen.yaml.kvm-gateway-demo \ file://ics-homescreen.token \ file://radio-presets.yaml \ file://kvm.conf \ @@ -46,7 +48,9 @@ do_install:append() { # something like OAuth is plumbed in as an alternative. install -d ${D}${sysconfdir}/xdg/AGL/ics-homescreen install -m 0644 ${WORKDIR}/ics-homescreen.yaml ${D}${sysconfdir}/xdg/AGL/ics-homescreen.yaml.default + install -m 0644 ${WORKDIR}/ics-homescreen.yaml.gateway-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/ics-homescreen.yaml.kvm-demo ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/ics-homescreen.yaml.kvm-gateway-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/ics-homescreen.token ${D}${sysconfdir}/xdg/AGL/ics-homescreen/ install -m 0644 ${WORKDIR}/radio-presets.yaml ${D}${sysconfdir}/xdg/AGL/ics-homescreen/ } @@ -61,21 +65,38 @@ RDEPENDS:${PN} += " \ applaunchd \ " -PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm-demo" - +PACKAGE_BEFORE_PN += "${PN}-conf" FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.default" RDEPENDS:${PN}-conf = "${PN}" RPROVIDES:${PN}-conf = "ics-homescreen.yaml" -RCONFLICTS:${PN}-conf = "${PN}-conf-kvm-demo" ALTERNATIVE:${PN}-conf = "ics-homescreen.yaml" ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.default" -FILES:${PN}-conf-kvm-demo += " \ - ${sysconfdir}/xdg/AGL/ics-homescreen.yaml.kvm-demo \ - ${systemd_system_unitdir}/flutter-ics-homescreen.service.d/kvm.conf \ -" -RDEPENDS:${PN}-conf-kvm-demo = "${PN}" +PACKAGE_BEFORE_PN += "${PN}-conf-gateway-demo" +FILES:${PN}-conf-gateway-demo += "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.gateway-demo" +RDEPENDS:${PN}-conf-gateway-demo = "${PN}" +RPROVIDES:${PN}-conf-gateway-demo = "ics-homescreen.yaml" +ALTERNATIVE:${PN}-conf-gateway-demo = "ics-homescreen.yaml" +ALTERNATIVE_TARGET_${PN}-conf-gateway-demo = "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.gateway-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-gateway-demo = "20" + +# systemd override to add network-online.target dependency for KVM setups +PACKAGE_BEFORE_PN += "${PN}-conf-kvm" +FILES:${PN}-conf-kvm += "${systemd_system_unitdir}/flutter-ics-homescreen.service.d/kvm.conf" +RDEPENDS:${PN}-conf-kvm = "${PN}" + +PACKAGE_BEFORE_PN += "${PN}-conf-kvm-demo" +FILES:${PN}-conf-kvm-demo += "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.kvm-demo" +RDEPENDS:${PN}-conf-kvm-demo = "${PN} ${PN}-conf-kvm" RPROVIDES:${PN}-conf-kvm-demo = "ics-homescreen.yaml" -RCONFLICTS:${PN}-conf-kvm-demo = "${PN}-conf" ALTERNATIVE:${PN}-conf-kvm-demo = "ics-homescreen.yaml" ALTERNATIVE_TARGET_${PN}-conf-kvm-demo = "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.kvm-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-kvm-demo = "30" + +PACKAGE_BEFORE_PN += "${PN}-conf-kvm-gateway-demo" +FILES:${PN}-conf-kvm-gateway-demo += "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.kvm-gateway-demo" +RDEPENDS:${PN}-conf-kvm-gateway-demo = "${PN} ${PN}-conf-kvm" +RPROVIDES:${PN}-conf-kvm-gateway-demo = "ics-homescreen.yaml" +ALTERNATIVE:${PN}-conf-kvm-gateway-demo = "ics-homescreen.yaml" +ALTERNATIVE_TARGET_${PN}-conf-kvm-gateway-demo = "${sysconfdir}/xdg/AGL/ics-homescreen.yaml.kvm-gateway-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-kvm-gateway-demo = "31" diff --git a/recipes-demo/navigation/ondemandnavi/navigation.conf.gateway-demo b/recipes-demo/navigation/ondemandnavi/navigation.conf.gateway-demo new file mode 100644 index 00000000..ed71a497 --- /dev/null +++ b/recipes-demo/navigation/ondemandnavi/navigation.conf.gateway-demo @@ -0,0 +1,4 @@ +[kuksa-client] +hostname = "192.168.10.4" +tls-server-name = "localhost" +authorization = "/etc/xdg/AGL/navigation/navigation.token" diff --git a/recipes-demo/navigation/ondemandnavi_git.bb b/recipes-demo/navigation/ondemandnavi_git.bb index 7bfa0007..cf53b2ba 100644 --- a/recipes-demo/navigation/ondemandnavi_git.bb +++ b/recipes-demo/navigation/ondemandnavi_git.bb @@ -13,6 +13,7 @@ PV = "2.0+git${SRCPV}" SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/ondemandnavi;protocol=https;branch=${AGL_BRANCH} \ file://navigation.conf \ file://navigation.conf.kvm-demo \ + file://navigation.conf.gateway-demo \ file://navigation.token \ " SRCREV = "d6b883ef6bdb63fb501b03d64c9a32bc29b7b2c7" @@ -35,26 +36,33 @@ do_install:append() { install -d ${D}${sysconfdir}/xdg/AGL/navigation install -m 0644 ${WORKDIR}/navigation.conf ${D}${sysconfdir}/xdg/AGL/navigation.conf.default install -m 0644 ${WORKDIR}/navigation.conf.kvm-demo ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/navigation.conf.gateway-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/navigation.token ${D}${sysconfdir}/xdg/AGL/navigation/ } ALTERNATIVE_LINK_NAME[navigation.conf] = "${sysconfdir}/xdg/AGL/navigation.conf" -PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm-demo" +PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm-demo ${PN}-conf-gateway-demo" FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/navigation.conf.default" RDEPENDS:${PN}-conf = "${PN}" RPROVIDES:${PN}-conf = "navigation.conf" -RCONFLICTS:${PN}-conf = "${PN}-conf-kvm-demo" ALTERNATIVE:${PN}-conf = "navigation.conf" ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/navigation.conf.default" +FILES:${PN}-conf-gateway-demo += "${sysconfdir}/xdg/AGL/navigation.conf.gateway-demo" +RDEPENDS:${PN}-conf-gateway-demo = "${PN}" +RPROVIDES:${PN}-conf-gateway-demo = "navigation.conf" +ALTERNATIVE:${PN}-conf-gateway-demo = "navigation.conf" +ALTERNATIVE_TARGET_${PN}-conf-gateway-demo = "${sysconfdir}/xdg/AGL/navigation.conf.gateway-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-gateway-demo = "20" + FILES:${PN}-conf-kvm-demo += "${sysconfdir}/xdg/AGL/navigation.conf.kvm-demo" RDEPENDS:${PN}-conf-kvm-demo = "${PN}" RPROVIDES:${PN}-conf-kvm-demo = "navigation.conf" -RCONFLICTS:${PN}-conf-kvm-demo = "${PN}-conf" ALTERNATIVE:${PN}-conf-kvm-demo = "navigation.conf" ALTERNATIVE_TARGET_${PN}-conf-kvm-demo = "${sysconfdir}/xdg/AGL/navigation.conf.kvm-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-kvm-demo = "30" RDEPENDS:${PN} += " \ qtwayland \ diff --git a/recipes-demo/navigation/tbtnavi/tbtnavi.conf.gateway-demo b/recipes-demo/navigation/tbtnavi/tbtnavi.conf.gateway-demo new file mode 100644 index 00000000..6f528719 --- /dev/null +++ b/recipes-demo/navigation/tbtnavi/tbtnavi.conf.gateway-demo @@ -0,0 +1,4 @@ +[kuksa-client] +hostname = "192.168.10.4" +tls-server-name = "localhost" +authorization = "/etc/xdg/AGL/tbtnavi/tbtnavi.token" diff --git a/recipes-demo/navigation/tbtnavi_git.bb b/recipes-demo/navigation/tbtnavi_git.bb index b3703c53..3c6571b1 100644 --- a/recipes-demo/navigation/tbtnavi_git.bb +++ b/recipes-demo/navigation/tbtnavi_git.bb @@ -28,6 +28,7 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/tbtnavi;protocol=https;b file://tbtnavi.service \ file://tbtnavi.conf \ file://tbtnavi.conf.kvm-demo \ + file://tbtnavi.conf.gateway-demo \ file://tbtnavi.token \ file://kvm.conf \ " @@ -54,6 +55,7 @@ do_install:append() { install -d ${D}${sysconfdir}/xdg/AGL/tbtnavi install -m 0644 ${WORKDIR}/tbtnavi.conf ${D}${sysconfdir}/xdg/AGL/tbtnavi.conf.default install -m 0644 ${WORKDIR}/tbtnavi.conf.kvm-demo ${D}${sysconfdir}/xdg/AGL/ + install -m 0644 ${WORKDIR}/tbtnavi.conf.gateway-demo ${D}${sysconfdir}/xdg/AGL/ install -m 0644 ${WORKDIR}/tbtnavi.token ${D}${sysconfdir}/xdg/AGL/tbtnavi/ } @@ -68,21 +70,33 @@ RDEPENDS:${PN} += " \ libqtappfw \ " -PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm-demo" +PACKAGE_BEFORE_PN += "${PN}-conf ${PN}-conf-kvm ${PN}-conf-kvm-demo ${PN}-conf-gateway-demo" FILES:${PN}-conf += "${sysconfdir}/xdg/AGL/tbtnavi.conf.default" RDEPENDS:${PN}-conf = "${PN}" RPROVIDES:${PN}-conf = "tbtnavi.conf" -RCONFLICTS:${PN}-conf = "${PN}-conf-kvm-demo" ALTERNATIVE:${PN}-conf = "tbtnavi.conf" ALTERNATIVE_TARGET_${PN}-conf = "${sysconfdir}/xdg/AGL/tbtnavi.conf.default" +FILES:${PN}-conf-gateway-demo += " \ + ${sysconfdir}/xdg/AGL/tbtnavi.conf.gateway-demo \ +" +RDEPENDS:${PN}-conf-gateway-demo = "${PN}" +RPROVIDES:${PN}-conf-gateway-demo = "tbtnavi.conf" +ALTERNATIVE:${PN}-conf-gateway-demo = "tbtnavi.conf" +ALTERNATIVE_TARGET_${PN}-conf-gateway-demo = "${sysconfdir}/xdg/AGL/tbtnavi.conf.gateway-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-gateway-demo = "20" + +FILES:${PN}-conf-kvm += " \ + ${systemd_system_unitdir}/tbtnavi.service.d/kvm.conf \ +" +RDEPENDS:${PN}-conf-kvm = "${PN}" + FILES:${PN}-conf-kvm-demo += " \ ${sysconfdir}/xdg/AGL/tbtnavi.conf.kvm-demo \ - ${systemd_system_unitdir}/tbtnavi.service.d/kvm.conf \ " -RDEPENDS:${PN}-conf-kvm-demo = "${PN}" +RDEPENDS:${PN}-conf-kvm-demo = "${PN} ${PN}-conf-kvm" RPROVIDES:${PN}-conf-kvm-demo = "tbtnavi.conf" -RCONFLICTS:${PN}-conf-kvm-demo = "${PN}-conf" ALTERNATIVE:${PN}-conf-kvm-demo = "tbtnavi.conf" ALTERNATIVE_TARGET_${PN}-conf-kvm-demo = "${sysconfdir}/xdg/AGL/tbtnavi.conf.kvm-demo" +ALTERNATIVE_PRIORITY_${PN}-conf-kvm-demo = "30" diff --git a/recipes-platform/images/agl-cluster-demo-flutter-preconfigured-gateway.bb b/recipes-platform/images/agl-cluster-demo-flutter-preconfigured-gateway.bb new file mode 100644 index 00000000..767d339c --- /dev/null +++ b/recipes-platform/images/agl-cluster-demo-flutter-preconfigured-gateway.bb @@ -0,0 +1,8 @@ +require agl-cluster-demo-flutter-preconfigured.bb + +SUMMARY = "AGL Cluster preconfigured gateway demo Flutter image" + +# Cluster application configuration needs to be replaced for +# the full demo to handle different databroker configuration. +FLUTTER_CLUSTER_DASHBOARD_CONF = "flutter-cluster-dashboard-conf-gateway-demo" + diff --git a/recipes-platform/images/agl-gateway-demo-preconfigured.bb b/recipes-platform/images/agl-gateway-demo-preconfigured.bb new file mode 100644 index 00000000..4a9cf0b2 --- /dev/null +++ b/recipes-platform/images/agl-gateway-demo-preconfigured.bb @@ -0,0 +1,10 @@ +require agl-gateway-demo.bb + +SUMMARY = "AGL gateway preconfigured demo image" + +# Second CAN interface will be connected to the demo setup +# steering wheel & HVAC in the full demo. +IMAGE_INSTALL += " \ + kuksa-dbc-feeder-conf-gw-hardware \ + vss-agl-gw-hardware \ +" diff --git a/recipes-platform/images/agl-gateway-demo.bb b/recipes-platform/images/agl-gateway-demo.bb new file mode 100644 index 00000000..1e800c54 --- /dev/null +++ b/recipes-platform/images/agl-gateway-demo.bb @@ -0,0 +1,24 @@ +SUMMARY = "AGL gateway demo image" + +LICENSE = "MIT" + +require recipes-platform/images/agl-image-minimal.bb +require agl-demo-features.inc + +IMAGE_FEATURES += " \ + kuksa-val-databroker \ + ssh-server-openssh \ + ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'can-test-tools' , '', d)} \ +" + +AGL_DEVEL_INSTALL = " \ + packagegroup-agl-kuksa-val-databroker-devel \ + tcpdump \ +" + +IMAGE_INSTALL += " \ + agl-vss-proxy \ + kuksa-dbc-feeder-conf-gw-control-panel \ + vss-agl-gw-control-panel \ + ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', '${AGL_DEVEL_INSTALL}', '', d)} \ +" diff --git a/recipes-platform/images/agl-ivi-demo-flutter-preconfigured-gateway.bb b/recipes-platform/images/agl-ivi-demo-flutter-preconfigured-gateway.bb new file mode 100644 index 00000000..1bbd483b --- /dev/null +++ b/recipes-platform/images/agl-ivi-demo-flutter-preconfigured-gateway.bb @@ -0,0 +1,14 @@ +require agl-ivi-demo-flutter-preconfigured.bb + +SUMMARY = "AGL IVI preconfigured gateway demo Flutter image" + +# We do not want a local databroker instance +IMAGE_FEATURES:remove = "kuksa-val-databroker" + +FLUTTER_ICS_HOMESCREEN_CONF = "flutter-ics-homescreen-conf-gateway-demo" +ONDEMANDNAVI_CONF = "ondemandnavi-conf-gateway-demo" + +IMAGE_INSTALL += " \ + agl-service-hvac-conf-gateway-demo \ + agl-service-audiomixer-conf-gateway-demo \ +"
\ No newline at end of file |