diff options
Diffstat (limited to 'recipes-connectivity/kuksa-val/kuksa-dbc-feeder')
-rw-r--r-- | recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0003-dbc2val-add-duplicate-filtering-option.patch | 61 | ||||
-rw-r--r-- | recipes-connectivity/kuksa-val/kuksa-dbc-feeder/mapping.yml | 123 |
2 files changed, 151 insertions, 33 deletions
diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0003-dbc2val-add-duplicate-filtering-option.patch b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0003-dbc2val-add-duplicate-filtering-option.patch new file mode 100644 index 000000000..1709ac1e4 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0003-dbc2val-add-duplicate-filtering-option.patch @@ -0,0 +1,61 @@ +From a22d972bc497ab46d99c1d118bd40b9471fef3a7 Mon Sep 17 00:00:00 2001 +From: Scott Murray <scott.murray@konsulko.com> +Date: Mon, 13 Jun 2022 12:54:54 -0400 +Subject: [PATCH] dbc2val: add duplicate filtering option + +To avoid generating a lot of duplicated signal events from the +CAN messages generated by LIN polling, add a per-target +"filter-duplicates" option that can be used for signals where +only changes should be pushed toi the VIS server. This is +required with the current performance of the DBC feeder to avoid +ending up with an increasing backlog of signal commands to the +server. This will be investigated with upstream. + +Upstream-Status: pending +Signed-off-by: Scott Murray <scott.murray@konsulko.com> +--- + kuksa_feeders/dbc2val/dbc2vssmapper.py | 27 +++++++++++++++++++------- + 1 file changed, 20 insertions(+), 7 deletions(-) + +diff --git a/kuksa_feeders/dbc2val/dbc2vssmapper.py b/kuksa_feeders/dbc2val/dbc2vssmapper.py +index 1718154..2feb572 100644 +--- a/kuksa_feeders/dbc2val/dbc2vssmapper.py ++++ b/kuksa_feeders/dbc2val/dbc2vssmapper.py +@@ -48,14 +48,27 @@ class mapper: + # Check whether there are transforms defined to map DBC signal "signal" to + # VSS path "target". Returns the (potentially) transformed values + def transform(self,signal, target, value): +- if "transform" not in self.mapping[signal]["targets"][target].keys(): #no transform defined, return as is +- return value +- for transform in self.mapping[signal]["targets"][target]["transform"]: +- if transform in self.transforms.keys(): #found a known transform and apply +- value=self.transforms[transform].transform(self.mapping[signal]["targets"][target]["transform"][transform],value) ++ result = value ++ if "transform" in self.mapping[signal]["targets"][target].keys(): ++ for transform in self.mapping[signal]["targets"][target]["transform"]: ++ if transform in self.transforms.keys(): #found a known transform and apply ++ result = self.transforms[transform].transform(self.mapping[signal]["targets"][target]["transform"][transform],value) ++ else: ++ print(f"Warning: Unknown transform {transform} for {signal}->{target}") ++ # else no transform defined, return as is ++ ++ if (("filter-duplicates" in self.mapping[signal]["targets"][target]) and ++ self.mapping[signal]["targets"][target]["filter-duplicates"] == "true"): ++ if "last" in self.mapping[signal]["targets"][target]: ++ if self.mapping[signal]["targets"][target]["last"] == result: ++ # ignore duplicate value ++ result = None ++ else: ++ self.mapping[signal]["targets"][target]["last"] = result + else: +- print(f"Warning: Unknown transform {transform} for {signal}->{target}") +- return value ++ self.mapping[signal]["targets"][target]["last"] = result ++ ++ return result + + def __contains__(self,key): + return key in self.mapping.keys() +-- +2.35.1 + diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/mapping.yml b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/mapping.yml index f8a561d27..ee970a32d 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/mapping.yml +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/mapping.yml @@ -11,85 +11,142 @@ PT_EngineSpeed: transform: math: "floor(x+0.5)" +# +# NOTE: +# +# The following mappings depend on the AGL-specific VSS overlay +# that adds the extra Vehicle.Cabin.SteeringWheel.Switches sensors. +# Since the CAN events are coming from LIN polling, applications +# need to filter/debounce themselves. The minupdatedelay of 0 is +# intentional to avoid missing events. +# + SW_Next: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.Cabin.Infotainment.Media.Action: + Vehicle.Cabin.SteeringWheel.Switches.Next: + filter-duplicates: "true" transform: fullmapping: - 1: "SkipForward" + 0: "false" + 1: "true" SW_Previous: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.Cabin.Infotainment.Media.Action: + Vehicle.Cabin.SteeringWheel.Switches.Previous: + filter-duplicates: "true" transform: fullmapping: - 1: "SkipBackward" + 0: "false" + 1: "true" -# NOTE: Dependent on AGL-specific VSS overlay adding the extra action SW_Mode: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.Cabin.Infotainment.Media.Action: + Vehicle.Cabin.SteeringWheel.Switches.Mode: + filter-duplicates: "true" transform: fullmapping: - 1: "NextSource" + 0: "false" + 1: "true" -# NOTE: Dependent on AGL-specific VSS overlay adding the signal SW_Info: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.Cabin.Infotainment.Cluster.Mode: + Vehicle.Cabin.SteeringWheel.Switches.Info: + filter-duplicates: "true" transform: fullmapping: + 0: "false" 1: "true" -# -# The following is a little hackish, due to relying on the -# application to treat IsActive and IsSet = "true" as toggles, and -# being dependent on the AGL-specific VSS overlay to add IsSet. -# A standalone LIN feeder with some state knowledge would maybe -# be cleaner. Another possible option would be the addition of -# another type of transform that has state to the DBC feeder. -# - SW_CruiseEnable: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.ADAS.CruiseControl.IsActive: + Vehicle.Cabin.SteeringWheel.Switches.CruiseEnable: + filter-duplicates: "true" transform: fullmapping: + 0: "false" 1: "true" SW_CruiseSet: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.ADAS.CruiseControl.IsSet: + Vehicle.Cabin.SteeringWheel.Switches.CruiseSet: + filter-duplicates: "true" transform: fullmapping: + 0: "false" 1: "true" SW_CruiseResume: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.ADAS.CruiseControl.IsSet: + Vehicle.Cabin.SteeringWheel.Switches.CruiseResume: + filter-duplicates: "true" transform: fullmapping: + 0: "false" 1: "true" SW_CruiseCancel: - minupdatedelay: 500 + minupdatedelay: 0 + targets: + Vehicle.Cabin.SteeringWheel.Switches.CruiseCancel: + filter-duplicates: "true" + transform: + fullmapping: + 0: "false" + 1: "true" + +SW_VolumeUp: + minupdatedelay: 0 targets: - Vehicle.ADAS.CruiseControl.IsSet: + Vehicle.Cabin.SteeringWheel.Switches.VolumeUp: + filter-duplicates: "true" transform: fullmapping: - 1: "false" + 0: "false" + 1: "true" + +SW_VolumeDown: + minupdatedelay: 0 + targets: + Vehicle.Cabin.SteeringWheel.Switches.VolumeDown: + filter-duplicates: "true" + transform: + fullmapping: + 0: "false" + 1: "true" + +SW_VolumeMute: + minupdatedelay: 0 + targets: + Vehicle.Cabin.SteeringWheel.Switches.VolumeMute: + filter-duplicates: "true" + transform: + fullmapping: + 0: "false" + 1: "true" + +SW_Horn: + minupdatedelay: 0 + targets: + Vehicle.Cabin.SteeringWheel.Switches.Horn: + filter-duplicates: "true" + transform: + fullmapping: + 0: "false" + 1: "true" SW_LaneDepartureWarning: - minupdatedelay: 500 + minupdatedelay: 0 targets: - Vehicle.ADAS.LaneDepartureDetection.IsActive: + Vehicle.Cabin.SteeringWheel.Switches.LaneDepartureWarning: + filter-duplicates: "true" transform: fullmapping: + 0: "false" 1: "true" |