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.typeOfTuningEntry = None
62 self.systemEntry = None
63 self.is_id_boolEntry = None
64 self.plsModeEntry = 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]
72 if self.tuning_type.value == "manual_transponder":
73 scan_sat_system_value = self.scan_sat.system.value
74 if nim.isCompatible("DVB-S2X"):
75 scan_sat_system_value = self.scan_sat.system_dvbs2x.value
76 self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system_dvbs2x)
77 self.list.append(self.systemEntry)
78 elif nim.isCompatible("DVB-S2"):
79 self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
80 self.list.append(self.systemEntry)
82 # downgrade to dvb-s, in case a -s2 config was active
83 self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
84 self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
85 self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
86 self.list.append(getConfigListEntry(_('Symbol rate'), self.scan_sat.symbolrate))
87 self.list.append(getConfigListEntry(_('Polarization'), self.scan_sat.polarization))
88 if scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S:
89 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
90 elif scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2:
91 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
92 self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
93 self.list.append(self.modulationEntry)
94 self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
95 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
96 elif scan_sat_system_value == eDVBFrontendParametersSatellite.System_DVB_S2X:
97 if self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_QPSK:
98 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_qpsk))
99 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8PSK:
100 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8psk))
101 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_8APSK:
102 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_8apsk))
103 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_16APSK:
104 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_16apsk))
105 elif self.scan_sat.modulation_dvbs2x.value == eDVBFrontendParametersSatellite.Modulation_32APSK:
106 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2x_32apsk))
107 self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation_dvbs2x)
108 self.list.append(self.modulationEntry)
109 self.list.append(getConfigListEntry(_('Roll-off'), self.scan_sat.rolloff))
110 self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
111 if scan_sat_system_value in (eDVBFrontendParametersSatellite.System_DVB_S2, eDVBFrontendParametersSatellite.System_DVB_S2X):
112 if nim.isMultistream():
113 self.is_id_boolEntry = getConfigListEntry(_('Transport Stream Type'), self.scan_sat.is_id_bool)
114 self.list.append(self.is_id_boolEntry)
115 if self.scan_sat.is_id_bool.value:
116 self.list.append(getConfigListEntry(_('Input Stream ID'), self.scan_sat.is_id))
117 self.plsModeEntry = getConfigListEntry(_('PLS Mode'), self.scan_sat.pls_mode)
118 self.list.append(self.plsModeEntry)
119 if self.scan_sat.pls_mode.value != eDVBFrontendParametersSatellite.PLS_Unknown:
120 self.list.append(getConfigListEntry(_('PLS Code'), self.scan_sat.pls_code))
121 elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
122 self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
123 self["config"].list = self.list
124 self["config"].l.setList(self.list)
127 cur = self["config"].getCurrent()
128 if cur in (self.typeOfTuningEntry, self.systemEntry, self.is_id_boolEntry, self.plsModeEntry):
130 elif cur == self.satEntry:
133 elif self.modulationEntry and (cur == self.modulationEntry) and \
134 self.systemEntry and (self.systemEntry[1].value == eDVBFrontendParametersSatellite.System_DVB_S2X):
137 def sat_changed(self, config_element):
139 self.retune(config_element)
141 def retune(self, configElement):
142 returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 3, 0)
143 satpos = int(self.tuning_sat.value)
144 nim = nimmanager.nim_slots[self.feid]
145 if self.tuning_type.value == "manual_transponder":
146 system = self.scan_sat.system.value
147 modulation = self.scan_sat.modulation.value
148 if nim.isCompatible("DVB-S2X"):
149 system = self.scan_sat.system_dvbs2x.value
150 modulation = self.scan_sat.modulation_dvbs2x.value
152 if system == eDVBFrontendParametersSatellite.System_DVB_S:
153 fec = self.scan_sat.fec.value
154 elif system == eDVBFrontendParametersSatellite.System_DVB_S2:
155 fec = self.scan_sat.fec_s2.value
156 elif system == eDVBFrontendParametersSatellite.System_DVB_S2X:
157 if modulation == eDVBFrontendParametersSatellite.Modulation_QPSK:
158 fec = self.scan_sat.fec_s2x_qpsk.value
159 elif modulation == eDVBFrontendParametersSatellite.Modulation_8PSK:
160 fec = self.scan_sat.fec_s2x_8psk.value
161 elif modulation == eDVBFrontendParametersSatellite.Modulation_8APSK:
162 fec = self.scan_sat.fec_s2x_8apsk.value
163 elif modulation == eDVBFrontendParametersSatellite.Modulation_16APSK:
164 fec = self.scan_sat.fec_s2x_16apsk.value
165 elif modulation == eDVBFrontendParametersSatellite.Modulation_32APSK:
166 fec = self.scan_sat.fec_s2x_32apsk.value
169 pls_mode = eDVBFrontendParametersSatellite.PLS_Unknown
171 if self.scan_sat.is_id_bool.value:
172 is_id = self.scan_sat.is_id.value
173 pls_mode = self.scan_sat.pls_mode.value
174 if pls_mode == eDVBFrontendParametersSatellite.PLS_Unknown:
177 pls_code = self.scan_sat.pls_code.value
180 self.scan_sat.frequency.value,
181 self.scan_sat.symbolrate.value,
182 self.scan_sat.polarization.value,
184 self.scan_sat.inversion.value,
188 self.scan_sat.rolloff.value,
189 self.scan_sat.pilot.value,
193 self.tune(returnvalue)
194 elif self.tuning_type.value == "predefined_transponder":
195 tps = nimmanager.getTransponders(satpos)
197 if l > self.tuning_transponder.index:
198 transponder = tps[self.tuning_transponder.index]
199 returnvalue = (transponder[1] / 1000, transponder[2] / 1000,
200 transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9], transponder[10], transponder[11], transponder[12])
201 self.tune(returnvalue)
203 def createConfig(self, foo):
204 self.tuning_transponder = None
205 self.tuning_type = ConfigSelection(choices = [("manual_transponder", _("Manual transponder")), ("predefined_transponder", _("Predefined transponder"))])
206 self.tuning_sat = getConfigSatlist(192, nimmanager.getSatListForNim(self.feid))
207 ScanSetup.createConfig(self, None)
211 setup_list = [self.tuning_type, self.tuning_sat, self.scan_sat.frequency,
212 self.scan_sat.inversion, self.scan_sat.symbolrate,
213 self.scan_sat.polarization, self.scan_sat.fec, self.scan_sat.pilot,
214 self.scan_sat.fec_s2, self.scan_sat.fec, self.scan_sat.modulation,
215 self.scan_sat.rolloff, self.scan_sat.system,
216 self.scan_sat.is_id_bool, self.scan_sat.is_id, self.scan_sat.pls_mode, self.scan_sat.pls_code]
218 nim = nimmanager.nim_slots[self.feid]
219 if nim.isCompatible("DVB-S2X"):
220 dvbs2x_setup_list = [self.scan_sat.system_dvbs2x, self.scan_sat.modulation_dvbs2x, self.scan_sat.fec_s2x_qpsk,
221 self.scan_sat.fec_s2x_8psk, self.scan_sat.fec_s2x_8apsk, self.scan_sat.fec_s2x_16apsk, self.scan_sat.fec_s2x_32apsk]
222 setup_list.extend(dvbs2x_setup_list)
225 x.addNotifier(self.retune, initial_call = False)
227 def updateSats(self):
228 orb_pos = self.tuning_sat.orbital_position
229 if orb_pos is not None:
230 transponderlist = nimmanager.getTransponders(orb_pos)
234 for x in transponderlist:
269 e = str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec
272 list.append((str(index), e))
274 self.tuning_transponder = ConfigSelection(choices = list, default = default)
275 self.tuning_transponder.addNotifier(self.retune, initial_call = False)
278 self.retune(self.tuning_type)
280 def restartPrevService(self, yesno):
291 self.session.openWithCallback(self.restartPrevService, MessageBox, _("Zap back to service before satfinder?"), MessageBox.TYPE_YESNO)
293 self.restartPrevService(False)
295 def tune(self, transponder):
296 if self.initcomplete:
297 if transponder is not None:
298 self.tuner.tune(transponder)
300 class SatNimSelection(Screen):
302 <screen position="140,165" size="400,130" title="select Slot">
303 <widget name="nimlist" position="20,10" size="360,100" />
306 def __init__(self, session):
307 Screen.__init__(self, session)
309 nimlist = nimmanager.getNimListOfType("DVB-S")
312 nimMenuList.append((nimmanager.nim_slots[x].friendly_full_description, x))
314 self["nimlist"] = MenuList(nimMenuList)
316 self["actions"] = ActionMap(["OkCancelActions"],
318 "ok": self.okbuttonClick ,
322 def okbuttonClick(self):
323 selection = self["nimlist"].getCurrent()[1]
324 self.session.open(Satfinder, selection)
326 def SatfinderMain(session, **kwargs):
327 nims = nimmanager.getNimListOfType("DVB-S")
331 if not nimmanager.getNimConfig(x).configMode.value in ("loopthrough", "satposdepends", "nothing"):
334 if len(nimList) == 0:
335 session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
337 if session.nav.RecordTimer.isRecording():
338 session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to start the satfinder."), MessageBox.TYPE_ERROR)
340 if len(nimList) == 1:
341 session.open(Satfinder, nimList[0])
343 session.open(SatNimSelection)
345 def SatfinderStart(menuid, **kwargs):
347 return [(_("Satfinder"), SatfinderMain, "satfinder", None)]
351 def Plugins(**kwargs):
352 if (nimmanager.hasNimType("DVB-S")):
353 return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, needsRestart = False, fnc=SatfinderStart)