homescreen_git.bb: Bump SRCREV to add meson support
[AGL/meta-agl-demo.git] / recipes-connectivity / kuksa-val / kuksa-dbc-feeder / 0003-dbc2val-add-duplicate-filtering-option.patch
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
5
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.
13
14 Upstream-Status: pending
15 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
16 ---
17  kuksa_feeders/dbc2val/dbc2vssmapper.py | 27 +++++++++++++++++++-------
18  1 file changed, 20 insertions(+), 7 deletions(-)
19
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
29 -            return value
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)
33 +        result = 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)
38 +                else:
39 +                    print(f"Warning: Unknown transform {transform} for {signal}->{target}")
40 +        # else no transform defined, return as is
41 +
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
47 +                    result = None
48 +                else:
49 +                    self.mapping[signal]["targets"][target]["last"] = result
50              else:
51 -                print(f"Warning: Unknown transform {transform} for {signal}->{target}")
52 -        return value
53 +                self.mapping[signal]["targets"][target]["last"] = result
54 +
55 +        return result
56  
57      def __contains__(self,key):
58          return key in self.mapping.keys()
59 -- 
60 2.35.1
61