68 lines
2.6 KiB
Python
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 {}
|