X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/c2502ea9d3d2886882e8fd27912e416bfc933567..8365147ec23134f886ec4ad374b84034b37c5579:/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py diff --git a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py index 6325a82f..c0522eb3 100644 --- a/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py +++ b/lib/python/Plugins/SystemPlugins/Satfinder/plugin.py @@ -1,16 +1,17 @@ -from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBResourceManagerPtr, iDVBChannelPtr, iDVBFrontendPtr, iDVBFrontend, eDVBFrontendParametersSatellite, eDVBFrontendParameters +from enigma import eDVBResourceManager,\ + eDVBFrontendParametersSatellite, eDVBFrontendParameters + from Screens.Screen import Screen from Screens.ScanSetup import ScanSetup from Screens.MessageBox import MessageBox from Plugins.Plugin import PluginDescriptor from Components.Label import Label -from Components.ConfigList import ConfigList -from Components.TunerInfo import TunerInfo +from Components.Sources.FrontendStatus import FrontendStatus from Components.ActionMap import ActionMap from Components.NimManager import nimmanager, getConfigSatlist from Components.MenuList import MenuList -from Components.config import ConfigSelection, ConfigSatlist, getConfigListEntry +from Components.config import ConfigSelection, getConfigListEntry class Tuner: def __init__(self, frontend): @@ -26,42 +27,27 @@ class Tuner: parm.fec = transponder[3] parm.inversion = transponder[4] parm.orbital_position = transponder[5] - parm.system = 0 # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2) - parm.modulation = 1 # FIXMEE !! HARDCODED QPSK + parm.system = transponder[6] + parm.modulation = transponder[7] + parm.rolloff = transponder[8] + parm.pilot = transponder[9] feparm = eDVBFrontendParameters() - feparm.setDVBS(parm) + feparm.setDVBS(parm, True) self.lastparm = feparm self.frontend.tune(feparm) - + def retune(self): if self.frontend: self.frontend.tune(self.lastparm) class Satfinder(ScanSetup): - skin = """ - - - - - - - - - - - - - - - """ - def openFrontend(self): - res_mgr = eDVBResourceManagerPtr() - if eDVBResourceManager.getInstance(res_mgr) == 0: - self.raw_channel = iDVBChannelPtr() - if res_mgr.allocateRawChannel(self.raw_channel, self.feid) == 0: - self.frontend = iDVBFrontendPtr() - if self.raw_channel.getFrontend(self.frontend) == 0: + res_mgr = eDVBResourceManager.getInstance() + if res_mgr: + self.raw_channel = res_mgr.allocateRawChannel(self.feid) + if self.raw_channel: + self.frontend = self.raw_channel.getFrontend() + if self.frontend: return True else: print "getFrontend failed" @@ -71,14 +57,11 @@ class Satfinder(ScanSetup): print "getResourceManager instance failed" return False - def getFrontend(self): - return self.frontend - def __init__(self, session, feid): self.initcomplete = False self.feid = feid self.oldref = None - + if not self.openFrontend(): self.oldref = session.nav.getCurrentlyPlayingServiceReference() session.nav.stopService() # try to disable foreground service @@ -88,65 +71,60 @@ class Satfinder(ScanSetup): del session.pip if not self.openFrontend(): self.frontend = None # in normal case this should not happen - self.getFrontend = None - + ScanSetup.__init__(self, session) self.tuner = Tuner(self.frontend) - - self["snr"] = Label() - self["agc"] = Label() - self["ber"] = Label() - self["lock"] = Label() - self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, frontendfkt = self.getFrontend) - self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, frontendfkt = self.getFrontend) - self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, frontendfkt = self.getFrontend) - self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, frontendfkt = self.getFrontend) - self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, frontendfkt = self.getFrontend) - self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, frontendfkt = self.getFrontend) - self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, frontendfkt = self.getFrontend) - self["introduction"].setText("") - - self.statusTimer = eTimer() - self.statusTimer.timeout.get().append(self.updateStatus) - self.statusTimer.start(50, False) - + self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100) self.initcomplete = True - self.session = session + self.onClose.append(self.__onClose) - def updateStatus(self): - self["snr_percentage"].update() - self["agc_percentage"].update() - self["ber_value"].update() - self["snr_bar"].update() - self["agc_bar"].update() - self["ber_bar"].update() - self["lock_state"].update() + def __onClose(self): + self.session.nav.playService(self.oldref) def createSetup(self): self.typeOfTuningEntry = None self.satEntry = None self.list = [] + self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning_type) self.list.append(self.typeOfTuningEntry) self.satEntry = getConfigListEntry(_('Satellite'), self.tuning_sat) self.list.append(self.satEntry) + + nim = nimmanager.nim_slots[self.feid] + + self.systemEntry = None if self.tuning_type.value == "manual_transponder": + if nim.isCompatible("DVB-S2"): + self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system) + self.list.append(self.systemEntry) + else: + # downgrade to dvb-s, in case a -s2 config was active + self.scan_sat.system.value = "dvb-s" self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency)) self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion)) self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate)) self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization)) - self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec)) + if self.scan_sat.system.value == "dvb-s": + self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec)) + elif self.scan_sat.system.value == "dvb-s2": + self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2)) + self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation) + self.list.append(self.modulationEntry) + self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff)) + self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot)) elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder": self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder)) self["config"].list = self.list self["config"].l.setList(self.list) def newConfig(self): - if self["config"].getCurrent() == self.typeOfTuningEntry: + cur = self["config"].getCurrent() + if cur in (self.typeOfTuningEntry, self.systemEntry): self.createSetup() - elif self["config"].getCurrent() == self.satEntry: + elif cur == self.satEntry: self.updateSats() self.createSetup() @@ -155,16 +133,43 @@ class Satfinder(ScanSetup): self.retune(config_element) def retune(self, configElement): - returnvalue = (0, 0, 0, 0, 0, 0, 0) - satpos = self.tuning_sat.orbital_position - - if satpos is not None: - if self.tuning_type.value == "manual_transponder": - returnvalue = (self.scan_sat.frequency.value, self.scan_sat.symbolrate.value, self.scan_sat.polarization.index, self.scan_sat.fec.index, self.scan_sat.inversion.index, satpos) - elif self.tuning_type.value == "predefined_transponder": - transponder = nimmanager.getTransponders(satpos)[self.tuning_transponder.index] - returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, satpos) + returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + satpos = int(self.tuning_sat.value) + if self.tuning_type.value == "manual_transponder": + if self.scan_sat.system.value == "dvb-s2": + fec = self.scan_sat.fec_s2.value + else: + fec = self.scan_sat.fec.value + returnvalue = ( + self.scan_sat.frequency.value, + self.scan_sat.symbolrate.value, + self.scan_sat.polarization.index, + { "auto": 0, + "1_2": 1, + "2_3": 2, + "3_4": 3, + "5_6": 4, + "7_8": 5, + "8_9": 6, + "3_5": 7, + "4_5": 8, + "9_10": 9, + "none": 15 }[fec], + self.scan_sat.inversion.index, + satpos, + self.scan_sat.system.index, + self.scan_sat.modulation.index == 1 and 2 or 1, + self.scan_sat.rolloff.index, + self.scan_sat.pilot.index) self.tune(returnvalue) + elif self.tuning_type.value == "predefined_transponder": + tps = nimmanager.getTransponders(satpos) + l = len(tps) + if l > self.tuning_transponder.index: + transponder = tps[self.tuning_transponder.index] + returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), + transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9]) + self.tune(returnvalue) def createConfig(self, foo): self.tuning_transponder = None @@ -173,20 +178,20 @@ class Satfinder(ScanSetup): ScanSetup.createConfig(self, None) self.updateSats() - - self.tuning_type.addNotifier(self.retune, initial_call = False) - self.tuning_sat.addNotifier(self.sat_changed, initial_call = False) - self.scan_sat.frequency.addNotifier(self.retune, initial_call = False) - self.scan_sat.inversion.addNotifier(self.retune, initial_call = False) - self.scan_sat.symbolrate.addNotifier(self.retune, initial_call = False) - self.scan_sat.polarization.addNotifier(self.retune, initial_call = False) - self.scan_sat.fec.addNotifier(self.retune, initial_call = False) + + for x in (self.tuning_type, self.tuning_sat, self.scan_sat.frequency, + self.scan_sat.inversion, self.scan_sat.symbolrate, + self.scan_sat.polarization, self.scan_sat.fec, self.scan_sat.pilot, + self.scan_sat.fec_s2, self.scan_sat.fec, self.scan_sat.modulation, + self.scan_sat.rolloff, self.scan_sat.system): + x.addNotifier(self.retune, initial_call = False) def updateSats(self): orb_pos = self.tuning_sat.orbital_position if orb_pos is not None: transponderlist = nimmanager.getTransponders(orb_pos) list = [] + default = None for x in transponderlist: if x[3] == 0: pol = "H" @@ -196,6 +201,8 @@ class Satfinder(ScanSetup): pol = "CL" elif x[3] == 3: pol = "CR" + else: + pol = "??" if x[4] == 0: fec = "FEC_AUTO" elif x[4] == 1: @@ -208,12 +215,23 @@ class Satfinder(ScanSetup): fec = "FEC_5_6" elif x[4] == 5: fec = "FEC_7_8" - elif x[4] == 5: - fec = "FEC_8_9" elif x[4] == 6: + fec = "FEC_8_9" + elif x[4] == 7: + fec = "FEC_3_5" + elif x[4] == 8: + fec = "FEC_4_5" + elif x[4] == 9: + fec = "FEC_9_10" + elif x[4] == 15: fec = "FEC_None" - list.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec) - self.tuning_transponder = ConfigSelection(choices = list) + else: + fec = "FEC_Unknown" + e = str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec + if default is None: + default = e + list.append(e) + self.tuning_transponder = ConfigSelection(choices = list, default = default) self.tuning_transponder.addNotifier(self.retune, initial_call = False) def keyGo(self): @@ -224,7 +242,8 @@ class Satfinder(ScanSetup): if self.frontend: self.frontend = None del self.raw_channel - self.session.nav.playService(self.oldref) + else: + self.oldref = None self.close(None) def keyCancel(self): @@ -238,20 +257,20 @@ class Satfinder(ScanSetup): if transponder is not None: self.tuner.tune(transponder) -class NimSelection(Screen): +class SatNimSelection(Screen): skin = """ - - + + """ def __init__(self, session): Screen.__init__(self, session) - nimlist = nimmanager.getNimListOfType(nimmanager.nimType["DVB-S"]) + nimlist = nimmanager.getNimListOfType("DVB-S") nimMenuList = [] for x in nimlist: - nimMenuList.append((_("NIM ") + (["A", "B", "C", "D"][x]) + ": " + nimmanager.getNimName(x) + " (" + nimmanager.getNimTypeName(x) + ")", x)) - + nimMenuList.append((nimmanager.nim_slots[x].friendly_full_description, x)) + self["nimlist"] = MenuList(nimMenuList) self["actions"] = ActionMap(["OkCancelActions"], @@ -261,11 +280,11 @@ class NimSelection(Screen): }, -1) def okbuttonClick(self): - selection = self["nimlist"].getCurrent() - self.session.open(Satfinder, selection[1]) + selection = self["nimlist"].getCurrent()[1] + self.session.open(Satfinder, selection) def SatfinderMain(session, **kwargs): - nimList = nimmanager.getNimListOfType(nimmanager.nimType["DVB-S"]) + nimList = nimmanager.getNimListOfType("DVB-S") if len(nimList) == 0: session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR) else: @@ -275,13 +294,16 @@ def SatfinderMain(session, **kwargs): if len(nimList) == 1: session.open(Satfinder, nimList[0]) else: - session.open(NimSelection) + session.open(SatNimSelection) -def SatfinderStart(menuid): +def SatfinderStart(menuid, **kwargs): if menuid == "scan": - return [(_("Satfinder"), SatfinderMain)] + return [(_("Satfinder"), SatfinderMain, "satfinder", None)] else: return [] def Plugins(**kwargs): - return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_SETUP, fnc=SatfinderStart) + if (nimmanager.hasNimType("DVB-S")): + return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, fnc=SatfinderStart) + else: + return []