summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan-Simon Moeller <jsmoeller@linuxfoundation.org>2024-04-06 23:55:42 +0200
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2024-04-06 23:58:07 +0200
commit5f1c3868c5353d89eb8b3396d88d0e70f2e99ab4 (patch)
tree16a1a1db347b37b232f9b6b8e0fa6cd798a809d4
parent68c88e1854abfa49ed98743398d64bdff7ebb3fa (diff)
Change-Id: Ia4c741323a705692219057174e00a083a97da16d Signed-off-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
-rw-r--r--conf/include/agl-demo-gateway-preload.inc1
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0004-Enable-val2dbc-for-sensor-values.patch142
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc38
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc.bak.2024040564
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder/dbc_default_values.json40
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.env3
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service3
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb6
-rw-r--r--recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec209
-rw-r--r--recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.control-panel446
-rw-r--r--recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-control-panel447
-rw-r--r--recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec.gw-hardware341
-rw-r--r--recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec460
-rw-r--r--recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.control-panel412
-rw-r--r--recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.gw-control-panel410
-rw-r--r--recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.gw-hardware349
-rw-r--r--recipes-connectivity/vss/vss-agl_4.0.bb42
-rw-r--r--recipes-demo/agl-service-radio/files/radio.conf.gateway-demo2
-rw-r--r--recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-service-hvac.conf2
-rw-r--r--recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.json10
-rw-r--r--recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.token1
-rw-r--r--recipes-demo/agl-vss-proxy/agl-vss-proxy/config.yaml41
-rw-r--r--recipes-demo/agl-vss-proxy/agl-vss-proxy_git.bb47
-rw-r--r--recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.gateway-demo10
-rw-r--r--recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb30
-rw-r--r--recipes-demo/navigation/ondemandnavi/navigation.conf.gateway-demo4
-rw-r--r--recipes-demo/navigation/ondemandnavi_git.bb14
-rw-r--r--recipes-demo/navigation/tbtnavi/tbtnavi.conf.gateway-demo4
-rw-r--r--recipes-demo/navigation/tbtnavi_git.bb24
-rw-r--r--recipes-extended/foo/vhost-device-sound-crates.inc268
-rw-r--r--recipes-extended/foo/vhost-device-sound_0.1.0.bb18
-rw-r--r--recipes-platform/images/agl-demo-features.inc3
-rw-r--r--[l---------]recipes-platform/images/agl-demo-platform-crosssdk.bb17
-rw-r--r--[l---------]recipes-platform/images/agl-demo-platform-html5.bb14
-rw-r--r--[l---------]recipes-platform/images/agl-demo-platform.bb24
-rw-r--r--recipes-platform/images/agl-gateway-demo-platform.bb20
-rw-r--r--recipes-platform/images/agl-ivi-demo-control-panel.bb11
-rw-r--r--recipes-platform/images/agl-ivi-demo-features.inc4
-rw-r--r--recipes-platform/images/agl-ivi-demo-platform-flutter.bb4
-rw-r--r--recipes-platform/images/agl-ivi-demo-platform.bb2
-rw-r--r--recipes-platform/images/agl-kvm-demo-platform.bb8
-rw-r--r--recipes-platform/packagegroups/packagegroup-agl-kuksa-val-databroker.bb1
-rw-r--r--recipes-support/qemu-set-display/qemu-set-display_git.bb14
-rw-r--r--templates/feature/agl-demo-gateway-preload/50_local.conf.inc2
-rw-r--r--templates/feature/agl-demo-gateway-preload/README_feature_agl-demo-gateway-preload.md9
-rw-r--r--templates/feature/agl-kvm-host-audio/included.dep2
46 files changed, 3953 insertions, 70 deletions
diff --git a/conf/include/agl-demo-gateway-preload.inc b/conf/include/agl-demo-gateway-preload.inc
new file mode 100644
index 000000000..7faa43871
--- /dev/null
+++ b/conf/include/agl-demo-gateway-preload.inc
@@ -0,0 +1 @@
+AGL_FEATURES:append = " agl-demo-gateway-preload"
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 000000000..7f22a90ad
--- /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 0d0121398..e638d1287 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/agl-vcar.dbc.bak.20240405 b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc.bak.20240405
new file mode 100644
index 000000000..1924fade1
--- /dev/null
+++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc.bak.20240405
@@ -0,0 +1,64 @@
+VERSION "AGL Virtual Car 1.0"
+
+BS_:
+
+BO_ 1001 Vehicle_Status_1: 8 Vector_XXX
+ SG_ PT_VehicleAvgSpeed : 7|15@0+ (0.015625,0) [0|0] "" Vector_XXX
+
+BO_ 985 Vehicle_Status_2: 8 Vector_XXX
+ SG_ PT_FuelLevelPct : 8|8@1+ (0.392157,0) [0|0] "" 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_ 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 : 31|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
+ SG_ SW_Mode : 37|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_VolumeDown : 36|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_Next : 35|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_Info : 33|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_VolumeMute : 32|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_Voice : 42|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_PhoneHangup : 41|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_PhoneCall : 40|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_CruiseEnable : 55|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_CruiseResume : 54|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_CruiseSet : 52|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_CruiseCancel : 51|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_CruiseLimit : 49|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_CruiseDistance : 48|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_Horn : 63|1@1+ (1,0) [0|1] "" Vector_XXX
+ SG_ SW_LaneDepartureWarning : 56|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 000000000..0562569db
--- /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.env b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.env
new file mode 100644
index 000000000..5d787158d
--- /dev/null
+++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.env
@@ -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 a30018c6f..857f5c7d2 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 809152bb0..e598a23e3 100644
--- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb
+++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb
@@ -13,10 +13,13 @@ 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.env \
"
SRCREV = "5bb52eca8d79f7c05a024f69b1faab81dabacdcd"
@@ -36,6 +39,9 @@ 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.env ${D}${sysconfdir}/default/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.service ${D}${systemd_system_unitdir}
diff --git a/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec b/recipes-connectivity/vss/vss-agl/agl_vss_overlay.vspec
index 6c0a08ae2..b8a01e362 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 000000000..b5e2b8a3d
--- /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 000000000..6b0a9a38a
--- /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 000000000..869b33d3d
--- /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/bak/agl_vss_overlay.vspec b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec
new file mode 100644
index 000000000..baae9473d
--- /dev/null
+++ b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec
@@ -0,0 +1,460 @@
+# DBC mappings for vehicle and engine speeds
+
+Vehicle.Speed:
+ datatype: float
+ type: sensor
+ dbc2vss:
+ signal: PT_VehicleAvgSpeed
+ interval_ms: 100
+ vss2dbc:
+ signal: PT_VehicleAvgSpeed
+
+Vehicle.Powertrain.CombustionEngine.Speed:
+ datatype: float
+ type: sensor
+ 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.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
+ transform:
+ math: "x * 0.0439453125 - 90"
+ vss2dbc:
+ signal: SteeringPosition
+ transform:
+ math: "(x + 90) / 0.0439453125"
+
+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
+#
+
+# 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/bak/agl_vss_overlay.vspec.control-panel b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.control-panel
new file mode 100644
index 000000000..9a92c6670
--- /dev/null
+++ b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.control-panel
@@ -0,0 +1,412 @@
+# 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.OBD.ThrottlePosition:
+ datatype: float
+ type: sensor
+ vss2dbc:
+ signal: ThrottlePosition
+
+Vehicle.Chassis.SteeringWheel.Angle:
+ datatype: int16
+ type: sensor
+ vss2dbc:
+ signal: SteeringPosition
+ transform:
+ math: "(x + 90) / 0.0439453125"
+
+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/bak/agl_vss_overlay.vspec.gw-control-panel b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.gw-control-panel
new file mode 100644
index 000000000..c6a6bc846
--- /dev/null
+++ b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.gw-control-panel
@@ -0,0 +1,410 @@
+# 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.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
+ transform:
+ math: "x * 0.0439453125 - 90"
+
+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/bak/agl_vss_overlay.vspec.gw-hardware b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.gw-hardware
new file mode 100644
index 000000000..ceedceac6
--- /dev/null
+++ b/recipes-connectivity/vss/vss-agl/bak/agl_vss_overlay.vspec.gw-hardware
@@ -0,0 +1,349 @@
+# DBC mappings for other signals for V2C demo
+
+# Need HVAC signal mapping here!
+
+# DBC mappings for demo HVAC
+
+Vehicle.Cabin.HVAC.Station.Row1.Driver.Temperature:
+ datatype: int8
+ type: actuator
+ vss2dbc:
+ signal: PT_TempLeft
+ transform:
+ math: floor("x * 2.4 + 0.5")
+
+Vehicle.Cabin.HVAC.Station.Row1.Passenger.Temperature:
+ datatype: int8
+ type: actuator
+ vss2dbc:
+ signal: PT_TempRight
+ transform:
+ math: floor("x * 2.4 + 0.5")
+
+Vehicle.Cabin.HVAC.Station.Row1.Driver.FanSpeed:
+ datatype: uint8
+ type: actuator
+ vss2dbc:
+ signal: PT_FanSpeed
+ transform:
+ math: floor("x * 255 / 100 + 0.5")
+
+#
+# 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 83fb4b1a1..c5a054dfd 100644
--- a/recipes-connectivity/vss/vss-agl_4.0.bb
+++ b/recipes-connectivity/vss/vss-agl_4.0.bb
@@ -8,29 +8,59 @@ 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-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 = "31"
+
+FILES:${PN}-gw-control-panel += "${datadir}/vss/vss_rel_${PV}-agl-gw-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 = "32"
-FILES:${PN} += "${datadir}/vss/"
+FILES:${PN}-gw-hardware += "${datadir}/vss/vss_rel_${PV}-agl-gw-hardware.json"
diff --git a/recipes-demo/agl-service-radio/files/radio.conf.gateway-demo b/recipes-demo/agl-service-radio/files/radio.conf.gateway-demo
new file mode 100644
index 000000000..d855eb4b9
--- /dev/null
+++ b/recipes-demo/agl-service-radio/files/radio.conf.gateway-demo
@@ -0,0 +1,2 @@
+[radio]
+bind=0.0.0.0
diff --git a/recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-service-hvac.conf b/recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-service-hvac.conf
new file mode 100644
index 000000000..ca2f4f69d
--- /dev/null
+++ b/recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-service-hvac.conf
@@ -0,0 +1,2 @@
+[kuksa-client]
+authorization = "/etc/xdg/AGL/agl-service-hvac/agl-service-hvac.token"
diff --git a/recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.json b/recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.json
new file mode 100644
index 000000000..fe04b0379
--- /dev/null
+++ b/recipes-demo/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-demo/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.token b/recipes-demo/agl-vss-proxy/agl-vss-proxy/agl-vss-proxy.token
new file mode 100644
index 000000000..10fafb537
--- /dev/null
+++ b/recipes-demo/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-demo/agl-vss-proxy/agl-vss-proxy/config.yaml b/recipes-demo/agl-vss-proxy/agl-vss-proxy/config.yaml
new file mode 100644
index 000000000..43494899f
--- /dev/null
+++ b/recipes-demo/agl-vss-proxy/agl-vss-proxy/config.yaml
@@ -0,0 +1,41 @@
+#client-id: ?
+#verbose: 2
+kuksa:
+ #hostname: localhost
+ #port: 55555
+ authorization: /etc/agl-vss-proxy/agl-vss-proxy.token
+ use-tls: true
+ ca-certificate: /etc/kuksa-val/CA.pem
+ #tls-server-name:
+mqtt:
+ hostname:
+ port: 1883
+ #keepalive:
+ #username:
+ #password:
+ #client-id: ?
+ #clean-on-disconnect: false
+ #topic: ?
+ qos: 1
+ retain: true
+ use-tls: false
+ #ca-certificate:
+ #verify-server-hostname: true
+ #client-certificate:
+ #client-key:
+signals:
+- signal: Vehicle.OBD.ThrottlePosition
+- signal: Vehicle.Speed
+- signal: Vehicle.Chassis.SteeringWheel.Angle
+- signal: Vehicle.Chassis.Brake.PedalPosition
+#- signal: Vehicle.Chassis.Brake.IsDriverEmergencyBrakingDetected
+- signal: Vehicle.Powertrain.Transmission.CurrentGear
+#- signal: Vehicle.Cabin.Seat.Row1.DriverSide.Airbag.IsDeployed
+- signal: Vehicle.Acceleration.Lateral
+- signal: Vehicle.Acceleration.Longitudinal
+- signal: Vehicle.Acceleration.Vertical
+- signal: Vehicle.AngularVelocity.Pitch
+- signal: Vehicle.AngularVelocity.Roll
+- signal: Vehicle.AngularVelocity.Yaw
+- signal: Vehicle.CurrentLocation.Latitude
+- signal: Vehicle.CurrentLocation.Longitude
diff --git a/recipes-demo/agl-vss-proxy/agl-vss-proxy_git.bb b/recipes-demo/agl-vss-proxy/agl-vss-proxy_git.bb
new file mode 100644
index 000000000..31a98abcd
--- /dev/null
+++ b/recipes-demo/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/apps/agl-vss-proxy;protocol=https;branch=${AGL_BRANCH} \
+ file://agl-vss-proxy.token \
+"
+SRCREV = "1f55937667e35fb79dabee0e180787e34a59169a"
+
+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-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 000000000..5d6e73b32
--- /dev/null
+++ b/recipes-demo/flutter-ics-homescreen/files/ics-homescreen.yaml.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 576e5a7d1..75e6880d0 100644
--- a/recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb
+++ b/recipes-demo/flutter-ics-homescreen/flutter-ics-homescreen_git.bb
@@ -11,6 +11,7 @@ SRC_URI = "git://gerrit.automotivelinux.org/gerrit/apps/flutter-ics-homescreen;p
file://flutter-ics-homescreen.service \
file://ics-homescreen.yaml \
file://ics-homescreen.yaml.kvm-demo \
+ file://ics-homescreen.yaml.gateway-demo \
file://ics-homescreen.token \
file://radio-presets.yaml \
file://kvm.conf \
@@ -47,6 +48,7 @@ do_install:append() {
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.kvm-demo ${D}${sysconfdir}/xdg/AGL/
+ install -m 0644 ${WORKDIR}/ics-homescreen.yaml.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/
}
@@ -62,21 +64,39 @@ RDEPENDS:${PN} += " \
${@bb.utils.contains('AGL_FEATURES', 'agl-kvm-host-audio', '', 'agl-service-radio mpd', d)} \
"
-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/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 += " \
+ ${systemd_system_unitdir}/flutter-ics-homescreen.service.d/kvm.conf \
+"
+RDEPENDS:${PN}-conf-kvm = "${PN}"
+
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}"
+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 = "20"
+
+# FIXME:
+# This configuration is still KVM specific, there needs to
+# be a way to install a configuration for using the gateway
+# setup with a non-KVM image. It may take splitting the
+# databroker configuration out to a separate configuration
+# to simplify things.
+FILES:${PN}-conf-gateway-demo += " \
+ ${sysconfdir}/xdg/AGL/ics-homescreen.yaml.gateway-demo \
+"
+RDEPENDS:${PN}-conf-gateway-demo = "${PN} ${PN}-conf-kvm"
+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 = "30"
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 000000000..ed71a4977
--- /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 7bfa00078..9125bd0f2 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-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 = "20"
+
+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 = "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 000000000..6f528719c
--- /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 b3703c53d..825148014 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-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 = "20"
+
+FILES:${PN}-conf-gateway-demo += " \
+ ${sysconfdir}/xdg/AGL/tbtnavi.conf.gateway-demo \
+"
+RDEPENDS:${PN}-conf-gateway-demo = "${PN} ${PN}-conf-kvm"
+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 = "30"
diff --git a/recipes-extended/foo/vhost-device-sound-crates.inc b/recipes-extended/foo/vhost-device-sound-crates.inc
new file mode 100644
index 000000000..e47d8c09d
--- /dev/null
+++ b/recipes-extended/foo/vhost-device-sound-crates.inc
@@ -0,0 +1,268 @@
+# Autogenerated with 'bitbake -c update_crates vhost-device-sound'
+
+# from Cargo.lock
+SRC_URI += " \
+ crate://crates.io/aho-corasick/1.1.2 \
+ crate://crates.io/alsa/0.8.1 \
+ crate://crates.io/alsa-sys/0.3.1 \
+ crate://crates.io/annotate-snippets/0.9.2 \
+ crate://crates.io/anstream/0.6.11 \
+ crate://crates.io/anstyle/1.0.5 \
+ crate://crates.io/anstyle-parse/0.2.3 \
+ crate://crates.io/anstyle-query/1.0.2 \
+ crate://crates.io/anstyle-wincon/3.0.2 \
+ crate://crates.io/anyhow/1.0.79 \
+ crate://crates.io/arc-swap/1.6.0 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/bindgen/0.69.4 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.1 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cexpr/0.6.0 \
+ crate://crates.io/cfg-expr/0.15.6 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/clang-sys/1.7.0 \
+ crate://crates.io/clap/4.4.18 \
+ crate://crates.io/clap_builder/4.4.18 \
+ crate://crates.io/clap_derive/4.4.7 \
+ crate://crates.io/clap_lex/0.6.0 \
+ crate://crates.io/colorchoice/1.0.0 \
+ crate://crates.io/convert_case/0.6.0 \
+ crate://crates.io/cookie-factory/0.3.2 \
+ crate://crates.io/either/1.9.0 \
+ crate://crates.io/env_filter/0.1.0 \
+ crate://crates.io/env_logger/0.11.1 \
+ crate://crates.io/equivalent/1.0.1 \
+ crate://crates.io/errno/0.3.8 \
+ crate://crates.io/fastrand/2.0.1 \
+ crate://crates.io/futures/0.3.30 \
+ crate://crates.io/futures-channel/0.3.30 \
+ crate://crates.io/futures-core/0.3.30 \
+ crate://crates.io/futures-executor/0.3.30 \
+ crate://crates.io/futures-io/0.3.30 \
+ crate://crates.io/futures-macro/0.3.30 \
+ crate://crates.io/futures-sink/0.3.30 \
+ crate://crates.io/futures-task/0.3.30 \
+ crate://crates.io/futures-timer/3.0.2 \
+ crate://crates.io/futures-util/0.3.30 \
+ crate://crates.io/glob/0.3.1 \
+ crate://crates.io/hashbrown/0.14.3 \
+ crate://crates.io/heck/0.4.1 \
+ crate://crates.io/humantime/2.1.0 \
+ crate://crates.io/indexmap/2.2.2 \
+ crate://crates.io/itertools/0.12.1 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/lazycell/1.3.0 \
+ crate://crates.io/libc/0.2.153 \
+ crate://crates.io/libloading/0.8.1 \
+ crate://crates.io/libspa/0.8.0 \
+ crate://crates.io/libspa-sys/0.8.0 \
+ crate://crates.io/linux-raw-sys/0.4.13 \
+ crate://crates.io/log/0.4.20 \
+ crate://crates.io/memchr/2.7.1 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/nix/0.26.4 \
+ crate://crates.io/nix/0.27.1 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/once_cell/1.19.0 \
+ crate://crates.io/pin-project-lite/0.2.13 \
+ crate://crates.io/pin-utils/0.1.0 \
+ crate://crates.io/pipewire/0.8.0 \
+ crate://crates.io/pipewire-sys/0.8.0 \
+ crate://crates.io/pkg-config/0.3.29 \
+ crate://crates.io/proc-macro2/1.0.78 \
+ crate://crates.io/quote/1.0.35 \
+ crate://crates.io/redox_syscall/0.4.1 \
+ crate://crates.io/regex/1.10.3 \
+ crate://crates.io/regex-automata/0.4.5 \
+ crate://crates.io/regex-syntax/0.8.2 \
+ crate://crates.io/relative-path/1.9.2 \
+ crate://crates.io/rstest/0.18.2 \
+ crate://crates.io/rstest_macros/0.18.2 \
+ crate://crates.io/rustc-hash/1.1.0 \
+ crate://crates.io/rustc_version/0.4.0 \
+ crate://crates.io/rustix/0.38.31 \
+ crate://crates.io/semver/1.0.21 \
+ crate://crates.io/serde/1.0.196 \
+ crate://crates.io/serde_derive/1.0.196 \
+ crate://crates.io/serde_spanned/0.6.5 \
+ crate://crates.io/shlex/1.3.0 \
+ crate://crates.io/slab/0.4.9 \
+ crate://crates.io/smallvec/1.13.1 \
+ crate://crates.io/strsim/0.10.0 \
+ crate://crates.io/syn/2.0.46 \
+ crate://crates.io/system-deps/6.2.0 \
+ crate://crates.io/target-lexicon/0.12.13 \
+ crate://crates.io/tempfile/3.9.0 \
+ crate://crates.io/thiserror/1.0.56 \
+ crate://crates.io/thiserror-impl/1.0.56 \
+ crate://crates.io/toml/0.8.2 \
+ crate://crates.io/toml_datetime/0.6.3 \
+ crate://crates.io/toml_edit/0.20.2 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unicode-segmentation/1.10.1 \
+ crate://crates.io/unicode-width/0.1.11 \
+ crate://crates.io/utf8parse/0.2.1 \
+ crate://crates.io/version-compare/0.1.1 \
+ crate://crates.io/vhost/0.10.0 \
+ crate://crates.io/vhost-user-backend/0.13.1 \
+ crate://crates.io/virtio-bindings/0.2.2 \
+ crate://crates.io/virtio-queue/0.11.0 \
+ crate://crates.io/vm-memory/0.14.0 \
+ crate://crates.io/vmm-sys-util/0.12.1 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-sys/0.52.0 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows-targets/0.52.0 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.52.0 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.52.0 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.52.0 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.52.0 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.52.0 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.52.0 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.52.0 \
+ crate://crates.io/winnow/0.5.37 \
+ crate://crates.io/yansi-term/0.1.2 \
+"
+
+SRC_URI[aho-corasick-1.1.2.sha256sum] = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+SRC_URI[alsa-0.8.1.sha256sum] = "ce34de545ad29bcc00cb1b87a94c132256dcf83aa7eeb9674482568405a6ff0a"
+SRC_URI[alsa-sys-0.3.1.sha256sum] = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527"
+SRC_URI[annotate-snippets-0.9.2.sha256sum] = "ccaf7e9dfbb6ab22c82e473cd1a8a7bd313c19a5b7e40970f3d89ef5a5c9e81e"
+SRC_URI[anstream-0.6.11.sha256sum] = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
+SRC_URI[anstyle-1.0.5.sha256sum] = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220"
+SRC_URI[anstyle-parse-0.2.3.sha256sum] = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+SRC_URI[anstyle-query-1.0.2.sha256sum] = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+SRC_URI[anstyle-wincon-3.0.2.sha256sum] = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+SRC_URI[anyhow-1.0.79.sha256sum] = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+SRC_URI[arc-swap-1.6.0.sha256sum] = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+SRC_URI[bindgen-0.69.4.sha256sum] = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0"
+SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.1.sha256sum] = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+SRC_URI[cexpr-0.6.0.sha256sum] = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+SRC_URI[cfg-expr-0.15.6.sha256sum] = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a"
+SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+SRC_URI[clang-sys-1.7.0.sha256sum] = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1"
+SRC_URI[clap-4.4.18.sha256sum] = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c"
+SRC_URI[clap_builder-4.4.18.sha256sum] = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7"
+SRC_URI[clap_derive-4.4.7.sha256sum] = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+SRC_URI[clap_lex-0.6.0.sha256sum] = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+SRC_URI[colorchoice-1.0.0.sha256sum] = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+SRC_URI[convert_case-0.6.0.sha256sum] = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+SRC_URI[cookie-factory-0.3.2.sha256sum] = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b"
+SRC_URI[either-1.9.0.sha256sum] = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+SRC_URI[env_filter-0.1.0.sha256sum] = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea"
+SRC_URI[env_logger-0.11.1.sha256sum] = "05e7cf40684ae96ade6232ed84582f40ce0a66efcd43a5117aef610534f8e0b8"
+SRC_URI[equivalent-1.0.1.sha256sum] = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+SRC_URI[errno-0.3.8.sha256sum] = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+SRC_URI[fastrand-2.0.1.sha256sum] = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+SRC_URI[futures-0.3.30.sha256sum] = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+SRC_URI[futures-channel-0.3.30.sha256sum] = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+SRC_URI[futures-core-0.3.30.sha256sum] = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+SRC_URI[futures-executor-0.3.30.sha256sum] = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+SRC_URI[futures-io-0.3.30.sha256sum] = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+SRC_URI[futures-macro-0.3.30.sha256sum] = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+SRC_URI[futures-sink-0.3.30.sha256sum] = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+SRC_URI[futures-task-0.3.30.sha256sum] = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+SRC_URI[futures-timer-3.0.2.sha256sum] = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+SRC_URI[futures-util-0.3.30.sha256sum] = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+SRC_URI[hashbrown-0.14.3.sha256sum] = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+SRC_URI[heck-0.4.1.sha256sum] = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+SRC_URI[humantime-2.1.0.sha256sum] = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+SRC_URI[indexmap-2.2.2.sha256sum] = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520"
+SRC_URI[itertools-0.12.1.sha256sum] = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+SRC_URI[lazycell-1.3.0.sha256sum] = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+SRC_URI[libc-0.2.153.sha256sum] = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+SRC_URI[libloading-0.8.1.sha256sum] = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+SRC_URI[libspa-0.8.0.sha256sum] = "65f3a4b81b2a2d8c7f300643676202debd1b7c929dbf5c9bb89402ea11d19810"
+SRC_URI[libspa-sys-0.8.0.sha256sum] = "bf0d9716420364790e85cbb9d3ac2c950bde16a7dd36f3209b7dfdfc4a24d01f"
+SRC_URI[linux-raw-sys-0.4.13.sha256sum] = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
+SRC_URI[log-0.4.20.sha256sum] = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+SRC_URI[memchr-2.7.1.sha256sum] = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+SRC_URI[nix-0.26.4.sha256sum] = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+SRC_URI[nix-0.27.1.sha256sum] = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+SRC_URI[pin-project-lite-0.2.13.sha256sum] = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+SRC_URI[pin-utils-0.1.0.sha256sum] = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+SRC_URI[pipewire-0.8.0.sha256sum] = "08e645ba5c45109106d56610b3ee60eb13a6f2beb8b74f8dc8186cf261788dda"
+SRC_URI[pipewire-sys-0.8.0.sha256sum] = "849e188f90b1dda88fe2bfe1ad31fe5f158af2c98f80fb5d13726c44f3f01112"
+SRC_URI[pkg-config-0.3.29.sha256sum] = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
+SRC_URI[proc-macro2-1.0.78.sha256sum] = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
+SRC_URI[quote-1.0.35.sha256sum] = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+SRC_URI[redox_syscall-0.4.1.sha256sum] = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+SRC_URI[regex-1.10.3.sha256sum] = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+SRC_URI[regex-automata-0.4.5.sha256sum] = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
+SRC_URI[regex-syntax-0.8.2.sha256sum] = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+SRC_URI[relative-path-1.9.2.sha256sum] = "e898588f33fdd5b9420719948f9f2a32c922a246964576f71ba7f24f80610fbc"
+SRC_URI[rstest-0.18.2.sha256sum] = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199"
+SRC_URI[rstest_macros-0.18.2.sha256sum] = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605"
+SRC_URI[rustc-hash-1.1.0.sha256sum] = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+SRC_URI[rustix-0.38.31.sha256sum] = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+SRC_URI[semver-1.0.21.sha256sum] = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+SRC_URI[serde-1.0.196.sha256sum] = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
+SRC_URI[serde_derive-1.0.196.sha256sum] = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
+SRC_URI[serde_spanned-0.6.5.sha256sum] = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+SRC_URI[shlex-1.3.0.sha256sum] = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+SRC_URI[slab-0.4.9.sha256sum] = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+SRC_URI[smallvec-1.13.1.sha256sum] = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+SRC_URI[strsim-0.10.0.sha256sum] = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+SRC_URI[syn-2.0.46.sha256sum] = "89456b690ff72fddcecf231caedbe615c59480c93358a93dfae7fc29e3ebbf0e"
+SRC_URI[system-deps-6.2.0.sha256sum] = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331"
+SRC_URI[target-lexicon-0.12.13.sha256sum] = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae"
+SRC_URI[tempfile-3.9.0.sha256sum] = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
+SRC_URI[thiserror-1.0.56.sha256sum] = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+SRC_URI[thiserror-impl-1.0.56.sha256sum] = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+SRC_URI[toml-0.8.2.sha256sum] = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+SRC_URI[toml_datetime-0.6.3.sha256sum] = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+SRC_URI[toml_edit-0.20.2.sha256sum] = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+SRC_URI[unicode-segmentation-1.10.1.sha256sum] = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+SRC_URI[utf8parse-0.2.1.sha256sum] = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+SRC_URI[version-compare-0.1.1.sha256sum] = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+SRC_URI[vhost-0.10.0.sha256sum] = "2b64e816d0d49769fbfaa1494eb77cc2a3ddc526ead05c7f922cb7d64106286f"
+SRC_URI[vhost-user-backend-0.13.1.sha256sum] = "72c8c447d076ac508d78cb45664d203df7989e891656dce260a7e93d72352c9a"
+SRC_URI[virtio-bindings-0.2.2.sha256sum] = "878bcb1b2812a10c30d53b0ed054999de3d98f25ece91fc173973f9c57aaae86"
+SRC_URI[virtio-queue-0.11.0.sha256sum] = "e3f69a13d6610db9312acbb438b0390362af905d37634a2106be70c0f734986d"
+SRC_URI[vm-memory-0.14.0.sha256sum] = "74ffc42216c32c35f858fa4bfdcd9b61017dfd691e0240268fdc85dbf59e5459"
+SRC_URI[vmm-sys-util-0.12.1.sha256sum] = "1d1435039746e20da4f8d507a72ee1b916f7b4b05af7a91c093d2c6561934ede"
+SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-sys-0.52.0.sha256sum] = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows-targets-0.52.0.sha256sum] = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_gnullvm-0.52.0.sha256sum] = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_aarch64_msvc-0.52.0.sha256sum] = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_gnu-0.52.0.sha256sum] = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_i686_msvc-0.52.0.sha256sum] = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnu-0.52.0.sha256sum] = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_gnullvm-0.52.0.sha256sum] = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[windows_x86_64_msvc-0.52.0.sha256sum] = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+SRC_URI[winnow-0.5.37.sha256sum] = "a7cad8365489051ae9f054164e459304af2e7e9bb407c958076c8bf4aef52da5"
+SRC_URI[yansi-term-0.1.2.sha256sum] = "fe5c30ade05e61656247b2e334a031dfd0cc466fadef865bdcdea8d537951bf1"
diff --git a/recipes-extended/foo/vhost-device-sound_0.1.0.bb b/recipes-extended/foo/vhost-device-sound_0.1.0.bb
new file mode 100644
index 000000000..8b82b4d06
--- /dev/null
+++ b/recipes-extended/foo/vhost-device-sound_0.1.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A virtio-sound device using the vhost-user protocol."
+HOMEPAGE = "https://github.com/rust-vmm/vhost-device"
+LICENSE = "Apache-2.0 | BSD-3-Clause"
+LIC_FILES_CHKSUM = " \
+ file://LICENSE-APACHE;md5=3b83ef96387f14655fc854ddc3c6bd57 \
+ file://LICENSE-BSD-3-Clause;md5=2489db1359f496fff34bd393df63947e \
+"
+
+DEPENDS += "alsa-lib pipewire clang-cross-${TARGET_ARCH}"
+
+SRC_URI += "crate://crates.io/vhost-device-sound/0.1.0"
+
+inherit cargo cargo-update-recipe-crates pkgconfig
+
+include vhost-device-sound-crates.inc
+
+SKIP_RECIPE[vhost-device-sound] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'clang-layer', '', 'Depends on clang-native from meta-clang which is not included', d)}"
+
diff --git a/recipes-platform/images/agl-demo-features.inc b/recipes-platform/images/agl-demo-features.inc
index a8112c83d..9f03fd2f6 100644
--- a/recipes-platform/images/agl-demo-features.inc
+++ b/recipes-platform/images/agl-demo-features.inc
@@ -8,3 +8,6 @@ FEATURE_PACKAGES_kuksa-val-databroker-client = " \
${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'packagegroup-agl-kuksa-val-databroker-devel' , '', d)} \
"
FEATURE_PACKAGES_kuksa-val-databroker = "packagegroup-agl-kuksa-val-databroker"
+
+DEMO_CONF_SUFFIX_GW = "${@bb.utils.contains("AGL_FEATURES", "agl-demo-gateway-preload", "-gateway-demo", "", d)}"
+DEMO_CONF_SUFFIX = "${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "-kvm-demo", "${DEMO_CONF_SUFFIX_GW}", d)}"
diff --git a/recipes-platform/images/agl-demo-platform-crosssdk.bb b/recipes-platform/images/agl-demo-platform-crosssdk.bb
index 70daba005..c9ed07a0a 120000..100644
--- a/recipes-platform/images/agl-demo-platform-crosssdk.bb
+++ b/recipes-platform/images/agl-demo-platform-crosssdk.bb
@@ -1 +1,16 @@
-agl-ivi-demo-platform-crosssdk.bb \ No newline at end of file
+require agl-ivi-demo-platform.bb
+
+SUMMARY = "Cross SDK of demo AGL Distribution for IVI profile"
+
+DESCRIPTION = "SDK image for full AGL Distribution for IVI profile. \
+It includes the full toolchain, plus development headers and libraries \
+for everything in the demo platform to form a standalone cross SDK."
+
+inherit agl-crosssdk
+
+require agl-ivi-crosssdk.inc
+
+inherit populate_sdk_qt5
+
+# Add qtwaylandscanner to the SDK
+TOOLCHAIN_HOST_TASK += "nativesdk-qtwayland-tools"
diff --git a/recipes-platform/images/agl-demo-platform-html5.bb b/recipes-platform/images/agl-demo-platform-html5.bb
index fabf5e35f..520b443e9 120000..100644
--- a/recipes-platform/images/agl-demo-platform-html5.bb
+++ b/recipes-platform/images/agl-demo-platform-html5.bb
@@ -1 +1,13 @@
-agl-ivi-demo-platform-html5.bb \ No newline at end of file
+require agl-image-ivi.bb
+
+SUMMARY = "DEMO platform of AGL HTML5 profile"
+DESCRIPTION = "Contains the web runtime and sample web apps"
+
+require agl-demo-container-guest-integration.inc
+
+CLANGSDK = "1"
+
+# add packages for demo platform (include demo apps) here
+IMAGE_INSTALL += " \
+ packagegroup-agl-demo-platform-html5 \
+"
diff --git a/recipes-platform/images/agl-demo-platform.bb b/recipes-platform/images/agl-demo-platform.bb
index ff29cf3e8..36f99a70a 120000..100644
--- a/recipes-platform/images/agl-demo-platform.bb
+++ b/recipes-platform/images/agl-demo-platform.bb
@@ -1 +1,23 @@
-agl-ivi-demo-platform.bb \ No newline at end of file
+require agl-ivi-demo-base.bb
+
+DESCRIPTION = "AGL Qt Demo Platform image"
+
+AGL_APPS_INSTALL += " \
+ dashboard \
+ hvac \
+ ondemandnavi \
+ ondemandnavi-conf${DEMO_CONF_SUFFIX} \
+ settings \
+ mediaplayer \
+ messaging \
+ phone \
+ radio \
+ window-management-client-grpc \
+ camera-gstreamer \
+"
+
+IMAGE_INSTALL += " \
+ packagegroup-agl-demo-platform \
+ ${@bb.utils.contains("AGL_FEATURES", "agl-demo-preload", "", "weston-terminal-conf", d)} \
+"
+
diff --git a/recipes-platform/images/agl-gateway-demo-platform.bb b/recipes-platform/images/agl-gateway-demo-platform.bb
new file mode 100644
index 000000000..abf563530
--- /dev/null
+++ b/recipes-platform/images/agl-gateway-demo-platform.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "AGL Gateway Demo Platform 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)} \
+"
+
+IMAGE_INSTALL += " \
+ agl-vss-proxy \
+ vss-agl-gw-control-panel \
+ vss-agl-gw-hardware \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'agl-devel', 'packagegroup-agl-kuksa-val-databroker-devel' , '', d)} \
+ tcpdump \
+"
diff --git a/recipes-platform/images/agl-ivi-demo-control-panel.bb b/recipes-platform/images/agl-ivi-demo-control-panel.bb
index 21785caea..c9bd890d4 100644
--- a/recipes-platform/images/agl-ivi-demo-control-panel.bb
+++ b/recipes-platform/images/agl-ivi-demo-control-panel.bb
@@ -1,9 +1,19 @@
require recipes-platform/images/agl-image-weston.bb
+require agl-demo-features.inc
SUMMARY = "AGL demo control panel image"
IMAGE_FEATURES += "splash package-management ssh-server-openssh"
+# KUKSA.val databroker is only installed with
+# "agl-demo-gateway-preload" feature, as it used as
+# a bridge to CAN output via kuksa-dbc-feeder in that
+# configuration.
+IMAGE_FEATURES += " \
+ kuksa-val-databroker-client \
+ ${@bb.utils.contains("AGL_FEATURES", "agl-demo-gateway-preload", "kuksa-val-databroker", "", d)} \
+"
+
# NOTE: The client key and certificate in kuksa-certificates-agl-client
# seem required by kuksa-client at the moment even though client
# certification has been deprecated upstream, this needs further
@@ -24,4 +34,5 @@ IMAGE_INSTALL += "\
qtwayland \
qtwayland-plugins \
qtwayland-qmlplugins \
+ ${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", "can-test-tools" , "", d)} \
"
diff --git a/recipes-platform/images/agl-ivi-demo-features.inc b/recipes-platform/images/agl-ivi-demo-features.inc
index 9aabaafee..cc5da3efe 100644
--- a/recipes-platform/images/agl-ivi-demo-features.inc
+++ b/recipes-platform/images/agl-ivi-demo-features.inc
@@ -4,7 +4,7 @@ FEATURE_PACKAGES_agl-demo-preload = "packagegroup-agl-demo-preload"
FEATURE_PACKAGES_agl-demo-cluster-support = " \
tbtnavi \
- ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "tbtnavi-conf-kvm-demo", "tbtnavi-conf", d)} \
+ tbtnavi-conf${DEMO_CONF_SUFFIX} \
${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "", "kuksa-databroker-agl-demo-cluster", d)} \
"
@@ -15,5 +15,5 @@ IMAGE_FEATURES += " \
IMAGE_FEATURES += " \
kuksa-val-databroker-client \
- ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "", "kuksa-val-databroker", d)} \
+ ${@bb.utils.contains_any("AGL_FEATURES", "agl-kvm-host-kuksa agl-demo-gateway-preload", "", "kuksa-val-databroker", d)} \
"
diff --git a/recipes-platform/images/agl-ivi-demo-platform-flutter.bb b/recipes-platform/images/agl-ivi-demo-platform-flutter.bb
index 81a1c8046..7cdf2c42a 100644
--- a/recipes-platform/images/agl-ivi-demo-platform-flutter.bb
+++ b/recipes-platform/images/agl-ivi-demo-platform-flutter.bb
@@ -4,8 +4,8 @@ DESCRIPTION = "AGL Flutter Demo Platform image"
AGL_APPS_INSTALL += " \
flutter-ics-homescreen \
- ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "flutter-ics-homescreen-conf-kvm-demo", "flutter-ics-homescreen-conf", d)} \
+ flutter-ics-homescreen-conf${DEMO_CONF_SUFFIX} \
camera-gstreamer \
ondemandnavi \
- ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "ondemandnavi-conf-kvm-demo", "ondemandnavi-conf", d)} \
+ ondemandnavi-conf${DEMO_CONF_SUFFIX} \
"
diff --git a/recipes-platform/images/agl-ivi-demo-platform.bb b/recipes-platform/images/agl-ivi-demo-platform.bb
index 2854462cf..36f99a70a 100644
--- a/recipes-platform/images/agl-ivi-demo-platform.bb
+++ b/recipes-platform/images/agl-ivi-demo-platform.bb
@@ -6,7 +6,7 @@ AGL_APPS_INSTALL += " \
dashboard \
hvac \
ondemandnavi \
- ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "ondemandnavi-conf-kvm-demo", "ondemandnavi-conf", d)} \
+ ondemandnavi-conf${DEMO_CONF_SUFFIX} \
settings \
mediaplayer \
messaging \
diff --git a/recipes-platform/images/agl-kvm-demo-platform.bb b/recipes-platform/images/agl-kvm-demo-platform.bb
index ddb2ddb45..6e3ad6f15 100644
--- a/recipes-platform/images/agl-kvm-demo-platform.bb
+++ b/recipes-platform/images/agl-kvm-demo-platform.bb
@@ -8,9 +8,11 @@ require agl-demo-features.inc
IMAGE_FEATURES += "splash package-management ssh-server-openssh"
# If building with "agl-kvm-host-kuksa", the databroker and likely
-# some clients run on the host
+# some clients run on the host, except when building for the
+# gateway demo, where the databroker runs on the gateway.
IMAGE_FEATURES += " \
- ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "kuksa-val-databroker kuksa-val-databroker-client", "", d)} \
+ ${@bb.utils.contains_any("AGL_FEATURES", "agl-kvm-host-kuksa agl-demo-gateway-preload", "kuksa-val-databroker-client", "", d)} \
+ ${@bb.utils.contains("AGL_FEATURES", "agl-kvm-host-kuksa", "kuksa-val-databroker", "", d)} \
${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", "can-test-tools" , "", d)} \
"
@@ -39,12 +41,12 @@ IMAGE_INSTALL += " \
# become feasible to use.
HOST_AUDIO_INSTALL = " \
packagegroup-agl-ivi-services-platform \
- agl-service-radio-conf-kvm-demo \
packagegroup-pipewire \
wireplumber-config-agl \
wireplumber-policy-config-agl \
mpd \
udisks2 \
+ agl-service-radio-conf-kvm-demo \
${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", "packagegroup-pipewire-tools mpc" , "", d)} \
"
diff --git a/recipes-platform/packagegroups/packagegroup-agl-kuksa-val-databroker.bb b/recipes-platform/packagegroups/packagegroup-agl-kuksa-val-databroker.bb
index a9382e5b7..9c87d1244 100644
--- a/recipes-platform/packagegroups/packagegroup-agl-kuksa-val-databroker.bb
+++ b/recipes-platform/packagegroups/packagegroup-agl-kuksa-val-databroker.bb
@@ -18,4 +18,5 @@ RDEPENDS:packagegroup-agl-kuksa-val-databroker = "\
RDEPENDS:packagegroup-agl-kuksa-val-databroker-devel = "\
kuksa-databroker-cli \
+ kuksa-client \
"
diff --git a/recipes-support/qemu-set-display/qemu-set-display_git.bb b/recipes-support/qemu-set-display/qemu-set-display_git.bb
deleted file mode 100644
index 870ac6b86..000000000
--- a/recipes-support/qemu-set-display/qemu-set-display_git.bb
+++ /dev/null
@@ -1,14 +0,0 @@
-DESCRIPTION = "Helper tool to enable the secondandary vnc displays"
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=361b6b837cad26c6900a926b62aada5f"
-
-
-SRC_URI = "git://github.com/dhobsong/qemu-set-display.git;protocol=https;branch=main"
-SRCREV = "${AUTOREV}"
-S = "${WORKDIR}/git"
-
-DEPENDS += "libvncserver"
-
-inherit meson pkgconfig
-
-PV = "0.1+git${SRCPV}"
diff --git a/templates/feature/agl-demo-gateway-preload/50_local.conf.inc b/templates/feature/agl-demo-gateway-preload/50_local.conf.inc
new file mode 100644
index 000000000..8581998a3
--- /dev/null
+++ b/templates/feature/agl-demo-gateway-preload/50_local.conf.inc
@@ -0,0 +1,2 @@
+#see meta-agl-demo/conf/include/agl-demo-gateway-preload.inc
+require conf/include/agl-demo-gateway-preload.inc
diff --git a/templates/feature/agl-demo-gateway-preload/README_feature_agl-demo-gateway-preload.md b/templates/feature/agl-demo-gateway-preload/README_feature_agl-demo-gateway-preload.md
new file mode 100644
index 000000000..585b87a91
--- /dev/null
+++ b/templates/feature/agl-demo-gateway-preload/README_feature_agl-demo-gateway-preload.md
@@ -0,0 +1,9 @@
+---
+description: Feature agl-demo-gateway-preload
+authors: Scott Murray <scott.murray@konsulko.com>
+---
+
+### Feature agl-demo-gateway-preload
+
+Results in gateway demo specific configuration being included into built images.
+
diff --git a/templates/feature/agl-kvm-host-audio/included.dep b/templates/feature/agl-kvm-host-audio/included.dep
index f1f0a2f99..b2b1014cf 100644
--- a/templates/feature/agl-kvm-host-audio/included.dep
+++ b/templates/feature/agl-kvm-host-audio/included.dep
@@ -1 +1 @@
-agl-kvm agl-kvm-host-kuksa
+agl-kvm