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 = eDVBFrontendParametersSatellite.System_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 == eDVBFrontendParametersSatellite.System_DVB_S:
86 self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
87 elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_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 == eDVBFrontendParametersSatellite.System_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.value,
123 self.scan_sat.inversion.value,
125 self.scan_sat.system.value,
126 self.scan_sat.modulation.value,
127 self.scan_sat.rolloff.value,
128 self.scan_sat.pilot.value)
129 self.tune(returnvalue)
130 elif self.tuning_type.value == "predefined_transponder":
131 tps = nimmanager.getTransponders(satpos)
133 if l > self.tuning_transponder.index:
134 transponder = tps[self.tuning_transponder.index]
135 returnvalue = (transponder[1] / 1000, transponder[2] / 1000,
136 transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9])
137 self.tune(returnvalue)
139 def createConfig(self, foo):
140 self.tuning_transponder = None
141 self.tuning_type = ConfigSelection(choices = [("manual_transponder", _("Manual transponder")), ("predefined_transponder", _("Predefined transponder"))])
142 self.tuning_sat = getConfigSatlist(192, nimmanager.getSatListForNim(self.feid))
143 ScanSetup.createConfig(self, None)
147 for x in (self.tuning_type, self.tuning_sat, self.scan_sat.frequency,
148 self.scan_sat.inversion, self.scan_sat.symbolrate,
149 self.scan_sat.polarization, self.scan_sat.fec, self.scan_sat.pilot,
150 self.scan_sat.fec_s2, self.scan_sat.fec, self.scan_sat.modulation,
151 self.scan_sat.rolloff, self.scan_sat.system):
152 x.addNotifier(self.retune, initial_call = False)
154 def updateSats(self):
155 orb_pos = self.tuning_sat.orbital_position
156 if orb_pos is not None:
157 transponderlist = nimmanager.getTransponders(orb_pos)
160 for x in transponderlist:
195 e = str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec
199 self.tuning_transponder = ConfigSelection(choices = list, default = default)
200 self.tuning_transponder.addNotifier(self.retune, initial_call = False)
203 self.retune(self.tuning_type)
205 def restartPrevService(self, yesno):
216 self.session.openWithCallback(self.restartPrevService, MessageBox, _("Zap back to service before satfinder?"), MessageBox.TYPE_YESNO)
218 self.restartPrevService(False)
220 def tune(self, transponder):
221 if self.initcomplete:
222 if transponder is not None:
223 self.tuner.tune(transponder)
225 class SatNimSelection(Screen):
227 <screen position="140,165" size="400,130" title="select Slot">
228 <widget name="nimlist" position="20,10" size="360,100" />
231 def __init__(self, session):
232 Screen.__init__(self, session)
234 nimlist = nimmanager.getNimListOfType("DVB-S")
237 nimMenuList.append((nimmanager.nim_slots[x].friendly_full_description, x))
239 self["nimlist"] = MenuList(nimMenuList)
241 self["actions"] = ActionMap(["OkCancelActions"],
243 "ok": self.okbuttonClick ,
247 def okbuttonClick(self):
248 selection = self["nimlist"].getCurrent()[1]
249 self.session.open(Satfinder, selection)
251 def SatfinderMain(session, **kwargs):
252 nims = nimmanager.getNimListOfType("DVB-S")
256 if not nimmanager.getNimConfig(x).configMode.value in ("loopthrough", "satposdepends", "nothing"):
259 if len(nimList) == 0:
260 session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
262 if session.nav.RecordTimer.isRecording():
263 session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to start the satfinder."), MessageBox.TYPE_ERROR)
265 if len(nimList) == 1:
266 session.open(Satfinder, nimList[0])
268 session.open(SatNimSelection)
270 def SatfinderStart(menuid, **kwargs):
272 return [(_("Satfinder"), SatfinderMain, "satfinder", None)]
276 def Plugins(**kwargs):
277 if (nimmanager.hasNimType("DVB-S")):
278 return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, fnc=SatfinderStart)