X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/96e58d2b58fa6b5712857ed01dfbeb770fe6c6d3..0855ea4ed4197c0fc6a8f8fff5820741d80c6d41:/lib/python/Components/NimManager.py diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 794cd80d..c5a294ed 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -44,9 +44,11 @@ class SecConfigure: sec.addLNB() tunermask = 1 << slotid if self.equal.has_key(slotid): - tunermask |= (1 << self.equal[slotid]) + for slot in self.equal[slotid]: + tunermask |= (1 << slot) elif self.linked.has_key(slotid): - tunermask |= (1 << self.linked[slotid]) + for slot in self.linked[slotid]: + tunermask |= (1 << slot) sec.setLNBLOFL(9750000) sec.setLNBLOFH(10600000) sec.setLNBThreshold(11700000) @@ -84,7 +86,7 @@ class SecConfigure: sec.setVoltageMode(0) sec.setToneMode(0) sec.setRotorPosNum(0) # USALS - + sec.setLNBSlotMask(tunermask) def setSatposDepends(self, sec, nim1, nim2): @@ -94,6 +96,15 @@ class SecConfigure: def linkNIMs(self, sec, nim1, nim2): print "link tuner", nim1, "to tuner", nim2 sec.setTunerLinked(nim1, nim2) + + def getRoot(self, slotid, connto): + visited = [] + while (self.NimManager.getNimConfig(connto).configMode.value in ["satposdepends", "equal", "loopthrough"]): + connto = int(self.NimManager.getNimConfig(connto).connectedTo.value) + if connto in visited: # prevent endless loop + return slotid + visited.append(connto) + return connto def update(self): sec = secClass.getInstance() @@ -121,20 +132,30 @@ class SecConfigure: # save what nim we link to/are equal to/satposdepends to. # this is stored in the *value* (not index!) of the config list if nim.configMode.value == "equal": - self.equal[int(nim.connectedTo.value)]=x + connto = self.getRoot(x, int(nim.connectedTo.value)) + if not self.equal.has_key(connto): + self.equal[connto] = [] + self.equal[connto].append(x) elif nim.configMode.value == "loopthrough": self.linkNIMs(sec, x, int(nim.connectedTo.value)) - self.linked[int(nim.connectedTo.value)]=x + connto = self.getRoot(x, int(nim.connectedTo.value)) + if not self.linked.has_key(connto): + self.linked[connto] = [] + self.linked[connto].append(x) elif nim.configMode.value == "satposdepends": self.setSatposDepends(sec, x, int(nim.connectedTo.value)) - self.satposdepends[int(nim.connectedTo.value)]=x + connto = self.getRoot(x, int(nim.connectedTo.value)) + if not self.satposdepends.has_key(connto): + self.satposdepends[connto] = [] + self.satposdepends[connto].append(x) + for slot in nim_slots: x = slot.slot nim = slot.config if slot.isCompatible("DVB-S"): print "slot: " + str(x) + " configmode: " + str(nim.configMode.value) - print "diseqcmode: ", nim.configMode.value + print "diseqcmode: ", nim.diseqcMode.value if nim.configMode.value in [ "loopthrough", "satposdepends", "nothing" ]: pass else: @@ -206,9 +227,11 @@ class SecConfigure: tunermask = 1 << slotid if self.equal.has_key(slotid): - tunermask |= (1 << self.equal[slotid]) + for slot in self.equal[slotid]: + tunermask |= (1 << slot) elif self.linked.has_key(slotid): - tunermask |= (1 << self.linked[slotid]) + for slot in self.linked[slotid]: + tunermask |= (1 << slot) if currLnb.lof.value == "universal_lnb": sec.setLNBLOFL(9750000) @@ -604,10 +627,15 @@ class NimManager: slots.append(self.nim_slots[slotid].internallyConnectableTo()) for type in self.nim_slots[slotid].connectableTo(): for slot in self.getNimListOfType(type, exception = slotid): - # FIXME we restrict loopthrough from dvb-s2 to dvb-s, because the c++ part can't handle it - if not (type == "DVB-S" and self.getNimType(slot)): - if self.hasOutputs(slot): - slots.append(slot) + if self.hasOutputs(slot): + slots.append(slot) + # remove nims, that have a conntectedTo reference on + for testnim in slots[:]: + for nim in self.getNimListOfType("DVB-S", slotid): + nimConfig = self.getNimConfig(nim) + if nimConfig.content.items.has_key("configMode") and nimConfig.configMode.value == "loopthrough" and int(nimConfig.connectedTo.value) == testnim: + slots.remove(testnim) + break slots.sort() return slots @@ -749,7 +777,7 @@ def InitSecParams(): x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MOTOR_CMD, configElement.value)) config.sec.delay_after_voltage_change_before_motor_command = x - x = ConfigInteger(default=120, limits = (0, 9999)) + x = ConfigInteger(default=360, limits = (0, 9999)) x.addNotifier(lambda configElement: secClass.setParam(secClass.MOTOR_RUNNING_TIMEOUT, configElement.value)) config.sec.motor_running_timeout = x @@ -787,23 +815,23 @@ def InitNimManager(nimmgr): choices["satposdepends"] = _("second cable of motorized LNB") if len(nimmgr.canConnectTo(x)) > 0: choices["loopthrough"] = _("loopthrough to") - nim.configMode = ConfigSelection(choices = choices, default = "simple") + nim.configMode = ConfigSelection(choices = choices, default = "nothing") #important - check if just the 2nd one is LT only and the first one is DVB-S # CHECKME: is this logic correct for >2 slots? - if nim.configMode.value in ["loopthrough", "satposdepends", "equal"]: - if x == 0: # first one can never be linked to anything - # reset to simple - nim.configMode.value = "simple" - nim.configMode.save() - else: +# if nim.configMode.value in ["loopthrough", "satposdepends", "equal"]: +# if x == 0: # first one can never be linked to anything +# # reset to simple +# nim.configMode.value = "simple" +# nim.configMode.save() +# else: #FIXME: make it better - for y in nimmgr.nim_slots: - if y.slot == 0: - if not y.isCompatible("DVB-S"): - # reset to simple - nim.configMode.value = "simple" - nim.configMode.save() + for y in nimmgr.nim_slots: + if y.slot == 0: + if not y.isCompatible("DVB-S"): + # reset to simple + nim.configMode.value = "simple" + nim.configMode.save() nim.diseqcMode = ConfigSelection( choices = [ @@ -817,7 +845,7 @@ def InitNimManager(nimmgr): choices = [] for id in nimmgr.getNimListOfType("DVB-S"): if id != x: - choices.append((str(id), str(chr(65 + id)))) + choices.append((str(id), nimmgr.getNimDescription(id))) nim.connectedTo = ConfigSelection(choices = choices) nim.diseqcA = getConfigSatlist(192, nimmgr.satList) nim.diseqcB = getConfigSatlist(130, nimmgr.satList)