summaryrefslogtreecommitdiffstats
path: root/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0003-dbc2val-add-duplicate-filtering-option.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0003-dbc2val-add-duplicate-filtering-option.patch')
-rw-r--r--recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0003-dbc2val-add-duplicate-filtering-option.patch61
1 files changed, 61 insertions, 0 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 00000000..1709ac1e
--- /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
+