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
17 class Satfinder(ScanSetup):
18 def openFrontend(self):
19 res_mgr = eDVBResourceManager.getInstance()
21 self.raw_channel = res_mgr.allocateRawChannel(self.feid)
23 self.frontend = self.raw_channel.getFrontend()
27 print "getFrontend failed"
29 print "getRawChannel failed"
31 print "getResourceManager instance failed"
34 def __init__(self, session, feid):
35 self.initcomplete = False
39 if not self.openFrontend():
40 self.oldref = session.nav.getCurrentlyPlayingServiceReference()
41 session.nav.stopService() # try to disable foreground service
42 if not self.openFrontend():
43 if session.pipshown: # try to disable pip
44 session.pipshown = False
46 if not self.openFrontend():
47 self.frontend = None # in normal case this should not happen
49 ScanSetup.__init__(self, session)
50 self.tuner = Tuner(self.frontend)
51 self["introduction"].setText("")
52 self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100)
53 self.initcomplete = True
54 self.onClose.append(self.__onClose)
57 self.session.nav.playService(self.oldref)
59 def createSetup(self):
60 self.modulationEntry = None
61 self.typeOfTuningEntry = None
63 self.systemEntry = None
64 self.is_id_boolEntry = None
65 self.plsModeEntry = None
67 self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning_type)
68 self.list.append(self.typeOfTuningEntry)
69 self.satEntry = getConfigListEntry(_('Satellite'), self.tuning_sat)
70 self.list.append(self.satEntry)
72 nim = nimmanager.nim_slots[self.feid]
73 if self.tuning_type.value == "manual_transponder":
74 scan_sat_system_value = self.scan_sat.system.value
75 if nim.isCompatible("DVB-S2X"):
76 scan_sat_system_value = self.scan_sat.system_dvbs2x.value
77 self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system_dvbs2x)
78 self.list.append(self.systemEntry)
79 elif nim.isCompatible("DVB-S2"):
80 self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
81 self.list.append(self.systemEntry)
83 # downgrade to dvb-s, in case a -s2 config was active
84 self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
85 self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
86 self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
87 self.list.append(getConfigListEntry(_('Symbol rate'), self.scan_sat.symbolrate))
88 self.list.append(getConfigListEntry(_('Polarization'), self.scan_sat.polarization))
89 if scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S:
90 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
91 elif scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2:
92 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
93 self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
94 self.list.append(self.modulationEntry)
95 self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
96 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
97 elif scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2X:
98 if self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_QPSK:
99 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_qpsk))
100 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8PSK:
101 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8psk))
102 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8APSK:
103 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8apsk))
104 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_16APSK:
105 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_16apsk))
106 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_32APSK:
107 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_32apsk))
108 self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation_dvbs2x)
109 self.list.append(self.modulationEntry)
110 self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
111 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
112 if scan_sat_system_value in (eDVBFrontendParametersSatellite.System_DVB_S2, eDVBFrontendParametersSatellite.System_DVB_S2X):
113 if nim.isMultistream():
114 self.is_id_boolEntry = getConfigListEntry(_('Transport Stream Type'), self.scan_sat.is_id_bool)
115 self.list.append(self.is_id_boolEntry)
116 if self.scan_sat.is_id_bool.value:
117 self.list.append(getConfigListEntry(_('Input Stream ID'), self.scan_sat.is_id))
118 self.plsModeEntry = getConfigListEntry(_('PLS Mode'), self.scan_sat.pls_mode)
119 self.list.append(self.plsModeEntry)
120 if self.scan_sat.pls_mode.value != eDVBFrontendParametersSatellite.PLS_Unknown:
121 self.list.append(getConfigListEntry(_('PLS Code'), self.scan_sat.pls_code))
122 elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
123 self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
124 self["config"].list = self.list
125 self["config"].l.setList(self.list)
128 cur = self["config"].getCurrent()
129 if cur in (self.typeOfTuningEntry, self.systemEntry, self.is_id_boolEntry, self.plsModeEntry):
131 elif cur == self.satEntry:
134 elif self.modulationEntry and (cur == self.modulationEntry) and \
135 self.systemEntry and (self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2X):
138 def sat_changed(self, config_element):
140 self.retune(config_element)
142 def retune(self, configElement):
143 returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 3, 0)
144 satpos = int(self.tuning_sat.value)
145 nim = nimmanager.nim_slots[self.feid]
146 if self.tuning_type.value == "manual_transponder":
147 system = self.scan_sat.system.value
148 modulation = self.scan_sat.modulation.value
149 if nim.isCompatible("DVB-S2X"):
150 system = self.scan_sat.system_dvbs2x.value
151 modulation = self.scan_sat.modulation_dvbs2x.value
153 if system == eDVBFrontendParametersSatellite.System_DVB_S:
154 fec = self.scan_sat.fec.value
155 elif system == eDVBFrontendParametersSatellite.System_DVB_S2:
156 fec = self.scan_sat.fec_s2.value
157 elif system == eDVBFrontendParametersSatellite.System_DVB_S2X:
158 if modulation == eDVBFrontendParametersSatellite.Modulation_QPSK:
159 fec = self.scan_sat.fec_s2x_qpsk.value
160 elif modulation == eDVBFrontendParametersSatellite.Modulation_8PSK:
161 fec = self.scan_sat.fec_s2x_8psk.value
162 elif modulation == eDVBFrontendParametersSatellite.Modulation_8APSK:
163 fec = self.scan_sat.fec_s2x_8apsk.value
164 elif modulation == eDVBFrontendParametersSatellite.Modulation_16APSK:
165 fec = self.scan_sat.fec_s2x_16apsk.value
166 elif modulation == eDVBFrontendParametersSatellite.Modulation_32APSK:
167 fec = self.scan_sat.fec_s2x_32apsk.value
170 pls_mode = eDVBFrontendParametersSatellite.PLS_Unknown
172 if self.scan_sat.is_id_bool.value:
173 is_id = self.scan_sat.is_id.value
174 pls_mode = self.scan_sat.pls_mode.value
175 if pls_mode == eDVBFrontendParametersSatellite.PLS_Unknown:
178 pls_code = self.scan_sat.pls_code.value
181 self.scan_sat.frequency.value,
182 self.scan_sat.symbolrate.value,
183 self.scan_sat.polarization.value,
185 self.scan_sat.inversion.value,
189 self.scan_sat.rolloff.value,
190 self.scan_sat.pilot.value,
194 self.tune(returnvalue)
195 elif self.tuning_type.value == "predefined_transponder":
196 tps = nimmanager.getTransponders(satpos)
198 if l > self.tuning_transponder.index:
199 transponder = tps[self.tuning_transponder.index]
200 returnvalue = (transponder[1] / 1000, transponder[2] / 1000,
201 transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9], transponder[10], transponder[11], transponder[12])
202 self.tune(returnvalue)
204 def createConfig(self, foo):
205 self.tuning_transponder = None
206 self.tuning_type = ConfigSelection(choices = [("manual_transponder", _("Manual transponder")), ("predefined_transponder", _("Predefined transponder"))])
207 self.tuning_sat = getConfigSatlist(192, nimmanager.getSatListForNim(self.feid))
208 ScanSetup.createConfig(self, None)
212 setup_list = [self.tuning_type, self.tuning_sat, self.scan_sat.frequency,
213 self.scan_sat.inversion, self.scan_sat.symbolrate,
214 self.scan_sat.polarization, self.scan_sat.fec, self.scan_sat.pilot,
215 self.scan_sat.fec_s2, self.scan_sat.fec, self.scan_sat.modulation,
216 self.scan_sat.rolloff, self.scan_sat.system,
217 self.scan_sat.is_id_bool, self.scan_sat.is_id, self.scan_sat.pls_mode, self.scan_sat.pls_code]
219 nim = nimmanager.nim_slots[self.feid]
220 if nim.isCompatible("DVB-S2X"):
221 dvbs2x_setup_list = [self.scan_sat.system_dvbs2x, self.scan_sat.modulation_dvbs2x, self.scan_sat.fec_s2x_qpsk,
222 self.scan_sat.fec_s2x_8psk, self.scan_sat.fec_s2x_8apsk, self.scan_sat.fec_s2x_16apsk, self.scan_sat.fec_s2x_32apsk]
223 setup_list.extend(dvbs2x_setup_list)
226 x.addNotifier(self.retune, initial_call = False)
228 def updateSats(self):
229 orb_pos = self.tuning_sat.orbital_position
230 if orb_pos is not None:
231 transponderlist = nimmanager.getTransponders(orb_pos)
235 for x in transponderlist:
270 e = str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec
273 list.append((str(index), e))
275 self.tuning_transponder = ConfigSelection(choices = list, default = default)
276 self.tuning_transponder.addNotifier(self.retune, initial_call = False)
279 self.retune(self.tuning_type)
281 def restartPrevService(self, yesno):
292 self.session.openWithCallback(self.restartPrevService, MessageBox, _("Zap back to service before satfinder?"), MessageBox.TYPE_YESNO)
294 self.restartPrevService(False)
296 def tune(self, transponder):
297 if self.initcomplete:
298 if transponder is not None:
299 self.tuner.tune(transponder)
301 class SatNimSelection(Screen):
303 <screen position="140,165" size="400,130" title="select Slot">
304 <widget name="nimlist" position="20,10" size="360,100" />
307 def __init__(self, session):
308 Screen.__init__(self, session)
310 nimlist = nimmanager.getNimListOfType("DVB-S")
313 nimMenuList.append((nimmanager.nim_slots[x].friendly_full_description, x))
315 self["nimlist"] = MenuList(nimMenuList)
317 self["actions"] = ActionMap(["OkCancelActions"],
319 "ok": self.okbuttonClick ,
323 def okbuttonClick(self):
324 selection = self["nimlist"].getCurrent()[1]
325 self.session.open(Satfinder, selection)
327 def SatfinderMain(session, **kwargs):
328 nims = nimmanager.getNimListOfType("DVB-S")
332 if not nimmanager.getNimConfig(x).configMode.value in ("loopthrough", "satposdepends", "nothing"):
335 if len(nimList) == 0:
336 session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
338 if session.nav.RecordTimer.isRecording():
339 session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to start the satfinder."), MessageBox.TYPE_ERROR)
341 if len(nimList) == 1:
342 session.open(Satfinder, nimList[0])
344 session.open(SatNimSelection)
346 def SatfinderStart(menuid, **kwargs):
348 return [(_("Satfinder"), SatfinderMain, "satfinder", None)]
352 def Plugins(**kwargs):
353 if (nimmanager.hasNimType("DVB-S")):
354 return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=SatfinderStart)