67 lines
1.8 KiB
Python
67 lines
1.8 KiB
Python
|
|
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!")
|