1 From a22d972bc497ab46d99c1d118bd40b9471fef3a7 Mon Sep 17 00:00:00 2001
2 From: Scott Murray <scott.murray@konsulko.com>
3 Date: Mon, 13 Jun 2022 12:54:54 -0400
4 Subject: [PATCH] dbc2val: add duplicate filtering option
6 To avoid generating a lot of duplicated signal events from the
7 CAN messages generated by LIN polling, add a per-target
8 "filter-duplicates" option that can be used for signals where
9 only changes should be pushed toi the VIS server. This is
10 required with the current performance of the DBC feeder to avoid
11 ending up with an increasing backlog of signal commands to the
12 server. This will be investigated with upstream.
14 Upstream-Status: pending
15 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
17 kuksa_feeders/dbc2val/dbc2vssmapper.py | 27 +++++++++++++++++++-------
18 1 file changed, 20 insertions(+), 7 deletions(-)
20 diff --git a/kuksa_feeders/dbc2val/dbc2vssmapper.py b/kuksa_feeders/dbc2val/dbc2vssmapper.py
21 index 1718154..2feb572 100644
22 --- a/kuksa_feeders/dbc2val/dbc2vssmapper.py
23 +++ b/kuksa_feeders/dbc2val/dbc2vssmapper.py
24 @@ -48,14 +48,27 @@ class mapper:
25 # Check whether there are transforms defined to map DBC signal "signal" to
26 # VSS path "target". Returns the (potentially) transformed values
27 def transform(self,signal, target, value):
28 - if "transform" not in self.mapping[signal]["targets"][target].keys(): #no transform defined, return as is
30 - for transform in self.mapping[signal]["targets"][target]["transform"]:
31 - if transform in self.transforms.keys(): #found a known transform and apply
32 - value=self.transforms[transform].transform(self.mapping[signal]["targets"][target]["transform"][transform],value)
34 + if "transform" in self.mapping[signal]["targets"][target].keys():
35 + for transform in self.mapping[signal]["targets"][target]["transform"]:
36 + if transform in self.transforms.keys(): #found a known transform and apply
37 + result = self.transforms[transform].transform(self.mapping[signal]["targets"][target]["transform"][transform],value)
39 + print(f"Warning: Unknown transform {transform} for {signal}->{target}")
40 + # else no transform defined, return as is
42 + if (("filter-duplicates" in self.mapping[signal]["targets"][target]) and
43 + self.mapping[signal]["targets"][target]["filter-duplicates"] == "true"):
44 + if "last" in self.mapping[signal]["targets"][target]:
45 + if self.mapping[signal]["targets"][target]["last"] == result:
46 + # ignore duplicate value
49 + self.mapping[signal]["targets"][target]["last"] = result
51 - print(f"Warning: Unknown transform {transform} for {signal}->{target}")
53 + self.mapping[signal]["targets"][target]["last"] = result
57 def __contains__(self,key):
58 return key in self.mapping.keys()