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