-from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBResourceManagerPtr, iDVBChannelPtr, iDVBFrontendPtr, iDVBFrontend, eDVBFrontendParametersSatellite, eDVBFrontendParameters
+from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, \
+ eDVBDiseqcCommand, eDVBFrontendParametersSatellite, eDVBFrontendParameters,\
+ iDVBFrontend
+
- <widget name="red" position="0,130" size="140,80" backgroundColor="red" halign="center" valign="center" font="Regular;21" />
- <widget name="green" position="140,130" size="140,80" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
- <widget name="yellow" position="280,130" size="140,80" backgroundColor="yellow" halign="center" valign="center" font="Regular;21" />
- <widget name="blue" position="420,130" size="140,80" backgroundColor="blue" halign="center" valign="center" font="Regular;21" />
+ <widget name="red" position="0,155" size="140,80" backgroundColor="red" halign="center" valign="center" font="Regular;21" />
+ <widget name="green" position="140,155" size="140,80" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
+ <widget name="yellow" position="280,155" size="140,80" backgroundColor="yellow" halign="center" valign="center" font="Regular;21" />
+ <widget name="blue" position="420,155" size="140,80" backgroundColor="blue" halign="center" valign="center" font="Regular;21" />
- <widget name="snr" text="SNR:" position="0,220" size="60,22" font="Regular;21" />
- <widget name="agc" text="AGC:" position="0,245" size="60,22" font="Regular;21" />
- <widget name="ber" text="BER:" position="0,270" size="60,22" font="Regular;21" />
- <widget name="lock" text="Lock:" position="0,295" size="60,22" font="Regular;21" />
- <widget name="snr_percentage" position="220,220" size="60,22" font="Regular;21" />
- <widget name="agc_percentage" position="220,245" size="60,22" font="Regular;21" />
- <widget name="ber_value" position="220,270" size="60,22" font="Regular;21" />
- <widget name="lock_state" position="60,295" size="150,22" font="Regular;21" />
- <widget name="snr_bar" position="60,220" size="150,22" />
- <widget name="agc_bar" position="60,245" size="150,22" />
- <widget name="ber_bar" position="60,270" size="150,22" />
-
- <widget name="frequency" text="Frequency:" position="300,220" size="120,22" font="Regular;21" />
- <widget name="symbolrate" text="Symbolrate:" position="300,245" size="120,22" font="Regular;21" />
- <widget name="fec" text="FEC:" position="300,270" size="120,22" font="Regular;21" />
- <widget name="frequency_value" position="420,220" size="120,22" font="Regular;21" />
- <widget name="symbolrate_value" position="420,245" size="120,22" font="Regular;21" />
- <widget name="fec_value" position="420,270" size="120,22" font="Regular;21" />
+ <widget name="snr" text="SNR:" position="0,245" size="60,22" font="Regular;21" />
+ <widget name="agc" text="AGC:" position="0,270" size="60,22" font="Regular;21" />
+ <widget name="ber" text="BER:" position="0,295" size="60,22" font="Regular;21" />
+ <widget name="lock" text="Lock:" position="0,320" size="60,22" font="Regular;21" />
+ <widget name="snr_percentage" position="220,245" size="60,22" font="Regular;21" />
+ <widget name="agc_percentage" position="220,270" size="60,22" font="Regular;21" />
+ <widget name="ber_value" position="220,295" size="60,22" font="Regular;21" />
+ <widget name="lock_state" position="60,320" size="150,22" font="Regular;21" />
+ <widget name="snr_bar" position="60,245" size="150,22" />
+ <widget name="agc_bar" position="60,270" size="150,22" />
+ <widget name="ber_bar" position="60,295" size="150,22" />
+
+ <widget name="frequency" text="Frequency:" position="300,245" size="120,22" font="Regular;21" />
+ <widget name="symbolrate" text="Symbolrate:" position="300,270" size="120,22" font="Regular;21" />
+ <widget name="fec" text="FEC:" position="300,295" size="120,22" font="Regular;21" />
+ <widget name="frequency_value" position="420,245" size="120,22" font="Regular;21" />
+ <widget name="symbolrate_value" position="420,270" size="120,22" font="Regular;21" />
+ <widget name="fec_value" position="420,295" size="120,22" font="Regular;21" />
- self.diseqc = Diseqc(self.feid)
- self.tuner = Tuner(self.diseqc.getFrontend())
- self.tuner.tune((0,0,0,0,0,0,0,0,0))
-
- #self.session.nav.stopService()
+ if not self.openFrontend():
+ self.oldref = session.nav.getCurrentlyPlayingServiceReference()
+ session.nav.stopService() # try to disable foreground service
+ if not self.openFrontend():
+ if session.pipshown: # try to disable pip
+ session.pipshown = False
+ del session.pip
+ if not self.openFrontend():
+ self.frontend = None # in normal case this should not happen
+
+ self.frontendStatus = { }
+
+ self.diseqc = Diseqc(self.frontend)
+ self.tuner = Tuner(self.frontend)
+ self.tuner.tune((0,0,0,0,0,0))
- self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, frontendfkt = self.diseqc.getFrontend)
- self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, frontendfkt = self.diseqc.getFrontend)
- self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, frontendfkt = self.diseqc.getFrontend)
- self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, frontendfkt = self.diseqc.getFrontend)
- self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, frontendfkt = self.diseqc.getFrontend)
- self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, frontendfkt = self.diseqc.getFrontend)
- self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, frontendfkt = self.diseqc.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)
+
+ 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)
+
+ 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 openFrontend(self):
+ 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"
+ else:
+ print "getRawChannel failed"
+ else:
+ print "getResourceManager instance failed"
+ return False
+
- config.positioner = ConfigSubsection()
- config.positioner.tune = configElement_nonSave("tune", configNothing, 0, None)
- config.positioner.move = configElement_nonSave("move", configNothing, 0, None)
- config.positioner.finemove = configElement_nonSave("finemove", configNothing, 0, None)
- config.positioner.limits = configElement_nonSave("limits", configNothing, 0, None)
+ self.positioner_tune = ConfigNothing()
+ self.positioner_move = ConfigNothing()
+ self.positioner_finemove = ConfigNothing()
+ self.positioner_limits = ConfigNothing()
+ self.positioner_goto0 = ConfigNothing()
- self.list.append(getConfigListEntry(_("Tune"), config.positioner.tune))
- self.list.append(getConfigListEntry(_("Positioner movement"), config.positioner.move))
- self.list.append(getConfigListEntry(_("Positioner fine movement"), config.positioner.finemove))
- self.list.append(getConfigListEntry(_("Set limits"), config.positioner.limits))
- self.list.append(getConfigListEntry(_("Positioner storage"), config.positioner.storage))
-
+ self.list.append((_("Tune"), self.positioner_tune, "tune"))
+ self.list.append((_("Positioner movement"), self.positioner_move, "move"))
+ self.list.append((_("Positioner fine movement"), self.positioner_finemove, "finemove"))
+ self.list.append((_("Set limits"), self.positioner_limits, "limits"))
+ self.list.append((_("Positioner storage"), self.positioner_storage, "storage"))
+ self.list.append((_("Goto 0"), self.positioner_goto0, "goto0"))
- def __init__(self, feid = 0):
- self.ready = False
- self.feid = feid
- 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:
- self.ready = True
- else:
- print "getFrontend failed"
- else:
- print "getRawChannel failed"
- else:
- print "getResourceManager instance failed"
-
- def getFrontend(self):
- return self.frontend
-
+ def __init__(self, frontend):
+ self.frontend = frontend
+
- if currentConfigSelectionElement(config.tuning.type) == "manual_transponder":
- self.list.append(getConfigListEntry(_('Frequency'), config.scan.sat.frequency))
- self.list.append(getConfigListEntry(_('Inversion'), config.scan.sat.inversion))
- self.list.append(getConfigListEntry(_('Symbol Rate'), config.scan.sat.symbolrate))
- self.list.append(getConfigListEntry(_("Polarity"), config.scan.sat.polarization))
- self.list.append(getConfigListEntry(_("FEC"), config.scan.sat.fec))
- elif currentConfigSelectionElement(config.tuning.type) == "predefined_transponder":
- self.list.append(getConfigListEntry(_("Transponder"), config.tuning.transponder))
+ if tuning.type.value == "manual_transponder":
+ 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))
+ elif tuning.type.value == "predefined_transponder":
+ self.list.append(getConfigListEntry(_("Transponder"), tuning.transponder))
- def createConfig(self):
- config.tuning = ConfigSubsection()
-
- config.tuning.type = configElement_nonSave("config.tuning.type", configSelection, 0, (("manual_transponder", _("Manual transponder")), ("predefined_transponder", _("Predefined satellite"))))
-
- config.tuning.sat = configElement_nonSave("config.tuning.sat", configSatlist, 192, nimmanager.getRotorSatListForNim(self.feid))
- ScanSetup.createConfig(self)
- self.updateSats()
-
- def updateSats(self):
- satnum = config.tuning.sat.value
- satlist = config.tuning.sat.vals
- if len(satlist):
- transponderlist = nimmanager.getTransponders(satlist[satnum][1])
- list = []
+ def createConfig(self, foo):
+ global tuning
+ if not tuning:
+ tuning = ConfigSubsection()
+ tuning.type = ConfigSelection(
+ default = "manual_transponder",
+ choices = { "manual_transponder" : _("Manual transponder"),
+ "predefined_transponder" : _("Predefined transponder") } )
+ tuning.sat = ConfigSatlist(list=nimmanager.getRotorSatListForNim(self.feid))
+ tuning.sat.addNotifier(self.tuningSatChanged)
+ self.updateTransponders()
+ TunerScreenConfigCreated = True
+ ScanSetup.createConfig(self, None)
+
+ def tuningSatChanged(self, *parm):
+ self.updateTransponders()
+
+ def updateTransponders(self):
+ if len(tuning.sat.choices):
+ transponderlist = nimmanager.getTransponders(int(tuning.sat.value))
+ tps = []
+ cnt=0
- returnvalue = (0, 0, 0, 0, 0, 0, 0)
- satpos = config.tuning.sat.vals[config.tuning.sat.value][1]
- if currentConfigSelectionElement(config.tuning.type) == "manual_transponder":
- returnvalue = (config.scan.sat.frequency.value[0], config.scan.sat.symbolrate.value[0], config.scan.sat.polarization.value, config.scan.sat.fec.value, config.scan.sat.inversion.value, satpos)
- elif currentConfigSelectionElement(config.tuning.type) == "predefined_transponder":
- transponder = nimmanager.getTransponders(config.tuning.sat.vals[config.tuning.sat.value][1])[config.tuning.transponder.value]
- returnvalue = (int(transponder[1] / 100), int(transponder[2] / 1000), transponder[3], transponder[4], 2, config.tuning.sat.vals[config.tuning.sat.value][1], satpos)
+ returnvalue = (0, 0, 0, 0, 0, 0)
+ satpos = int(tuning.sat.value)
+ if 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 tuning.type.value == "predefined_transponder":
+ transponder = nimmanager.getTransponders(satpos)[tuning.transponder.index]
+ returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, satpos)
- session.open(MessageBox, _("No tuner is configured for use with a diseqc positioner!"), MessageBox.TYPE_ERROR)
+ usableNims = []
+ for x in nimList:
+ configured_rotor_sats = nimmanager.getRotorSatListForNim(x)
+ if len(configured_rotor_sats) != 0:
+ usableNims.append(x)
+ if len(usableNims) == 1:
+ session.open(PositionerSetup, usableNims[0])
+ elif len(usableNims) > 1:
+ session.open(NimSelection)
+ else:
+ session.open(MessageBox, _("No tuner is configured for use with a diseqc positioner!"), MessageBox.TYPE_ERROR)
+
+def PositionerSetupStart(menuid, **kwargs):
+ if menuid == "scan":
+ return [(_("Positioner setup"), PositionerMain, "positioner_setup", None)]
+ else:
+ return []