1 from enigma import eDVBFrontendParametersSatellite, eDVBFrontendParameters, eDVBResourceManager, eTimer
4 def __init__(self, frontend):
5 self.frontend = frontend
7 # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, system, modulation)
9 def tune(self, transponder):
11 print "tuning to transponder with data", transponder
12 parm = eDVBFrontendParametersSatellite()
13 parm.frequency = transponder[0] * 1000
14 parm.symbol_rate = transponder[1] * 1000
15 parm.polarisation = transponder[2]
16 parm.fec = transponder[3]
17 parm.inversion = transponder[4]
18 parm.orbital_position = transponder[5]
19 parm.system = 0 # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2)
20 parm.modulation = 1 # FIXMEE !! HARDCODED QPSK
21 feparm = eDVBFrontendParameters()
23 self.lastparm = feparm
24 self.frontend.tune(feparm)
28 self.frontend.tune(self.lastparm)
30 # tunes a list of transponders and checks, if they lock and optionally checks the onid/tsid combination
31 # 1) add transponders with addTransponder()
32 # 2) call run(<checkPIDs = True>)
33 # 3) finishedChecking() is called, when the run is finished
35 def __init__(self, feid, stopOnSuccess = False, stopOnError = False):
36 self.stopOnSuccess = stopOnSuccess
37 self.stopOnError = stopOnError
39 self.transponderlist = []
41 print "TuneTest for feid %d" % self.feid
42 if not self.openFrontend():
43 self.oldref = self.session.nav.getCurrentlyPlayingServiceReference()
44 self.session.nav.stopService() # try to disable foreground service
45 if not self.openFrontend():
46 if self.session.pipshown: # try to disable pip
47 self.session.pipshown = False
49 if not self.openFrontend():
50 self.frontend = None # in normal case this should not happen
51 self.tuner = Tuner(self.frontend)
53 self.timer.callback.append(self.updateStatus)
55 def updateStatus(self):
57 self.frontend.getFrontendStatus(dict)
62 if dict["tuner_state"] == "TUNING":
63 self.timer.start(100, True)
64 self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_TUNING, self.currTuned))
65 elif self.checkPIDs and self.pidStatus == self.INTERNAL_PID_STATUS_NOOP:
66 if dict["tuner_state"] == "LOCKED":
67 print "acquiring TSID/ONID"
68 # TODO start getting TSID/ONID
69 self.pidStatus = self.INTERNAL_PID_STATUS_WAITING
71 self.pidStatus = self.INTERNAL_PID_STATUS_FAILED
72 elif self.checkPIDs and self.pidStatus == self.INTERNAL_PID_STATUS_WAITING:
73 print "waiting for pids"
75 if dict["tuner_state"] == "LOSTLOCK" or dict["tuner_state"] == "FAILED":
76 self.tuningtransponder = self.nextTransponder()
77 self.failedTune.append([self.currTuned, self.oldTuned, "tune_failed"])
78 if self.stopOnError == True:
80 elif dict["tuner_state"] == "LOCKED":
83 tsid = 0 # TODO read values
84 onid = 0 # TODO read values
85 if tsid != self.currTuned[8] or onid != self.currTuned[9]:
86 self.failedTune.append([self.currTuned, self.oldTuned, "pids_failed"])
88 elif not self.checkPIDs or (self.checkPids and not pidsFailed):
89 self.successfullyTune.append([self.currTuned, self.oldTuned])
90 if self.stopOnSuccess == True:
92 self.tuningtransponder = self.nextTransponder()
94 print "************* tuner_state:", dict["tuner_state"]
96 self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_NOOP, self.currTuned))
100 if self.tuningtransponder < len(self.transponderlist) and not stop:
101 self.timer.start(100, True)
102 print "restart timer"
104 self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_DONE, self.currTuned))
105 print "finishedChecking"
106 self.finishedChecking()
108 def firstTransponder(self):
109 print "firstTransponder:"
112 print "checkPIDs-loop"
113 # check for tsid != -1 and onid != -1
114 print "index:", index
115 print "len(self.transponderlist):", len(self.transponderlist)
116 while (index < len(self.transponderlist) and (self.transponderlist[index][8] == -1 or self.transponderlist[index][9] == -1)):
118 print "FirstTransponder final index:", index
121 def nextTransponder(self):
122 index = self.tuningtransponder + 1
124 # check for tsid != -1 and onid != -1
125 while (index < len(self.transponderlist) and self.transponderlist[index][8] != -1 and self.transponderlist[index][9] != -1):
130 def finishedChecking(self):
131 print "finished testing"
132 print "successfull:", self.successfullyTune
133 print "failed:", self.failedTune
135 def openFrontend(self):
136 res_mgr = eDVBResourceManager.getInstance()
138 self.raw_channel = res_mgr.allocateRawChannel(self.feid)
140 self.frontend = self.raw_channel.getFrontend()
144 print "getFrontend failed"
146 print "getRawChannel failed"
148 print "getResourceManager instance failed"
152 print "tuning to", self.tuningtransponder
153 if self.tuningtransponder < len(self.transponderlist):
154 self.pidStatus = self.INTERNAL_PID_STATUS_NOOP
155 self.oldTuned = self.currTuned
156 self.currTuned = self.transponderlist[self.tuningtransponder]
157 self.tuner.tune(self.transponderlist[self.tuningtransponder])
159 INTERNAL_PID_STATUS_NOOP = 0
160 INTERNAL_PID_STATUS_WAITING = 1
161 INTERNAL_PID_STATUS_SUCCESSFUL = 2
162 INTERNAL_PID_STATUS_FAILED = 3
164 def run(self, checkPIDs = False):
165 self.checkPIDs = checkPIDs
166 self.pidStatus = self.INTERNAL_PID_STATUS_NOOP
168 self.successfullyTune = []
169 self.tuningtransponder = self.firstTransponder()
171 self.progressCallback((len(self.transponderlist), self.tuningtransponder, self.STATUS_START, self.currTuned))
172 self.timer.start(100, True)
174 # transponder = (frequency, symbolrate, polarisation, fec, inversion, orbpos, <system>, <modulation>, <tsid>, <onid>)
175 # 0 1 2 3 4 5 6 7 8 9
176 def addTransponder(self, transponder):
177 self.transponderlist.append(transponder)
179 def clearTransponder(self):
180 self.transponderlist = []
187 # progress = (range, value, status, transponder)
188 def progressCallback(self, progress):