a3dd31be454dda5897d3b0338da79112bec3903c
[AGL/meta-agl-demo.git] / recipes-connectivity / kuksa-val / kuksa-dbc-feeder / 0002-dbc2val-usability-improvements.patch
1 From 91fb1f5a92e8784446c4e354fe5a8c465d6b3cb8 Mon Sep 17 00:00:00 2001
2 From: Scott Murray <scott.murray@konsulko.com>
3 Date: Tue, 2 May 2023 16:27:04 -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              | 10 ++++++++--
22  dbc2val/dbcfeederlib/dbcreader.py | 11 ++++++++---
23  2 files changed, 16 insertions(+), 5 deletions(-)
24
25 diff --git a/dbc2val/dbcfeeder.py b/dbc2val/dbcfeeder.py
26 index d32bb04..b73b96e 100755
27 --- a/dbc2val/dbcfeeder.py
28 +++ b/dbc2val/dbcfeeder.py
29 @@ -170,7 +170,11 @@ class Feeder:
30  
31              # use socketCAN
32              log.info("Using socket CAN device '%s'", canport)
33 -            self._reader.start_listening(bustype="socketcan", channel=canport)
34 +            try:
35 +                self._reader.start_listening(bustype="socketcan", channel=canport)
36 +            except:
37 +                log.error("Could not open {}, exiting".format(canport))
38 +                sys.exit(-1)
39  
40          self._run()
41  
42 @@ -278,8 +282,10 @@ def parse_config(filename):
43          configfile = filename
44      else:
45          config_candidates = [
46 -            "/config/dbc_feeder.ini",
47 +            "/etc/kuksa-dbc-feeder/config.ini",
48 +            "/etc/kuksa-dbc-feeder/dbc_feeder.ini",
49              "/etc/dbc_feeder.ini",
50 +            "/config/dbc_feeder.ini",
51              "config/dbc_feeder.ini",
52          ]
53          for candidate in config_candidates:
54 diff --git a/dbc2val/dbcfeederlib/dbcreader.py b/dbc2val/dbcfeederlib/dbcreader.py
55 index 5dad41f..c2f5b55 100644
56 --- a/dbc2val/dbcfeederlib/dbcreader.py
57 +++ b/dbc2val/dbcfeederlib/dbcreader.py
58 @@ -56,8 +56,8 @@ class DBCReader:
59              Bitrate in bit/s.
60          """
61          self.bus = can.interface.Bus(*args, **kwargs) # pylint: disable=abstract-class-instantiated
62 -        rxThread = threading.Thread(target=self.rxWorker)
63 -        rxThread.start()
64 +        self.rxThread = threading.Thread(target=self.rxWorker)
65 +        self.rxThread.start()
66  
67      def get_whitelist(self):
68          log.info("Collecting signals, generating CAN ID whitelist")
69 @@ -86,7 +86,10 @@ class DBCReader:
70      def rxWorker(self):
71          log.info("Starting Rx thread")
72          while self.run:
73 -            msg = self.bus.recv(timeout=1)
74 +            try:
75 +                msg = self.bus.recv(timeout=1)
76 +            except Exception:
77 +                break
78              log.debug("processing message from CAN bus")
79              if msg and msg.arbitration_id in self.canidwl:
80                  try:
81 @@ -113,3 +116,5 @@ class DBCReader:
82  
83      def stop(self):
84          self.run = False
85 +        self.bus.shutdown()
86 +        self.rxThread.join()
87 -- 
88 2.39.2
89