olindgre 2ece01e1d7 Make powertrain-build not overlap with pybuild in site-packages
Change-Id: I7b59f3f04f0f787d35db0b9389f295bf1ad24f56
2024-09-17 10:25:04 +02:00

68 lines
2.6 KiB
Python

# Copyright 2024 Volvo Car Corporation
# Licensed under Apache 2.0.
"""Module for extraction Energy Management System"""
import os
from powertrain_build.interface.base import BaseApplication, Signal
from powertrain_build.lib import logger
from powertrain_build.signal_interfaces import CsvSignalInterfaces
from powertrain_build.build_proj_config import BuildProjConfig
LOGGER = logger.create_logger(__file__)
class CsvEMS(BaseApplication, CsvSignalInterfaces):
"""Supplier part of the ECM"""
def __init__(self):
self._signals = {}
self.interfaces = {}
self._insignals = None
self._outsignals = None
self.projects = {}
def parse_definition(self, definition):
"""Read the interface files.
Args:
definition (Path): Path to ProjectCfg.json
"""
self.build_cfg = BuildProjConfig(os.path.normpath(str(definition)))
CsvSignalInterfaces.__init__(self, self.build_cfg, [])
self.projects[self.build_cfg.name] = self.build_cfg
self.config_path = self.build_cfg.get_if_cfg_dir()
self.name = self.build_cfg.name # Set name for CsvSignalInterfaces
self._parse_io_cnfg(self.config_path)
self.name = 'Supplier_' + self.build_cfg.name # set name for BaseApplication
def _get_signals(self):
"""Look through interfaces and create Signal objects"""
self._insignals = set()
self._outsignals = set()
for interface_name, data in self.interfaces.items():
for signal_name, signal_data in data.items():
if signal_data['IOType'] == '-':
# Signal is inactive
continue
if signal_name in self._signals:
signal = self._signals[signal_name]
else:
signal = Signal(signal_name, self)
self._signals.update({signal_name: signal})
if 'output' in interface_name.lower():
# outport from ECM. Inport in EMS (from SPM)
self._insignals.add(signal_name)
signal.consumers = interface_name
else:
signal.producers = interface_name
self._outsignals.add(signal_name)
def get_signal_properties(self, signal):
"""Find properties for a signal from interface files"""
for interface_name, interface_data in self.interfaces.items():
if signal.name in interface_data.keys():
properties = interface_data[signal.name]
properties['interface'] = interface_name
return properties
return {}