from .timer import Timer class TimersManager: """ Timers manager For now, ScEpTIC supports timers under energy emulation mode and does not account for power off periods """ def __init__(self, vmstate): Timer._vmstate = vmstate self._vmstate = vmstate self.timers = {} def check_timers(self): """ Check timers expiration """ for timer in self.timers.values(): timer.check() def create_timer(self, name, interrupt_signal, period=0, periodic=False): """ Creates a new timer :param name: name of the timer :param interrupt_signal: interrupt signal to trigger when timer expires :param period: period of the timer in seconds :param periodic: whether the timer is periodic """ if name in self.timers.keys(): raise Exception(f"Timer named \"{name}\" already exists!") self.timers[name] = Timer(name, interrupt_signal, period, periodic) def start_timer(self, name): """ Starts a given timer :param name: name of the timer """ self._get_timer(name).start() def stop_timer(self, name): """ Stops a given timer :param name: name of the timer """ self._get_timer(name).stop() def set_timer_period(self, name, period): """ Sets the period of a given timer :param name: name of the time :param period: period of the timer in seconds """ self._get_timer(name).set_period(period) def _get_timer(self, name): """ Returns a timer :param name: name of the time """ try: return self.timers[name] except KeyError: raise Exception(f"Timer named \"{name}\" does not exist!")