X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=recipes-connectivity%2Fkuksa-val%2Fkuksa-dbc-feeder%2F0002-dbc2val-usability-improvements.patch;h=a3dd31be454dda5897d3b0338da79112bec3903c;hb=1b7b7213e7a77d35b30cea990dfe03f32c0f5bea;hp=12e366aa800d8e6bd91ec7016ba8ce25932e421b;hpb=ca7d98904253c7404c3e6384ebb53d922a3c538a;p=AGL%2Fmeta-agl-demo.git diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0002-dbc2val-usability-improvements.patch b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0002-dbc2val-usability-improvements.patch index 12e366aa8..a3dd31be4 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0002-dbc2val-usability-improvements.patch +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0002-dbc2val-usability-improvements.patch @@ -1,120 +1,89 @@ -From fe10a3645e77cd8122d3d312d317bedcb88bc683 Mon Sep 17 00:00:00 2001 +From 91fb1f5a92e8784446c4e354fe5a8c465d6b3cb8 Mon Sep 17 00:00:00 2001 From: Scott Murray -Date: Thu, 12 May 2022 17:39:56 +0200 -Subject: [PATCH] dbc2val: usability improvements +Date: Tue, 2 May 2023 16:27:04 -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. -- Added a command-line option to specify configuration file, this - should allow running two instances against different interfaces. -- Added verbosity command-line option and made several messages - verbose mode only to avoid log spamming. -- Added '-u' option to python invocation to disable output buffering. - The intent is to make logging immediate, otherwise errors may not - get logged for some time (or at all). - 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 --- - kuksa_feeders/dbc2val/dbcfeeder.py | 40 ++++++++++++++++++++++-------- - 1 file changed, 29 insertions(+), 11 deletions(-) + dbc2val/dbcfeeder.py | 10 ++++++++-- + dbc2val/dbcfeederlib/dbcreader.py | 11 ++++++++--- + 2 files changed, 16 insertions(+), 5 deletions(-) -diff --git a/kuksa_feeders/dbc2val/dbcfeeder.py b/kuksa_feeders/dbc2val/dbcfeeder.py -index 56c316a..d2d70b9 100755 ---- a/kuksa_feeders/dbc2val/dbcfeeder.py -+++ b/kuksa_feeders/dbc2val/dbcfeeder.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/env -S python -u - - ######################################################################## - # Copyright (c) 2020 Robert Bosch GmbH -@@ -15,15 +15,21 @@ import os, sys, signal - import configparser - import queue - import json -+import argparse - - from dbc2val import dbc2vssmapper, dbcreader, j1939reader, elm2canbridge -- --scriptDir= os.path.dirname(os.path.realpath(__file__)) --sys.path.append(os.path.join(scriptDir, "../../")) - from kuksa_viss_client import KuksaClientThread - --print("kuksa.val DBC example feeder") --config_candidates=['/config/dbc_feeder.ini', '/etc/dbc_feeder.ini', os.path.join(scriptDir, 'config/dbc_feeder.ini')] -+parser = argparse.ArgumentParser("kuksa.val DBC example feeder") -+parser.add_argument("-c", "--config", dest="userconfig") -+parser.add_argument("-v", "--verbose", action="store_true") -+args = parser.parse_args() -+ -+if args.verbose: -+ print("kuksa.val DBC example feeder") -+config_candidates=['/etc/kuksa-dbc-feeder/config.ini', '/etc/dbc_feeder.ini'] -+if args.userconfig is not None: -+ config_candidates.insert(0, args.userconfig) - configfile = None - for candidate in config_candidates: - if os.path.isfile(candidate): -@@ -54,10 +60,12 @@ cancfg = config['can'] - canport = cancfg['port'] - - if config["can"].getboolean("j1939", False): -- print("Use j1939 reader") -+ if args.verbose: -+ print("Use j1939 reader") - reader = j1939reader.J1939Reader(cancfg,canQueue,mapping) - else: -- print("Use dbc reader") -+ if args.verbose: -+ print("Use dbc reader") - reader = dbcreader.DBCReader(cancfg, canQueue,mapping) +diff --git a/dbc2val/dbcfeeder.py b/dbc2val/dbcfeeder.py +index d32bb04..b73b96e 100755 +--- a/dbc2val/dbcfeeder.py ++++ b/dbc2val/dbcfeeder.py +@@ -170,7 +170,11 @@ class Feeder: - if canport == 'elmcan': -@@ -65,10 +73,18 @@ if canport == 'elmcan': - print("section {} missing from configuration, exiting".format(canport)) - sys.exit(-1) + # 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) -- print("Using elmcan. Trying to set up elm2can bridge") -+ if args.verbose: -+ print("Using elmcan. Trying to set up elm2can bridge") - elmbr=elm2canbridge.elm2canbridge(canport, config[canport], reader.canidwl) + self._run() --reader.start_listening() -+try: -+ reader.start_listening() -+except: -+ print("Could not open {}, exiting".format(canport)) -+ kuksa.stop() -+ reader.stop() -+ sys.exit(-1) -+ - running = True +@@ -278,8 +282,10 @@ def parse_config(filename): + configfile = filename + else: + config_candidates = [ +- "/config/dbc_feeder.ini", ++ "/etc/kuksa-dbc-feeder/config.ini", ++ "/etc/kuksa-dbc-feeder/dbc_feeder.ini", + "/etc/dbc_feeder.ini", ++ "/config/dbc_feeder.ini", + "config/dbc_feeder.ini", + ] + for candidate in config_candidates: +diff --git a/dbc2val/dbcfeederlib/dbcreader.py b/dbc2val/dbcfeederlib/dbcreader.py +index 5dad41f..c2f5b55 100644 +--- a/dbc2val/dbcfeederlib/dbcreader.py ++++ b/dbc2val/dbcfeederlib/dbcreader.py +@@ -56,8 +56,8 @@ class DBCReader: + Bitrate in bit/s. + """ + self.bus = can.interface.Bus(*args, **kwargs) # pylint: disable=abstract-class-instantiated +- rxThread = threading.Thread(target=self.rxWorker) +- rxThread.start() ++ self.rxThread = threading.Thread(target=self.rxWorker) ++ self.rxThread.start() - def terminationSignalreceived(signalNumber, frame): -@@ -77,6 +93,7 @@ def terminationSignalreceived(signalNumber, frame): - kuksa.stop() - reader.stop() - print("Received termination signal. Shutting down") -+ sys.exit(0) + def get_whitelist(self): + log.info("Collecting signals, generating CAN ID whitelist") +@@ -86,7 +86,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 + log.debug("processing message from CAN bus") + if msg and msg.arbitration_id in self.canidwl: + try: +@@ -113,3 +116,5 @@ class DBCReader: - signal.signal(signal.SIGINT, terminationSignalreceived) - signal.signal(signal.SIGQUIT, terminationSignalreceived) -@@ -88,7 +105,8 @@ while running: - for target in mapping[signal]['targets']: - tv=mapping.transform(signal,target,value) - if tv is not None: #none indicates the transform decided to not set the value -- print("Update VSS path {} to {} based on signal {}".format(target, tv, signal)) -+ if args.verbose: -+ print("Update VSS path {} to {} based on signal {}".format(target, tv, signal)) - resp=json.loads(kuksa.setValue(target, str(tv))) - if "error" in resp: - if "message" in resp["error"]: + def stop(self): + self.run = False ++ self.bus.shutdown() ++ self.rxThread.join() -- -2.35.1 +2.39.2