kuksa-val: Upgrade to latest
[AGL/meta-agl-demo.git] / recipes-connectivity / kuksa-val / kuksa-dbc-feeder / 0002-dbc2val-usability-improvements.patch
1 From d0730c0d643738ac683d1b5c19b117893e3b2049 Mon Sep 17 00:00:00 2001
2 From: Scott Murray <scott.murray@konsulko.com>
3 Date: Tue, 11 Oct 2022 15:28:07 -0400
4 Subject: [PATCH 2/2] dbc2val: usability improvements
5
6 Changes:
7 - Tweaked default configuration file search path to better match
8   Linux FHS and kuksa-val-server.  First look for a config.ini in
9   /etc/kuksa-dbc-feeder, then /etc/dbc_feeder.ini.
10 - Add catching of exceptions around CAN device opening so that the
11   script can exit cleanly with an error message if the device is
12   not available.
13 - Fixed shutdown behavior with some tweaks to actually stop the
14   reader and KUKSA.val client library threads.  This makes the
15   script actually exit on SIGTERM as opposed to hanging.
16
17 Upstream-Status: pending
18
19 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
20 ---
21  dbc2val/dbcfeeder.py | 21 +++++++++++++++------
22  dbc2val/dbcreader.py | 12 ++++++++----
23  2 files changed, 23 insertions(+), 10 deletions(-)
24
25 diff --git a/dbc2val/dbcfeeder.py b/dbc2val/dbcfeeder.py
26 index 7daaa2b..33c2212 100755
27 --- a/dbc2val/dbcfeeder.py
28 +++ b/dbc2val/dbcfeeder.py
29 @@ -93,6 +93,7 @@ class Feeder:
30          self._connected = False
31          self._registered = False
32          self._can_queue = queue.Queue()
33 +        self.kuksa = None
34  
35      def start(
36          self,
37 @@ -134,7 +135,11 @@ class Feeder:
38          else:
39              # use socketCAN
40              log.info("Using socket CAN device '%s'", canport)
41 -            self._reader.start_listening(bustype="socketcan", channel=canport)
42 +            try:
43 +                self._reader.start_listening(bustype="socketcan", channel=canport)
44 +            except:
45 +                log.error("Could not open {}, exiting".format(canport))
46 +                sys.exit(-1)
47         
48          # databroker related
49          if USE_CASE=="databroker":
50 @@ -151,6 +156,8 @@ class Feeder:
51          log.info("Shutting down...")
52          self._shutdown = True
53          # Tell others to stop
54 +        if USE_CASE=="kuksa" and self.kuksa is not None:
55 +            self.kuksa.stop()
56          if self._reader is not None:
57              self._reader.stop()
58          if self._player is not None:
59 @@ -204,9 +211,10 @@ class Feeder:
60          # kuksa related
61          if USE_CASE=="kuksa":
62              global kuksaconfig
63 -            kuksa = KuksaClientThread(kuksaconfig)
64 -            kuksa.start()
65 -            kuksa.authorize()
66 +            self.kuksa = KuksaClientThread(kuksaconfig)
67 +            self.kuksa.start()
68 +            if "token" in kuksaconfig:
69 +                self.kuksa.authorize(kuksaconfig["token"])
70          
71          while self._shutdown is False:
72              # databroker related
73 @@ -255,7 +263,7 @@ class Feeder:
74                              self._provider.update_datapoint(target, value)
75                          # kuksa related
76                          elif USE_CASE=="kuksa":
77 -                            resp=json.loads(kuksa.setValue(target, str(value)))
78 +                            resp=json.loads(self.kuksa.setValue(target, str(value)))
79                              if "error" in resp:
80                                  if "message" in resp["error"]: 
81                                     log.error("Error setting {}: {}".format(target, resp["error"]["message"]))
82 @@ -282,8 +290,9 @@ def parse_config(filename):
83          configfile = filename
84      else:
85          config_candidates = [
86 -            "/config/dbc_feeder.ini",
87 +            "/etc/kuksa-dbc-feeder/config.ini",
88              "/etc/dbc_feeder.ini",
89 +            "/config/dbc_feeder.ini",
90              "config/dbc_feeder.ini",
91          ]
92          configfile = None
93 diff --git a/dbc2val/dbcreader.py b/dbc2val/dbcreader.py
94 index 2500832..b537a4d 100644
95 --- a/dbc2val/dbcreader.py
96 +++ b/dbc2val/dbcreader.py
97 @@ -54,8 +54,8 @@ class DBCReader:
98              Bitrate in bit/s.
99          """
100          self.bus = can.interface.Bus(*args, **kwargs)
101 -        rxThread = threading.Thread(target=self.rxWorker)
102 -        rxThread.start()
103 +        self.rxThread = threading.Thread(target=self.rxWorker)
104 +        self.rxThread.start()
105  
106      def get_whitelist(self):
107          log.info("Collecting signals, generating CAN ID whitelist")
108 @@ -83,7 +83,10 @@ class DBCReader:
109      def rxWorker(self):
110          log.info("Starting Rx thread")
111          while self.run:
112 -            msg = self.bus.recv(timeout=1)
113 +            try:
114 +                msg = self.bus.recv(timeout=1)
115 +            except Exception:
116 +                break
117              if msg and msg.arbitration_id in self.canidwl:
118                  try:
119                      decode = self.db.decode_message(msg.arbitration_id, msg.data)
120 @@ -105,4 +108,5 @@ class DBCReader:
121  
122      def stop(self):
123          self.run = False
124 -
125 +        self.bus.shutdown()
126 +        self.rxThread.join()
127 -- 
128 2.37.3
129