from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBResourceManagerPtr, iDVBChannelPtr, iDVBFrontendPtr, iDVBFrontend, eDVBFrontendParametersSatellite, eDVBFrontendParameters
from Screens.Screen import Screen
from Screens.ScanSetup import ScanSetup
from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBResourceManagerPtr, iDVBChannelPtr, iDVBFrontendPtr, iDVBFrontend, eDVBFrontendParametersSatellite, eDVBFrontendParameters
from Screens.Screen import Screen
from Screens.ScanSetup import ScanSetup
- <widget name="red" position="0,120" size="140,80" backgroundColor="red" halign="center" valign="center" font="Regular;21" />
- <widget name="green" position="140,120" size="140,80" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
- <widget name="yellow" position="280,120" size="140,80" backgroundColor="yellow" halign="center" valign="center" font="Regular;21" />
- <widget name="blue" position="420,120" 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["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, 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.statusTimer.start(200, False)
-
+ self.statusTimer.start(50, False)
+
+ 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 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:
+ 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.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(_("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"))))
+ def createConfig(self, foo):
+ if not tuning:
+ global 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
+ for x in transponderlist:
+ if x[3] == 0:
+ pol = "H"
+ elif x[3] == 1:
+ pol = "V"
+ elif x[3] == 2:
+ pol = "CL"
+ elif x[3] == 3:
+ pol = "CR"
+ if x[4] == 0:
+ fec = "FEC_AUTO"
+ elif x[4] == 1:
+ fec = "FEC_1_2"
+ elif x[4] == 2:
+ fec = "FEC_2_3"
+ elif x[4] == 3:
+ fec = "FEC_3_4"
+ elif x[4] == 4:
+ 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_None"
+ tps.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
+ tuning.transponder = ConfigSelection(choices=tps)
- config.tuning.sat = configElement_nonSave("config.tuning.sat", configSatlist, 192, nimmanager.getSatListForNim(self.feid))
- ScanSetup.createConfig(self)
- self.updateSats()
-
- def updateSats(self):
- transponderlist = nimmanager.getTransponders(config.tuning.sat.vals[config.tuning.sat.value][1])
- list = []
- for x in transponderlist:
- if x[3] == 0:
- pol = "H"
- elif x[3] == 1:
- pol = "V"
- elif x[3] == 2:
- pol = "CL"
- elif x[3] == 3:
- pol = "CR"
- if x[4] == 0:
- fec = "FEC_AUTO"
- elif x[4] == 1:
- fec = "FEC_1_2"
- elif x[4] == 2:
- fec = "FEC_2_3"
- elif x[4] == 3:
- fec = "FEC_3_4"
- elif x[4] == 4:
- 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_None"
- list.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
- config.tuning.transponder = configElement_nonSave("config.tuning.transponder", configSelection, 0, list)
-
- 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)
- 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 = 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)
+class NimSelection(Screen):
+ skin = """
+ <screen position="140,165" size="400,100" title="select Slot">
+ <widget name="nimlist" position="20,10" size="360,75" />
+ </screen>"""
+
+ def __init__(self, session):
+ Screen.__init__(self, session)
+
+ nimlist = nimmanager.getNimListOfType(nimmanager.nimType["DVB-S"])
+ nimMenuList = []
+ for x in nimlist:
+ nimMenuList.append((_("NIM ") + (["A", "B", "C", "D"][x]) + ": " + nimmanager.getNimName(x) + " (" + nimmanager.getNimTypeName(x) + ")", x))
+
+ self["nimlist"] = MenuList(nimMenuList)
+
+ self["actions"] = ActionMap(["OkCancelActions"],
+ {
+ "ok": self.okbuttonClick ,
+ "cancel": self.close
+ }, -1)
+
+ def okbuttonClick(self):
+ selection = self["nimlist"].getCurrent()
+ self.session.open(PositionerSetup, selection[1])
+
- session.open(PositionerSetup)
+ nimList = nimmanager.getNimListOfType(nimmanager.nimType["DVB-S"])
+ if len(nimList) == 0:
+ session.open(MessageBox, _("No positioner capable frontend found."), MessageBox.TYPE_ERROR)
+ else:
+ if session.nav.RecordTimer.isRecording():
+ session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to configure the positioner."), MessageBox.TYPE_ERROR)
+ else:
+ 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):
+ if menuid == "scan":
+ return [("Positioner setup", PositionerMain)]
+ else:
+ return []