X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FScreens%2FSatconfig.py;h=564541ba1c0dcd9b5e375d3d4b4d4f876282343b;hp=047bde2321965fda1ef56ad410529753141d5ee4;hb=HEAD;hpb=4aec730b6eb5eaac23a7eab69678ce13bd45a0a3 diff --git a/lib/python/Screens/Satconfig.py b/lib/python/Screens/Satconfig.py index 047bde2..564541b 100644 --- a/lib/python/Screens/Satconfig.py +++ b/lib/python/Screens/Satconfig.py @@ -1,4 +1,4 @@ -from enigma import eDVBDB +from enigma import eDVBDB, getLinkedSlotID, isFBCLink from Screen import Screen from Components.SystemInfo import SystemInfo from Components.ActionMap import ActionMap @@ -15,6 +15,9 @@ from Screens.ServiceStopScreen import ServiceStopScreen from time import mktime, localtime from datetime import datetime +from Components.PluginComponent import plugins +from Plugins.Plugin import PluginDescriptor + class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): def createSimpleSetup(self, list, mode): nim = self.nimConfig @@ -58,7 +61,7 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): def createConfigMode(self): if self.nim.isCompatible("DVB-S"): - choices = { "nothing": _("nothing connected"), + choices = { "nothing": _("not configured"), "simple": _("simple"), "advanced": _("advanced")} #if len(nimmanager.getNimListOfType(nimmanager.getNimType(self.slotid), exception = x)) > 0: @@ -70,6 +73,9 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): choices["satposdepends"] = _("second cable of motorized LNB") if len(nimmanager.canConnectTo(self.slotid)) > 0: choices["loopthrough"] = _("loopthrough to") + if isFBCLink(self.nim.slot): + choices = { "nothing": _("not configured"), + "advanced": _("advanced")} self.nimConfig.configMode.setChoices(choices, default = "nothing") def createSetup(self): @@ -95,6 +101,8 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): self.advancedType = None self.advancedManufacturer = None self.advancedSCR = None + self.advancedDiction = None + self.advancedConnected = None if self.nim.isMultiType(): multiType = self.nimConfig.multiType @@ -205,14 +213,15 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \ self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \ self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \ - self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, \ + self.advancedType, self.advancedSCR, self.advancedDiction, self.advancedManufacturer, self.advancedUnicable, self.advancedConnected, \ self.uncommittedDiseqcCommand, self.cableScanType, self.multiType) if self["config"].getCurrent() == self.multiType: - nimmanager.enumerateNIMs() + update_slots = [self.slotid] from Components.NimManager import InitNimManager - InitNimManager(nimmanager) + InitNimManager(nimmanager, update_slots) self.nim = nimmanager.nim_slots[self.slotid] self.nimConfig = self.nim.config + for x in checkList: if self["config"].getCurrent() == x: self.createSetup() @@ -235,7 +244,7 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): def fillListWithAdvancedSatEntrys(self, Sat): lnbnum = int(Sat.lnb.value) currLnb = self.nimConfig.advanced.lnb[lnbnum] - + diction = None if isinstance(currLnb, ConfigNothing): currLnb = None @@ -244,6 +253,10 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): self.list.append(self.advancedLnbsEntry) if currLnb: + if isFBCLink(self.nim.slot): + if currLnb.lof.value != "unicable": + currLnb.lof.value = "unicable" + self.list.append(getConfigListEntry(_("Priority"), currLnb.prio)) self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof) self.list.append(self.advancedLof) @@ -257,40 +270,73 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable) self.list.append(self.advancedUnicable) if currLnb.unicable.value == "unicable_user": - self.advancedSCR = getConfigListEntry(_("Channel"), currLnb.satcruser) + self.advancedDiction = getConfigListEntry(_("Diction"), currLnb.dictionuser) + self.list.append(self.advancedDiction) + + if currLnb.dictionuser.value == "EN50494": + satcr = currLnb.satcruserEN50494 + stcrvco = currLnb.satcrvcouserEN50494[currLnb.satcruserEN50494.index] + elif currLnb.dictionuser.value == "EN50607": + satcr = currLnb.satcruserEN50607 + stcrvco = currLnb.satcrvcouserEN50607[currLnb.satcruserEN50607.index] + + self.advancedSCR = getConfigListEntry(_("Channel"), satcr) self.list.append(self.advancedSCR) - self.list.append(getConfigListEntry(_("Frequency"), currLnb.satcrvcouser[currLnb.satcruser.index])) + self.list.append(getConfigListEntry(_("Frequency"), stcrvco)) + self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl)) self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh)) self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold)) elif currLnb.unicable.value == "unicable_matrix": manufacturer_name = currLnb.unicableMatrixManufacturer.value manufacturer = currLnb.unicableMatrix[manufacturer_name] +# if "product" in manufacturer.content: product_name = manufacturer.product.value self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer) - self.advancedType = getConfigListEntry(_("Type"), manufacturer.product) - self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name]) self.list.append(self.advancedManufacturer) - self.list.append(self.advancedType) - self.list.append(self.advancedSCR) - self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) + if product_name in manufacturer.scr: + diction = manufacturer.diction[product_name].value + self.advancedType = getConfigListEntry(_("Type"), manufacturer.product) + self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name]) + self.list.append(self.advancedType) + self.list.append(self.advancedSCR) + self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) elif currLnb.unicable.value == "unicable_lnb": manufacturer_name = currLnb.unicableLnbManufacturer.value manufacturer = currLnb.unicableLnb[manufacturer_name] +# if "product" in manufacturer.content: product_name = manufacturer.product.value self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer) - self.advancedType = getConfigListEntry(_("Type"), manufacturer.product) - self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name]) self.list.append(self.advancedManufacturer) - self.list.append(self.advancedType) - self.list.append(self.advancedSCR) - self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) + if product_name in manufacturer.scr: + diction = manufacturer.diction[product_name].value + self.advancedType = getConfigListEntry(_("Type"), manufacturer.product) + self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name]) + self.list.append(self.advancedType) + self.list.append(self.advancedSCR) + self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) + + choices = [] + connectable = nimmanager.canConnectTo(self.slotid) + for id in connectable: + choices.append((str(id), nimmanager.getNimDescription(id))) + if len(choices): + if isFBCLink(self.nim.slot): + if self.nimConfig.advanced.unicableconnected.value != True: + self.nimConfig.advanced.unicableconnected.value = True + + self.advancedConnected = getConfigListEntry(_("connected"), self.nimConfig.advanced.unicableconnected) + self.list.append(self.advancedConnected) + if self.nimConfig.advanced.unicableconnected.value == True: + self.nimConfig.advanced.unicableconnectedTo.setChoices(choices) + self.list.append(getConfigListEntry(_("Connected to"),self.nimConfig.advanced.unicableconnectedTo)) + else: #kein Unicable self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage)) self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage)) self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode)) - if lnbnum < 33: + if lnbnum < 65 and diction !="EN50607": self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode) self.list.append(self.advancedDiseqcMode) if currLnb.diseqcMode.value != "none": @@ -354,16 +400,51 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): self.fillListWithAdvancedSatEntrys(Sat) self["config"].list = self.list + def checkLoopthrough(self): + if self.nimConfig.configMode.value == "loopthrough": + loopthrough_count = 0 + dvbs_slots = nimmanager.getNimListOfType('DVB-S') + dvbs_slots_len = len(dvbs_slots) + + for x in dvbs_slots: + try: + nim_slot = nimmanager.nim_slots[x] + if nim_slot == self.nimConfig: + self_idx = x + if nim_slot.config.configMode.value == "loopthrough": + loopthrough_count += 1 + except: pass + if loopthrough_count >= dvbs_slots_len: + return False + + self.slot_dest_list = [] + def checkRecursiveConnect(slot_id): + if slot_id in self.slot_dest_list: + return False + self.slot_dest_list.append(slot_id) + slot_config = nimmanager.nim_slots[slot_id].config + if slot_config.configMode.value == "loopthrough": + return checkRecursiveConnect(int(slot_config.connectedTo.value)) + return True + + return checkRecursiveConnect(self.slotid) + def keySave(self): + if not self.checkLoopthrough(): + self.session.open(MessageBox, _("The loopthrough setting is wrong."),MessageBox.TYPE_ERROR,timeout=10) + return + old_configured_sats = nimmanager.getConfiguredSats() self.run() new_configured_sats = nimmanager.getConfiguredSats() self.unconfed_sats = old_configured_sats - new_configured_sats self.satpos_to_remove = None - self.restoreService(_("Zap back to service before tuner setup?")) self.deleteConfirmed((None, "no")) def deleteConfirmed(self, confirmed): + if confirmed is None: + confirmed = (None, "no") + if confirmed[1] == "yes" or confirmed[1] == "yestoall": eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove) @@ -390,7 +471,9 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): if confirmed[1] == "yestoall" or confirmed[1] == "notoall": self.deleteConfirmed(confirmed) break - + else: + self.restoreService(_("Zap back to service before tuner setup?")) + def __init__(self, session, slotid): Screen.__init__(self, session) self.list = [ ] @@ -414,10 +497,22 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): self.createSetup() def keyLeft(self): + if isFBCLink(self.nim.slot): + checkList = (self.advancedLof, self.advancedConnected) + curEntry = self["config"].getCurrent() + if curEntry in checkList: + return + ConfigListScreen.keyLeft(self) self.newConfig() def keyRight(self): + if isFBCLink(self.nim.slot): + checkList = (self.advancedLof, self.advancedConnected) + curEntry = self["config"].getCurrent() + if curEntry in checkList: + return + ConfigListScreen.keyRight(self) self.newConfig() @@ -452,13 +547,14 @@ class NimSetup(Screen, ConfigListScreen, ServiceStopScreen): if type(self["config"].getCurrent()[1]) is ConfigSatlist: self["config"].getCurrent()[1].setValue("3601") self["config"].invalidateCurrent() - + class NimSelection(Screen): def __init__(self, session): Screen.__init__(self, session) self.list = [None] * nimmanager.getSlotCount() self["nimlist"] = List(self.list) + self.loadFBCLinks() self.updateList() self.setResultClass() @@ -468,6 +564,22 @@ class NimSelection(Screen): "ok": self.okbuttonClick , "cancel": self.close }, -2) + + def loadFBCLinks(self): + for x in nimmanager.nim_slots: + slotid = x.slot + nimConfig = nimmanager.getNimConfig(x.slot) + configMode = nimConfig.configMode.value + if self.showNim(x): + if x.isCompatible("DVB-S"): + if isFBCLink(x.slot) and configMode != "advanced": + link = getLinkedSlotID(x.slot) + + if link == -1: + nimConfig.configMode.value = "nothing" + else: + nimConfig.configMode.value = "loopthrough" + nimConfig.connectedTo.value = str(link) def setResultClass(self): self.resultclass = NimSetup @@ -475,8 +587,17 @@ class NimSelection(Screen): def okbuttonClick(self): nim = self["nimlist"].getCurrent() nim = nim and nim[3] - if nim is not None and not nim.empty: - self.session.openWithCallback(self.updateList, self.resultclass, nim.slot) + + nimConfig = nimmanager.getNimConfig(nim.slot) + if isFBCLink(nim.slot) and nimConfig.configMode.value == "loopthrough": + return + + if nim is not None and not nim.empty and nim.isSupported(): + self.session.openWithCallback(self.NimSetupCB, self.resultclass, nim.slot) + + def NimSetupCB(self): + self.loadFBCLinks() + self.updateList() def showNim(self, nim): return True @@ -493,22 +614,30 @@ class NimSelection(Screen): text = { "loopthrough": _("loopthrough to"), "equal": _("equal to"), "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value] - text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)] + text += " " + _("Tuner") + " " + chr(ord('A')+int(nimConfig.connectedTo.value)) elif nimConfig.configMode.value == "nothing": - text = _("nothing connected") + text = _("not configured") elif nimConfig.configMode.value == "simple": if nimConfig.diseqcMode.value in ("single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"): - text = _("Sats") + ": " + text = {"single": _("Single"), "toneburst_a_b": _("Toneburst A/B"), "diseqc_a_b": _("DiSEqC A/B"), "diseqc_a_b_c_d": _("DiSEqC A/B/C/D")}[nimConfig.diseqcMode.value] + "\n" + text += _("Sats") + ": " + satnames = [] if nimConfig.diseqcA.orbital_position != 3601: - text += nimmanager.getSatName(int(nimConfig.diseqcA.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcA.value))) if nimConfig.diseqcMode.value in ("toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"): if nimConfig.diseqcB.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcB.value))) if nimConfig.diseqcMode.value == "diseqc_a_b_c_d": if nimConfig.diseqcC.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcC.value))) if nimConfig.diseqcD.orbital_position != 3601: - text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value)) + satnames.append(nimmanager.getSatName(int(nimConfig.diseqcD.value))) + if len(satnames) <= 2: + text += ", ".join(satnames) + elif len(satnames) > 2: + # we need a newline here, since multi content lists don't support automtic line wrapping + text += ", ".join(satnames[:2]) + ",\n" + text += " " + ", ".join(satnames[2:]) elif nimConfig.diseqcMode.value == "positioner": text = _("Positioner") + ":" if nimConfig.positionerMode.value == "usals": @@ -519,6 +648,8 @@ class NimSelection(Screen): text = _("simple") elif nimConfig.configMode.value == "advanced": text = _("advanced") + if isFBCLink(x.slot) and nimConfig.configMode.value != "advanced": + text += _("\n") elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"): if nimConfig.configMode.value == "nothing": text = _("nothing connected") @@ -526,7 +657,10 @@ class NimSelection(Screen): text = _("enabled") if x.isMultiType(): text = _("Switchable tuner types:") + "(" + ','.join(x.getMultiTypeList().values()) + ")" + "\n" + text + if not x.isSupported(): + text = _("tuner is not supported") self.list.append((slotid, x.friendly_full_description, text, x)) self["nimlist"].setList(self.list) self["nimlist"].updateList(self.list) +