X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/c2502ea9d3d2886882e8fd27912e416bfc933567..cab018779de4f2f01e0fe651e71112754ebd0ef8:/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py diff --git a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py index 880c172c..a4008c2d 100644 --- a/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py +++ b/lib/python/Plugins/SystemPlugins/PositionerSetup/plugin.py @@ -1,4 +1,7 @@ -from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBResourceManagerPtr, iDVBChannelPtr, iDVBFrontendPtr, iDVBFrontend, eDVBFrontendParametersSatellite, eDVBFrontendParameters +from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, \ + eDVBDiseqcCommand, eDVBFrontendParametersSatellite, eDVBFrontendParameters,\ + iDVBFrontend + from Screens.Screen import Screen from Screens.ScanSetup import ScanSetup from Screens.MessageBox import MessageBox @@ -58,9 +61,10 @@ class PositionerSetup(Screen): del session.pip if not self.openFrontend(): self.frontend = None # in normal case this should not happen - self.getFrontend = None - - self.diseqc = Diseqc(self.feid) + + self.frontendStatus = { } + + self.diseqc = Diseqc(self.frontend) self.tuner = Tuner(self.frontend) self.tuner.tune((0,0,0,0,0,0)) @@ -86,13 +90,13 @@ class PositionerSetup(Screen): 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["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, statusDict = self.frontendStatus) + self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, statusDict = self.frontendStatus) + self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, statusDict = self.frontendStatus) + self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, statusDict = self.frontendStatus) + self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, statusDict = self.frontendStatus) + self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, statusDict = self.frontendStatus) + self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, statusDict = self.frontendStatus) self["frequency"] = Label() self["symbolrate"] = Label() @@ -119,33 +123,35 @@ class PositionerSetup(Screen): self.updateColors("tune") self.statusTimer = eTimer() - self.statusTimer.timeout.get().append(self.updateStatus) + self.statusTimer.callback.append(self.updateStatus) self.statusTimer.start(50, False) + self.onClose.append(self.__onClose) + + def __onClose(self): + self.session.nav.playService(self.oldref) def restartPrevService(self, yesno): if yesno: if self.frontend: self.frontend = None del self.raw_channel - self.session.nav.playService(self.oldref) - self.close(None) - + else: + self.oldref=None + self.close(None) + def keyCancel(self): if self.oldref: self.session.openWithCallback(self.restartPrevService, MessageBox, _("Zap back to service before positioner setup?"), MessageBox.TYPE_YESNO) else: self.restartPrevService(False) - def getFrontend(self): - return self.frontend - 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" @@ -321,6 +327,8 @@ class PositionerSetup(Screen): self.tuner.retune() def updateStatus(self): + if self.frontend: + self.frontend.getFrontendStatus(self.frontendStatus) self["snr_percentage"].update() self["agc_percentage"].update() self["ber_value"].update() @@ -329,10 +337,10 @@ class PositionerSetup(Screen): self["ber_bar"].update() self["lock_state"].update() transponderdata = self.tuner.getTransponderData() - self["frequency_value"].setText(str(transponderdata["frequency"])) - self["symbolrate_value"].setText(str(transponderdata["symbol_rate"])) - self["fec_value"].setText(str(transponderdata["fec_inner"])) - if transponderdata["tuner_locked"] == 1 and self.isMoving and self.stopOnLock: + self["frequency_value"].setText(str(transponderdata.get("frequency"))) + self["symbolrate_value"].setText(str(transponderdata.get("symbol_rate"))) + self["fec_value"].setText(str(transponderdata.get("fec_inner"))) + if self.frontendStatus.get("tuner_locked", 0) == 1 and self.isMoving and self.stopOnLock: self.diseqccommand("stop") self.isMoving = False self.stopOnLock = False @@ -371,6 +379,8 @@ class Diseqc: print "diseqc command:", print string cmd.setCommandString(string) + self.frontend.setTone(iDVBFrontend.toneOff) + sleep(0.015) # wait 15msec after disable tone self.frontend.sendDiseqc(cmd) if string == 'e03160': #positioner stop sleep(0.05) @@ -402,9 +412,10 @@ class Tuner: self.frontend.tune(self.lastparm) def getTransponderData(self): + ret = { } if self.frontend: - return self.frontend.readTransponderData(True) - return None + self.frontend.getTransponderData(ret, True) + return ret tuning = None @@ -446,8 +457,8 @@ class TunerScreen(ScanSetup): self.createSetup() def createConfig(self, foo): + global tuning if not tuning: - global tuning tuning = ConfigSubsection() tuning.type = ConfigSelection( default = "manual_transponder", @@ -476,6 +487,8 @@ class TunerScreen(ScanSetup): pol = "CL" elif x[3] == 3: pol = "CR" + else: + pol = "??" if x[4] == 0: fec = "FEC_AUTO" elif x[4] == 1: @@ -488,10 +501,18 @@ class TunerScreen(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" + else: + fec = "FEC_Unknown" tps.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec) tuning.transponder = ConfigSelection(choices=tps) @@ -514,7 +535,7 @@ class TunerScreen(ScanSetup): def keyCancel(self): self.close(None) -class NimSelection(Screen): +class RotorNimSelection(Screen): skin = """ @@ -523,10 +544,10 @@ class NimSelection(Screen): 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) @@ -541,7 +562,7 @@ class NimSelection(Screen): self.session.open(PositionerSetup, selection[1]) def PositionerMain(session, **kwargs): - nimList = nimmanager.getNimListOfType(nimmanager.nimType["DVB-S"]) + nimList = nimmanager.getNimListOfType("DVB-S") if len(nimList) == 0: session.open(MessageBox, _("No positioner capable frontend found."), MessageBox.TYPE_ERROR) else: @@ -556,15 +577,18 @@ def PositionerMain(session, **kwargs): if len(usableNims) == 1: session.open(PositionerSetup, usableNims[0]) elif len(usableNims) > 1: - session.open(NimSelection) + session.open(RotorNimSelection) else: session.open(MessageBox, _("No tuner is configured for use with a diseqc positioner!"), MessageBox.TYPE_ERROR) -def PositionerSetupStart(menuid): +def PositionerSetupStart(menuid, **kwargs): if menuid == "scan": - return [(_("Positioner setup"), PositionerMain)] + return [(_("Positioner setup"), PositionerMain, "positioner_setup", None)] else: return [] def Plugins(**kwargs): - return PluginDescriptor(name=_("Positioner setup"), description="Setup your positioner", where = PluginDescriptor.WHERE_SETUP, fnc=PositionerSetupStart) + if (nimmanager.hasNimType("DVB-S")): + return PluginDescriptor(name=_("Positioner setup"), description="Setup your positioner", where = PluginDescriptor.WHERE_MENU, fnc=PositionerSetupStart) + else: + return []