diff options
author | 2024-05-16 18:24:25 -0400 | |
---|---|---|
committer | 2024-05-27 21:28:34 +0000 | |
commit | b26515dcf2afc510cc59782f99965f10b96be433 (patch) | |
tree | 60cb8103f410306171ae487bd4784b0363403297 /recipes-connectivity | |
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
Diffstat (limited to 'recipes-connectivity')
20 files changed, 1853 insertions, 32 deletions
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" |