diff options
Diffstat (limited to 'timer.py')
| -rw-r--r-- | timer.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/timer.py b/timer.py new file mode 100644 index 00000000..294102b7 --- /dev/null +++ b/timer.py @@ -0,0 +1,94 @@ +import bisect +from time import * +from enigma import * + +class TimerEntry: + EventPrepare = 0 + EventStart = 1 + EventEnd = 2 + EventAbort = 3 + + StateWait = 0 + StatePrepare = 1 + StateRunning = 2 + StateEnded = 3 + + def __init__(self, begin, end): + self.Begin = begin + self.Prepare = 10 + self.End = end + self.State = 0 + + def getTime(self): + if self.State == 0: + return self.Begin - self.Prepare + elif self.State == 1: + return self.Begin + else: + return self.End + + def __lt__(self, o): + return self.getTime() < o.getTime() + + def activate(self, event): + print "timer %s got activated (%d)!" % (self.Description, event) + +class Timer: + + MaxWaitTime = 100 + + def __init__(self): + self.TimerList = [ ] + self.ProcessedTimers = [ ] + + self.Timer = eTimer() + self.Timer.timeout.get().append(self.calcNextActivation) + + self.calcNextActivation() + + def addTimerEntry(self, entry): + bisect.insort(self.TimerList, entry) + self.calcNextActivation() + + def setNextActivation(self, when): + delay = int((when - time()) * 1000) + print "next activation: %d (in %d seconds)" % (when, delay) + + self.Timer.start(delay, 1) + self.next = when + + def calcNextActivation(self): + self.processActivation() + + min = int(time()) + self.MaxWaitTime + + # calculate next activation point + if len(self.TimerList): + w = self.TimerList[0].getTime() + if w < min: + min = w + + self.setNextActivation(min) + + def doActivate(self, w): + w.activate(w.State) + self.TimerList.remove(w) + w.State += 1 + if w.State < TimerEntry.StateEnded: + bisect.insort(self.TimerList, w) + else: + bisect.insort(self.ProcessedTimers, w) + + def processActivation(self): + t = int(time()) + 1 + + # we keep on processing the first entry until it goes into the future. + while len(self.TimerList) and self.TimerList[0].getTime() < t: + self.doActivate(self.TimerList[0]) + +#t = Timer() +#base = time() + 5 +#t.addTimerEntry(TimerEntry(base+10, base+20, None, None, "test #1: 10 - 20")) +#t.addTimerEntry(TimerEntry(base+10, base+30, None, None, "test #2: 10 - 30")) +#t.addTimerEntry(TimerEntry(base+15, base+20, None, None, "test #3: 15 - 20")) +#t.addTimerEntry(TimerEntry(base+20, base+35, None, None, "test #4: 20 - 35")) |
