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
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
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.
17 Upstream-Status: pending
19 Signed-off-by: Scott Murray <scott.murray@konsulko.com>
21 dbc2val/dbcfeeder.py | 10 ++++++++--
22 dbc2val/dbcfeederlib/dbcreader.py | 11 ++++++++---
23 2 files changed, 16 insertions(+), 5 deletions(-)
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:
32 log.info("Using socket CAN device '%s'", canport)
33 - self._reader.start_listening(bustype="socketcan", channel=canport)
35 + self._reader.start_listening(bustype="socketcan", channel=canport)
37 + log.error("Could not open {}, exiting".format(canport))
42 @@ -278,8 +282,10 @@ def parse_config(filename):
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",
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:
61 self.bus = can.interface.Bus(*args, **kwargs) # pylint: disable=abstract-class-instantiated
62 - rxThread = threading.Thread(target=self.rxWorker)
64 + self.rxThread = threading.Thread(target=self.rxWorker)
65 + self.rxThread.start()
67 def get_whitelist(self):
68 log.info("Collecting signals, generating CAN ID whitelist")
69 @@ -86,7 +86,10 @@ class DBCReader:
71 log.info("Starting Rx thread")
73 - msg = self.bus.recv(timeout=1)
75 + msg = self.bus.recv(timeout=1)
78 log.debug("processing message from CAN bus")
79 if msg and msg.arbitration_id in self.canidwl:
81 @@ -113,3 +116,5 @@ class DBCReader:
86 + self.rxThread.join()