aboutsummaryrefslogtreecommitdiff
path: root/timer.py
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-05-04 15:56:32 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-05-04 15:56:32 +0000
commitf0273520285e28b22053eda706690774b0c8448c (patch)
tree6897dccfdd89f51ec55ed43b8da0fc1abcc3545f /timer.py
parent7a6b5e730bb33b3ea9a1c693ee434e99d389f583 (diff)
downloadenigma2-f0273520285e28b22053eda706690774b0c8448c.tar.gz
enigma2-f0273520285e28b22053eda706690774b0c8448c.zip
- add timer, RecordTimer
- use timer for instantReport
Diffstat (limited to 'timer.py')
-rw-r--r--timer.py94
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"))