diff options
Diffstat (limited to 'recipes-connectivity/kuksa-val')
12 files changed, 341 insertions, 2 deletions
diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel.bb b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel.bb new file mode 100644 index 000000000..4afcfaf10 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel.bb @@ -0,0 +1,25 @@ +SUMMARY = "KUKSA.val DBC feeder configuration for gateway demo" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +SRC_URI = "file://kuksa-dbc-feeder.gw-control-panel" + +S = "${WORKDIR}" + +inherit update-alternatives + +do_compile[noexec] = "1" + +do_install() { + install -d ${D}${sysconfdir}/default + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.gw-control-panel ${D}${sysconfdir}/default/ +} + +ALTERNATIVE_LINK_NAME[kuksa-dbc-feeder.env] = "${sysconfdir}/default/kuksa-dbc-feeder" + +RPROVIDES:${PN} = "kuksa-dbc-feeder.env" +ALTERNATIVE:${PN} = "kuksa-dbc-feeder.env" +ALTERNATIVE_TARGET_${PN} = "${sysconfdir}/default/kuksa-dbc-feeder.gw-control-panel" + +RDEPENDS:${PN} += "kuksa-dbc-feeder" diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel/kuksa-dbc-feeder.gw-control-panel b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel/kuksa-dbc-feeder.gw-control-panel new file mode 100644 index 000000000..d6d2e6073 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-control-panel/kuksa-dbc-feeder.gw-control-panel @@ -0,0 +1,4 @@ +# Leave DBC output disabled until cruise support is added to the +# control panel simulator +EXTRA_ARGS="--no-val2dbc --dbc2val --dbc-default /etc/kuksa-dbc-feeder/dbc_default_values.json" +#LOG_LEVEL=debug diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware.bb b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware.bb new file mode 100644 index 000000000..513a3f6ef --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware.bb @@ -0,0 +1,32 @@ +SUMMARY = "KUKSA.val DBC feeder configuration for gateway demo (secondary CAN interface)" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +SRC_URI = "file://kuksa-dbc-feeder.gw-hardware \ + file://config.ini.gw-hardware \ + file://kuksa-dbc-feeder-can1.service \ +" + +S = "${WORKDIR}" + +inherit systemd update-alternatives + +SYSTEMD_SERVICE:${PN} = "kuksa-dbc-feeder-can1.service" + +do_compile[noexec] = "1" + +do_install() { + install -d ${D}${sysconfdir}/default + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.gw-hardware ${D}${sysconfdir}/default/ + install -d ${D}${sysconfdir}/kuksa-dbc-feeder + install -m 0644 ${WORKDIR}/config.ini.gw-hardware ${D}${sysconfdir}/kuksa-dbc-feeder/ + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder-can1.service ${D}${systemd_system_unitdir} + fi +} + +FILES:${PN} += "${systemd_system_unitdir}" + +RDEPENDS:${PN} += "kuksa-dbc-feeder vss-agl-gw-hardware" diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/config.ini.gw-hardware b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/config.ini.gw-hardware new file mode 100644 index 000000000..ee3541a5f --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/config.ini.gw-hardware @@ -0,0 +1,30 @@ +[general] +# server type: +# switch between kuksa_databroker and kuksa_val_server +server_type = kuksa_databroker +# VSS mapping file +mapping = /usr/share/vss/vss_rel_4.0-agl-gw-hardware.json + +# IP address for server (KUKSA.val Server or Databroker) +ip = localhost + +# Port for server (KUKSA.val Server or Databroker) +port = 55555 + +# Shall TLS be used (default False for Databroker, True for KUKSA.val Server) +tls = True + +# TLS-related settings +# Path to root CA, needed if using TLS +root_ca_path=/etc/kuksa-val/CA.pem + +# Token file for authorization. +token = /etc/kuksa-dbc-feeder/dbc_feeder.token + +[can] +# CAN port +port = can1 +# Enable SAE-J1939 Mode. False: ignore +j1939 = False +# DBC file used to parse CAN messages +dbcfile = /etc/kuksa-dbc-feeder/agl-vcar.dbc diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder-can1.service b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder-can1.service new file mode 100644 index 000000000..6f123dd57 --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder-can1.service @@ -0,0 +1,12 @@ +[Unit] +Description=Eclipse KUKSA.val DBC feeder (can1) +Requires=kuksa-databroker.service can-dev-helper.service +After=kuksa-databroker.service can-dev-helper.service + +[Service] +EnvironmentFile=-/etc/default/kuksa-dbc-feeder.gw-hardware +ExecStart=/usr/bin/dbcfeeder.py $EXTRA_ARGS +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder.gw-hardware b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder.gw-hardware new file mode 100644 index 000000000..562a56b8b --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder-conf-gw-hardware/kuksa-dbc-feeder.gw-hardware @@ -0,0 +1,3 @@ +# DBC input for steering wheel, output for HVAC +EXTRA_ARGS="--val2dbc --dbc2val --dbc-default /etc/kuksa-dbc-feeder/dbc_default_values.json --config /etc/kuksa-dbc-feeder/config.ini.gw-hardware" +#LOG_LEVEL=debug diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0004-Enable-val2dbc-for-sensor-values.patch b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0004-Enable-val2dbc-for-sensor-values.patch new file mode 100644 index 000000000..7f22a90ad --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/0004-Enable-val2dbc-for-sensor-values.patch @@ -0,0 +1,142 @@ +From d6f1aaa7f26aa52f4b219f60e704d5ab2954f082 Mon Sep 17 00:00:00 2001 +From: Scott Murray <scott.murray@konsulko.com> +Date: Wed, 3 Apr 2024 02:09:11 +0900 +Subject: [PATCH] Enable val2dbc for sensor values + +Rework to allow val2dbc mode to write out sensor values in +addition to actuator target values. + +Upstream-Status: pending + +Signed-off-by: Scott Murray <scott.murray@konsulko.com> +--- + dbc2val/dbcfeeder.py | 8 ++++++-- + .../dbcfeederlib/databrokerclientwrapper.py | 18 ++++++++++++------ + dbc2val/dbcfeederlib/dbc2vssmapper.py | 14 +++++++++----- + dbc2val/dbcfeederlib/serverclientwrapper.py | 2 +- + 4 files changed, 28 insertions(+), 14 deletions(-) + +diff --git a/dbc2val/dbcfeeder.py b/dbc2val/dbcfeeder.py +index e7fd319..5e0df2f 100755 +--- a/dbc2val/dbcfeeder.py ++++ b/dbc2val/dbcfeeder.py +@@ -322,15 +322,19 @@ class Feeder: + log.debug("vss-Update callback!") + dbc_ids = set() + for update in updates: ++ value = None + if update.entry.value is not None: +- # This shall currently never happen as we do not subscribe to this + log.warning(f"Current value for {update.entry.path} is now: " + f"{update.entry.value.value} of type {type(update.entry.value.value)}") ++ value = update.entry.value.value + + if update.entry.actuator_target is not None: + log.debug(f"Target value for {update.entry.path} is now: {update.entry.actuator_target} " + f"of type {type(update.entry.actuator_target.value)}") +- new_dbc_ids = self._mapper.handle_update(update.entry.path, update.entry.actuator_target.value) ++ value = update.entry.actuator_target.value ++ ++ if value != None: ++ new_dbc_ids = self._mapper.handle_update(update.entry.path, value) + dbc_ids.update(new_dbc_ids) + + can_ids = set() +diff --git a/dbc2val/dbcfeederlib/databrokerclientwrapper.py b/dbc2val/dbcfeederlib/databrokerclientwrapper.py +index 35836e9..46ae330 100644 +--- a/dbc2val/dbcfeederlib/databrokerclientwrapper.py ++++ b/dbc2val/dbcfeederlib/databrokerclientwrapper.py +@@ -200,14 +200,20 @@ class DatabrokerClientWrapper(clientwrapper.ClientWrapper): + def supports_subscription(self) -> bool: + return True + +- async def subscribe(self, vss_names: List[str], callback): ++ async def subscribe(self, vss_entries: dict[str, str], callback): + """Creates a subscription and calls the callback when data received""" + entries = [] +- for name in vss_names: +- # Always subscribe to target +- subscribe_entry = SubscribeEntry(name, View.FIELDS, [Field.ACTUATOR_TARGET]) +- log.info(f"Subscribe entry: {subscribe_entry}") +- entries.append(subscribe_entry) ++ for name, signal_type in vss_entries.items(): ++ if signal_type == "actuator": ++ subscribe_entry = SubscribeEntry(name, View.FIELDS, [Field.ACTUATOR_TARGET]) ++ log.info(f"Subscribe entry: {subscribe_entry}") ++ entries.append(subscribe_entry) ++ if signal_type == "sensor": ++ subscribe_entry = SubscribeEntry(name, View.FIELDS, [Field.VALUE]) ++ log.info(f"Subscribe entry: {subscribe_entry}") ++ entries.append(subscribe_entry) ++ if not entries: ++ return + + # If there is a path VSSClient will request a secure connection + if self._tls and self._root_ca_path: +diff --git a/dbc2val/dbcfeederlib/dbc2vssmapper.py b/dbc2val/dbcfeederlib/dbc2vssmapper.py +index 5142a5e..8f04cdd 100644 +--- a/dbc2val/dbcfeederlib/dbc2vssmapper.py ++++ b/dbc2val/dbcfeederlib/dbc2vssmapper.py +@@ -61,12 +61,13 @@ class VSSMapping: + parser: Parser = Parser() + + def __init__(self, vss_name: str, dbc_name: str, transform: dict, interval_ms: int, +- on_change: bool, datatype: str, description: str): ++ on_change: bool, signal_type: str, datatype: str, description: str): + self.vss_name = vss_name + self.dbc_name = dbc_name + self.transform = transform + self.interval_ms = interval_ms + self.on_change = on_change ++ self.signal_type = signal_type + self.datatype = datatype + self.description = description + # For time comparison (interval_ms) we store last value used for comparison. Unit seconds. +@@ -282,7 +283,7 @@ class Mapper: + log.info(f"Using default interval 1000 ms for {expanded_name}") + interval = 1000 + mapping_entry = VSSMapping(expanded_name, dbc_name, transform, interval, on_change, +- node["datatype"], node["description"]) ++ node["type"], node["datatype"], node["description"]) + if dbc_name not in self.dbc2val_mapping: + self.dbc2val_mapping[dbc_name] = [] + self.dbc2val_mapping[dbc_name].append(mapping_entry) +@@ -306,7 +307,7 @@ class Mapper: + log.warning(f"interval_ms attribute ignored for {expanded_name}") + + mapping_entry = VSSMapping(expanded_name, dbc_name, transform, interval, on_change, +- node["datatype"], node["description"]) ++ node["type"], node["datatype"], node["description"]) + if dbc_name not in self.val2dbc_mapping: + self.val2dbc_mapping[expanded_name] = [] + self.val2dbc_mapping[expanded_name].append(mapping_entry) +@@ -380,9 +381,12 @@ class Mapper: + """Return a set of all dbc names used for reception""" + return self.dbc2val_mapping.keys() + +- def get_val2dbc_entries(self) -> KeysView: ++ def get_val2dbc_entries(self) -> Dict[str, str]: + """Return a set of all vss names used for reception""" +- return self.val2dbc_mapping.keys() ++ entries: Dict[str, str] = {} ++ for name, mappings in self.val2dbc_mapping.items(): ++ entries[name] = mappings[0].signal_type ++ return entries + + def get_vss_names(self) -> Set[str]: + """Get all VSS names used in mappings, both vss2dbc and dbc2vss""" +diff --git a/dbc2val/dbcfeederlib/serverclientwrapper.py b/dbc2val/dbcfeederlib/serverclientwrapper.py +index 63bc12e..ca11daf 100644 +--- a/dbc2val/dbcfeederlib/serverclientwrapper.py ++++ b/dbc2val/dbcfeederlib/serverclientwrapper.py +@@ -125,6 +125,6 @@ class ServerClientWrapper(clientwrapper.ClientWrapper): + log.info("Feature not implemented") + return False + +- async def subscribe(self, vss_names: List[str], callback): ++ async def subscribe(self, vss_entries: dict[str, str], callback): + log.error("Feature not implemented") + return +-- +2.34.1 + diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc index 0d0121398..e638d1287 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/agl-vcar.dbc @@ -10,6 +10,44 @@ BO_ 985 Vehicle_Status_2: 8 Vector_XXX SG_ PT_EngineSpeed : 23|16@0+ (0.25,0) [0|0] "" Vector_XXX SG_ PT_FuelLevelLow : 55|1@1+ (1,0) [0|1] "" Vector_XXX +BO_ 986 Vehicle_Status_3: 8 Vector_XXX + SG_ PT_HazardOn : 0|1@1+ (1,0) [0|1] "" Vector_XXX + SG_ PT_LeftTurnOn : 1|1@1+ (1,0) [0|1] "" Vector_XXX + SG_ PT_RightTurnOn : 2|1@1+ (1,0) [0|1] "" Vector_XXX + +BO_ 48 HVAC_Control_1: 8 Vector_XXX + SG_ PT_TempLeft : 7|8@0+ (0.4166666667,0) [0|100] "C" Vector_XXX + SG_ PT_TempRight : 15|8@0+ (0.4166666667,0) [0|100] "C" Vector_XXX + SG_ PT_FanSpeed : 39|8@0+ (0.392157,0) [0|100] "%" Vector_XXX + +BO_ 401 Engine: 8 Vector__XXX + SG_ ThrottlePosition : 63|8@0+ (0.392157,0) [0|100.000035] "%" Vector__XXX + +BO_ 381 ABS: 8 Vector__XXX + SG_ VehicleSpeed : 7|12@0+ (0.0625,0) [0|255.9375] "km / h" ECM_HS,BCM_HS + SG_ SteeringPosition : 23|12@0+ (0.0439453125,-90) [-90|89.9560546875] "deg" ECM_HS,BCM_HS + SG_ BrakePressure : 39|8@0+ (75,0) [0|19125] "kPa" ECM_HS,BCM_HS + +BO_ 532 Transmission: 8 Vector__XXX + SG_ Gear : 7|8@0+ (1,-1) [-1|127] "" ECM_HS,BCM_HS + +BO_ 533 Airbag: 8 Vector__XXX + SG_ CollisionIntensity : 7|12@0+ (24.4140625,0) [0|100000] "N" ECM_HS,BCM_HS + +BO_ 534 IMU1: 8 Vector__XXX + SG_ AccelerationX : 7|12@0+ (0.48828125,-1000) [-1000|1000] "m/s^2" ECM_HS,BCM_HS + SG_ AccelerationY : 23|12@0+ (0.48828125,-1000) [-1000|1000] "m/s^2" ECM_HS,BCM_HS + SG_ AccelerationZ : 39|12@0+ (0.48828125,-1000) [-1000|1000] "m/s^2" ECM_HS,BCM_HS + +BO_ 535 IMU2: 8 Vector__XXX + SG_ GyroscopeX : 7|12@0+ (0.48828125,-1000) [-1000|1000] "rad/s" ECM_HS,BCM_HS + SG_ GyroscopeY : 23|12@0+ (0.48828125,-1000) [-1000|1000] "rad/s" ECM_HS,BCM_HS + SG_ GyroscopeZ : 39|12@0+ (0.48828125,-1000) [-1000|1000] "rad/s" ECM_HS,BCM_HS + +BO_ 536 GNSS: 8 Vector__XXX + SG_ Latitude : 7|32@0+ (0.0000000419095158577,-90) [-90|90] "deg" ECM_HS,BCM_HS + SG_ Longitude : 39|32@0+ (0.00000008381903171539,-180) [-180|180] "deg" ECM_HS,BCM_HS + BO_ 33 Steering_Wheel: 8 Vector_XXX SG_ SW_Previous : 39|1@1+ (1,0) [0|1] "" Vector_XXX SG_ SW_VolumeUp : 38|1@1+ (1,0) [0|1] "" Vector_XXX diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/dbc_default_values.json b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/dbc_default_values.json new file mode 100644 index 000000000..0562569db --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/dbc_default_values.json @@ -0,0 +1,40 @@ +{ + "PT_VehicleAvgSpeed" : 0, + "PT_FuelLevelPct" : 0, + "PT_EngineSpeed" : 0, + "PT_FuelLevelLow" : 0, + "PT_TempLeft" : 0, + "PT_TempRight" : 0, + "PT_FanSpeed" : 0, + "ThrottlePosition" : 0, + "VehicleSpeed" : 0, + "SteeringPosition" : 0, + "BrakePressure" : 0, + "Gear" : 0, + "AccelerationX" : 0, + "AccelerationY" : 0, + "AccelerationZ" : 0, + "GyroscopeX" : 0, + "GyroscopeY" : 0, + "GyroscopeZ" : 0, + "Latitude" : 0, + "Longitude" : 0, + "SW_Previous" : 0, + "SW_VolumeUp" : 0, + "SW_Mode" : 0, + "SW_VolumeDown" : 0, + "SW_Next" : 0, + "SW_Info" : 0, + "SW_VolumeMute" : 0, + "SW_Voice" : 0, + "SW_PhoneHangup" : 0, + "SW_PhoneCall" : 0, + "SW_CruiseEnable" : 0, + "SW_CruiseResume" : 0, + "SW_CruiseSet" : 0, + "SW_CruiseCancel" : 0, + "SW_CruiseLimit" : 0, + "SW_CruiseDistance" : 0, + "SW_Horn" : 0, + "SW_LaneDepartureWarning" : 0 +} diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.default b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.default new file mode 100644 index 000000000..5d787158d --- /dev/null +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.default @@ -0,0 +1,3 @@ +# For output only mode: +#EXTRA_ARGS="--val2dbc --no-dbc2val --dbc-default /etc/kuksa-dbc-feeder/dbc_default_values.json" +#LOG_LEVEL=debug diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service index a30018c6f..857f5c7d2 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder/kuksa-dbc-feeder.service @@ -4,7 +4,8 @@ Requires=kuksa-databroker.service can-dev-helper.service After=kuksa-databroker.service can-dev-helper.service [Service] -ExecStart=/usr/bin/dbcfeeder.py +EnvironmentFile=-/etc/default/kuksa-dbc-feeder +ExecStart=/usr/bin/dbcfeeder.py $EXTRA_ARGS Restart=on-failure [Install] diff --git a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb index 809152bb0..281f10ac3 100644 --- a/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb +++ b/recipes-connectivity/kuksa-val/kuksa-dbc-feeder_git.bb @@ -13,16 +13,19 @@ SRC_URI = "git://github.com/eclipse/kuksa.val.feeders.git;protocol=https;branch= file://0001-dbc2val-add-installation-mechanism.patch \ file://0002-dbc2val-usability-improvements.patch \ file://0003-dbc2val-fix-token-file-configuration-option.patch \ + file://0004-Enable-val2dbc-for-sensor-values.patch \ file://config.ini \ file://dbc_feeder.token \ file://agl-vcar.dbc \ + file://dbc_default_values.json \ file://kuksa-dbc-feeder.service \ + file://kuksa-dbc-feeder.default \ " SRCREV = "5bb52eca8d79f7c05a024f69b1faab81dabacdcd" S = "${WORKDIR}/git" -inherit setuptools3 systemd +inherit setuptools3 systemd update-alternatives SETUPTOOLS_SETUP_PATH = "${S}/dbc2val" @@ -36,12 +39,18 @@ do_install:append() { # investigation. install -m 0600 ${WORKDIR}/dbc_feeder.token ${D}${sysconfdir}/kuksa-dbc-feeder/ install -m 0644 ${WORKDIR}/agl-vcar.dbc ${D}${sysconfdir}/kuksa-dbc-feeder/ + install -m 0644 ${WORKDIR}/dbc_default_values.json ${D}${sysconfdir}/kuksa-dbc-feeder/ + install -d ${D}${sysconfdir}/default + install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.default ${D}${sysconfdir}/default/ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then install -d ${D}${systemd_system_unitdir} install -m 0644 ${WORKDIR}/kuksa-dbc-feeder.service ${D}${systemd_system_unitdir} fi } +ALTERNATIVE_LINK_NAME[kuksa-dbc-feeder.env] = "${sysconfdir}/default/kuksa-dbc-feeder" + +ALTERNATIVE_TARGET_${PN} = "${sysconfdir}/default/kuksa-dbc-feeder.default" FILES:${PN} += "${systemd_system_unitdir}" RDEPENDS:${PN} += " \ |