1 from enigma import eDVBResourceManager,\
2 eDVBFrontendParametersSatellite, eDVBFrontendParameters
4 from Screens.Screen import Screen
5 from Screens.ScanSetup import ScanSetup
6 from Screens.MessageBox import MessageBox
7 from Plugins.Plugin import PluginDescriptor
9 from Components.Label import Label
10 from Components.Sources.FrontendStatus import FrontendStatus
11 from Components.ActionMap import ActionMap
12 from Components.NimManager import nimmanager, getConfigSatlist
13 from Components.MenuList import MenuList
14 from Components.config import ConfigSelection, getConfigListEntry
15 from Components.TuneTest import Tuner
18 class Satfinder(ScanSetup):
19 def openFrontend(self):
20 res_mgr = eDVBResourceManager.getInstance()
22 self.raw_channel = res_mgr.allocateRawChannel(self.feid)
24 self.frontend = self.raw_channel.getFrontend()
28 print "getFrontend failed"
30 print "getRawChannel failed"
32 print "getResourceManager instance failed"
35 def __init__(self, session, feid):
36 self.initcomplete = False
40 if not self.openFrontend():
41 self.oldref = session.nav.getCurrentlyPlayingServiceReference()
42 session.nav.stopService() # try to disable foreground service
43 if not self.openFrontend():
44 if session.pipshown: # try to disable pip
45 session.pipshown = False
47 if not self.openFrontend():
48 self.frontend = None # in normal case this should not happen
50 ScanSetup.__init__(self, session)
51 self.tuner = Tuner(self.frontend)
52 self["introduction"].setText("")
53 self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100)
54 self.initcomplete = True
55 self.onClose.append(self.__onClose)
58 self.session.nav.playService(self.oldref)
60 def createSetup(self):
61 self.typeOfTuningEntry = None
66 self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning_type)
67 self.list.append(self.typeOfTuningEntry)
68 self.satEntry = getConfigListEntry(_('Satellite'), self.tuning_sat)
69 self.list.append(self.satEntry)
71 nim = nimmanager.nim_slots[self.feid]
73 self.systemEntry = None
74 if self.tuning_type.value == "manual_transponder":
75 if nim.isCompatible("DVB-S2"):
76 self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
77 self.list.append(self.systemEntry)
79 # downgrade to dvb-s, in case a -s2 config was active
80 self.scan_sat.system.value = "dvb-s"
81 self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
82 self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
83 self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
84 self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
85 if self.scan_sat.system.value == "dvb-s":
86 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
87 elif self.scan_sat.system.value == "dvb-s2":
88 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
89 self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
90 self.list.append(self.modulationEntry)
91 self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
92 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
93 elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
94 self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
95 self["config"].list = self.list
96 self["config"].l.setList(self.list)
99 cur = self["config"].getCurrent()
100 if cur in (self.typeOfTuningEntry, self.systemEntry):
102 elif cur == self.satEntry:
106 def sat_changed(self, config_element):
108 self.retune(config_element)
110 def retune(self, configElement):
111 returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
112 satpos = int(self.tuning_sat.value)
113 if self.tuning_type.value == "manual_transponder":
114 if self.scan_sat.system.value == "dvb-s2":
115 fec = self.scan_sat.fec_s2.value
117 fec = self.scan_sat.fec.value
119 self.scan_sat.frequency.value,
120 self.scan_sat.symbolrate.value,
121 self.scan_sat.polarization.index,
133 self.scan_sat.inversion.index,
135 self.scan_sat.system.index,
136 self.scan_sat.modulation.index == 1 and 2 or 1,
137 self.scan_sat.rolloff.index,
138 self.scan_sat.pilot.index)
139 self.tune(returnvalue)
140 elif self.tuning_type.value == "predefined_transponder":
141 tps = nimmanager.getTransponders(satpos)
143 if l > self.tuning_transponder.index:
144 transponder = tps[self.tuning_transponder.index]
145 returnvalue = (transponder[1] / 1000, transponder[2] / 1000,
146 transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9])
147 self.tune(returnvalue)
149 def createConfig(self, foo):
150 self.tuning_transponder = None
151 self.tuning_type = ConfigSelection(choices = [("manual_transponder", _("Manual transponder")), ("predefined_transponder", _("Predefined transponder"))])
152 self.tuning_sat = getConfigSatlist(192, nimmanager.getSatListForNim(self.feid))
153 ScanSetup.createConfig(self, None)
157 for x in (self.tuning_type, self.tuning_sat, self.scan_sat.frequency,
158 self.scan_sat.inversion, self.scan_sat.symbolrate,
159 self.scan_sat.polarization, self.scan_sat.fec, self.scan_sat.pilot,
160 self.scan_sat.fec_s2, self.scan_sat.fec, self.scan_sat.modulation,
161 self.scan_sat.rolloff, self.scan_sat.system):
162 x.addNotifier(self.retune, initial_call = False)
164 def updateSats(self):
165 orb_pos = self.tuning_sat.orbital_position
166 if orb_pos is not None:
167 transponderlist = nimmanager.getTransponders(orb_pos)
170 for x in transponderlist:
205 e = str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec
209 self.tuning_transponder = ConfigSelection(choices = list, default = default)
210 self.tuning_transponder.addNotifier(self.retune, initial_call = False)
213 self.retune(self.tuning_type)
215 def restartPrevService(self, yesno):
226 self.session.openWithCallback(self.restartPrevService, MessageBox, _("Zap back to service before satfinder?"), MessageBox.TYPE_YESNO)
228 self.restartPrevService(False)
230 def tune(self, transponder):
231 if self.initcomplete:
232 if transponder is not None:
233 self.tuner.tune(transponder)
235 class SatNimSelection(Screen):
237 <screen position="140,165" size="400,130" title="select Slot">
238 <widget name="nimlist" position="20,10" size="360,100" />
241 def __init__(self, session):
242 Screen.__init__(self, session)
244 nimlist = nimmanager.getNimListOfType("DVB-S")
247 nimMenuList.append((nimmanager.nim_slots[x].friendly_full_description, x))
249 self["nimlist"] = MenuList(nimMenuList)
251 self["actions"] = ActionMap(["OkCancelActions"],
253 "ok": self.okbuttonClick ,
257 def okbuttonClick(self):
258 selection = self["nimlist"].getCurrent()[1]
259 self.session.open(Satfinder, selection)
261 def SatfinderMain(session, **kwargs):
262 nims = nimmanager.getNimListOfType("DVB-S")
266 if not nimmanager.getNimConfig(x).configMode.value in ("loopthrough", "satposdepends", "nothing"):
269 if len(nimList) == 0:
270 session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
272 if session.nav.RecordTimer.isRecording():
273 session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to start the satfinder."), MessageBox.TYPE_ERROR)
275 if len(nimList) == 1:
276 session.open(Satfinder, nimList[0])
278 session.open(SatNimSelection)
280 def SatfinderStart(menuid, **kwargs):
282 return [(_("Satfinder"), SatfinderMain, "satfinder", None)]
286 def Plugins(**kwargs):
287 if (nimmanager.hasNimType("DVB-S")):
288 return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, fnc=SatfinderStart)