X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/96e58d2b58fa6b5712857ed01dfbeb770fe6c6d3..5be5939082cfcef843e668bc1cbfb67f5451ef55:/lib/python/Components/NimManager.py diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index 794cd80d..72303af7 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 @@ -644,6 +672,12 @@ class NimManager: def getNimConfig(self, slotid): return config.Nims[slotid] + + def getSatName(self, pos): + for sat in self.satList: + if sat[0] == pos: + return sat[1] + return _("N/A") def getSatList(self): return self.satList @@ -651,40 +685,44 @@ class NimManager: def getSatListForNim(self, slotid): list = [] if self.nim_slots[slotid].isCompatible("DVB-S"): + nim = config.Nims[slotid] #print "slotid:", slotid #print "self.satellites:", self.satList[config.Nims[slotid].diseqcA.index] #print "diseqcA:", config.Nims[slotid].diseqcA.value - configMode = config.Nims[slotid].configMode.value + configMode = nim.configMode.value if configMode == "equal": - slotid=0 #FIXME add handling for more than two tuners !!! - configMode = config.Nims[slotid].configMode.value + slotid = int(nim.connectedTo.value) + nim = config.Nims[slotid] + configMode = nim.configMode.value + elif configMode == "loopthrough": + slotid = self.sec.getRoot(slotid, int(nim.connectedTo.value)) + nim = config.Nims[slotid] + configMode = nim.configMode.value if configMode == "simple": - dm = config.Nims[slotid].diseqcMode.value + dm = nim.diseqcMode.value if dm in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: - list.append(self.satList[config.Nims[slotid].diseqcA.index]) + list.append(self.satList[nim.diseqcA.index]) if dm in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]: - list.append(self.satList[config.Nims[slotid].diseqcB.index]) + list.append(self.satList[nim.diseqcB.index]) if dm == "diseqc_a_b_c_d": - list.append(self.satList[config.Nims[slotid].diseqcC.index]) - list.append(self.satList[config.Nims[slotid].diseqcD.index]) + list.append(self.satList[nim.diseqcC.index]) + list.append(self.satList[nim.diseqcD.index]) if dm == "positioner": for x in self.satList: list.append(x) elif configMode == "advanced": for x in self.satList: - if int(config.Nims[slotid].advanced.sat[x[0]].lnb.value) != 0: + if int(nim.advanced.sat[x[0]].lnb.value) != 0: list.append(x) - return list def getRotorSatListForNim(self, slotid): list = [] if self.nim_slots[slotid].isCompatible("DVB-S"): #print "slotid:", slotid - #print "self.satellites:", self.satList[config.Nims[slotid].diseqcA.value] #print "diseqcA:", config.Nims[slotid].diseqcA.value configMode = config.Nims[slotid].configMode.value @@ -725,6 +763,10 @@ def InitSecParams(): x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_TONEBURST, configElement.value)) config.sec.delay_after_toneburst = x + x = ConfigInteger(default=20, limits = (0, 9999)) + x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS, configElement.value)) + config.sec.delay_after_change_voltage_before_switch_command = x + x = ConfigInteger(default=200, limits = (0, 9999)) x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS, configElement.value)) config.sec.delay_after_enable_voltage_before_switch_command = x @@ -733,7 +775,7 @@ def InitSecParams(): x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_BETWEEN_SWITCH_AND_MOTOR_CMD, configElement.value)) config.sec.delay_between_switch_and_motor_command = x - x = ConfigInteger(default=150, limits = (0, 9999)) + x = ConfigInteger(default=500, limits = (0, 9999)) x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_MEASURE_IDLE_INPUTPOWER, configElement.value)) config.sec.delay_after_voltage_change_before_measure_idle_inputpower = x @@ -741,15 +783,15 @@ def InitSecParams(): x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_MOTOR_CMD, configElement.value)) config.sec.delay_after_enable_voltage_before_motor_command = x - x = ConfigInteger(default=150, limits = (0, 9999)) + x = ConfigInteger(default=500, limits = (0, 9999)) x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_MOTOR_STOP_CMD, configElement.value)) config.sec.delay_after_motor_stop_command = x - x = ConfigInteger(default=150, limits = (0, 9999)) + x = ConfigInteger(default=500, limits = (0, 9999)) 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 @@ -757,10 +799,6 @@ def InitSecParams(): x.addNotifier(lambda configElement: secClass.setParam(secClass.MOTOR_COMMAND_RETRIES, configElement.value)) config.sec.motor_command_retries = x - x = ConfigInteger(default=20, limits = (0, 9999)) - x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS, configElement.value)) - config.sec.delay_after_change_voltage_before_switch_command = x - # TODO add support for satpos depending nims to advanced nim configuration # so a second/third/fourth cable from a motorized lnb can used behind a # diseqc 1.0 / diseqc 1.1 / toneburst switch @@ -787,23 +825,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 +855,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)