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)
sec.setVoltageMode(0)
sec.setToneMode(0)
sec.setRotorPosNum(0) # USALS
-
+
sec.setLNBSlotMask(tunermask)
def setSatposDepends(self, sec, nim1, nim2):
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()
# 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
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)
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
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
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)