from ScEpTIC.config.base_config import ScEpTICBaseConfig from ScEpTIC.emulator.energy.system_energy_model import SystemEnergyModel class EnergyAnalysisConfig(ScEpTICBaseConfig): """ Configuration for the energy analysis """ _config_domain = { 'system_model': {'class': SystemEnergyModel, 'mode': 'set'}, 'ignore_power_failures_during_state_save': {'class': bool, 'mode': 'set'}, 'calculate_cache_only': {'class': bool, 'mode': 'set'}, 'max_simulation_time': {'class': int, 'mode': 'set'}, } def __init__(self, main_config): super().__init__(main_config) self.system_model = None self.ignore_power_failures_during_state_save = False self.calculate_cache_only = False self.max_simulation_time = 0 self._register_config_callback("system_model", self._system_model_callback) def _system_model_callback(self, config_name, config_value): """ Callback to configure all the parameters given the system model (ensures consistency) :param config_name: the configuration name :param config_value: the configuration value """ if not self.system_model.mcu.has_nvm: self._main_config.memory.non_volatile.set_config("enabled", False) self._main_config.register_file.set_config("n_physical_registers", self.system_model.mcu.registers) self._main_config.memory.volatile.set_config("max_size", self.system_model.mcu.volatile_memory_size) self._main_config.memory.non_volatile.set_config("max_size", self.system_model.mcu.non_volatile_memory_size) # Returns the configuration def get_config(main_config): return EnergyAnalysisConfig(main_config)