X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FComponents%2FNimManager.py;h=017e57b820b107d34e53b03f029bb901a1f324e3;hp=bd1a3638c47ba484f6c9d511f48710ac8616f7b7;hb=HEAD;hpb=80c9ad7d8d0e709d8bed740481b46ff23654fcaa diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index bd1a363..017e57b 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -59,10 +59,10 @@ class SecConfigure: sec.setLNBLOFL(9750000) sec.setLNBLOFH(10600000) sec.setLNBThreshold(11700000) - sec.setLNBIncreasedVoltage(lnbParam.OFF) + sec.setLNBIncreasedVoltage(False) sec.setRepeats(0) sec.setFastDiSEqC(fastDiSEqC) - sec.setSeqRepeat(0) + sec.setSeqRepeat(False) sec.setCommandOrder(0) #user values @@ -118,8 +118,11 @@ class SecConfigure: def linkNIMs(self, sec, nim1, nim2): print "link tuner", nim1, "to tuner", nim2 - if nim2 == (nim1 - 1): - self.linkInternally(nim1) +# if nim2 == (nim1 - 1): +# self.linkInternally(nim1) +# +# for internally connect tuner A to B + self.linkInternally(nim1) sec.setTunerLinked(nim1, nim2) def getRoot(self, slotid, connto): @@ -150,7 +153,7 @@ class SecConfigure: for slot in nim_slots: if slot.type is not None: - used_nim_slots.append((slot.slot, slot.description, slot.config.configMode.value != "nothing" and True or False, slot.isCompatible("DVB-S2"), slot.frontend_id is None and -1 or slot.frontend_id)) + used_nim_slots.append((slot.slot, slot.description, slot.config.configMode.value != "nothing" and True or False, slot.isCompatible("DVB-S2"), slot.isCompatible("DVB-T2"), slot.isCompatible("DVB-S2X"), slot.frontend_id is None and -1 or slot.frontend_id)) eDVBResourceManager.getInstance().setFrontendSlotInformations(used_nim_slots) for slot in nim_slots: @@ -262,7 +265,7 @@ class SecConfigure: pass lnbSat = {} - for x in range(1,37): + for x in range(1,69): lnbSat[x] = [] #wildcard for all satellites ( for rotor ) @@ -279,12 +282,12 @@ class SecConfigure: print "add", x[0], "to", lnb lnbSat[lnb].append(x[0]) - for x in range(1,37): + for x in range(1,69): if len(lnbSat[x]) > 0: currLnb = config.Nims[slotid].advanced.lnb[x] sec.addLNB() - if x < 33: + if x < 65: sec.setLNBNum(x) tunermask = 1 << slotid @@ -307,24 +310,46 @@ class SecConfigure: manufacturer_name = configManufacturer.value manufacturer = ProductDict[manufacturer_name] product_name = manufacturer.product.value - sec.setLNBSatCR(manufacturer.scr[product_name].index) - sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000) - sec.setLNBSatCRpositions(manufacturer.positions[product_name][0].value) - sec.setLNBLOFL(manufacturer.lofl[product_name][0].value * 1000) - sec.setLNBLOFH(manufacturer.lofh[product_name][0].value * 1000) - sec.setLNBThreshold(manufacturer.loft[product_name][0].value * 1000) - configManufacturer.save_forced = True - manufacturer.product.save_forced = True - manufacturer.vco[product_name][manufacturer.scr[product_name].index].save_forced = True - + manufacturer_scr = manufacturer.scr + manufacturer_positions_value = manufacturer.positions[product_name][0].value + position_idx = (x-1) % manufacturer_positions_value + if product_name in manufacturer_scr: + diction = manufacturer.diction[product_name].value + if x <= manufacturer_positions_value or diction !="EN50607": #for every allowed position + sec.setLNBSatCR(manufacturer_scr[product_name].index) + + if diction =="EN50607": + sec.setLNBSatCRformat(1) #JESS + else: + sec.setLNBSatCRformat(0) #DiSEqC + sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer_scr[product_name].index].value*1000) + sec.setLNBSatCRpositions(manufacturer_positions_value) + sec.setLNBLOFL(manufacturer.lofl[product_name][position_idx].value * 1000) + sec.setLNBLOFH(manufacturer.lofh[product_name][position_idx].value * 1000) + sec.setLNBThreshold(manufacturer.loft[product_name][position_idx].value * 1000) + configManufacturer.save_forced = True + manufacturer.product.save_forced = True + manufacturer.vco[product_name][manufacturer_scr[product_name].index].save_forced = True + else: #positionnumber out of range + print "positionnumber out of range" + else: + print "no product in list" + if currLnb.unicable.value == "unicable_user": #TODO satpositions for satcruser + if currLnb.dictionuser.value == "EN50607": + sec.setLNBSatCRformat(1) + sec.setLNBSatCR(currLnb.satcruserEN50607.index) + sec.setLNBSatCRvco(currLnb.satcrvcouserEN50607[currLnb.satcruserEN50607.index].value*1000) + else: + sec.setLNBSatCRformat(0) + sec.setLNBSatCR(currLnb.satcruserEN50494.index) + sec.setLNBSatCRvco(currLnb.satcrvcouserEN50494[currLnb.satcruserEN50494.index].value*1000) + sec.setLNBLOFL(currLnb.lofl.value * 1000) sec.setLNBLOFH(currLnb.lofh.value * 1000) sec.setLNBThreshold(currLnb.threshold.value * 1000) - sec.setLNBSatCR(currLnb.satcruser.index) - sec.setLNBSatCRvco(currLnb.satcrvcouser[currLnb.satcruser.index].value*1000) - sec.setLNBSatCRpositions(1) #HACK + sec.setLNBSatCRpositions(64) #HACK elif currLnb.unicable.value == "unicable_matrix": setupUnicable(currLnb.unicableMatrixManufacturer, currLnb.unicableMatrix) elif currLnb.unicable.value == "unicable_lnb": @@ -344,9 +369,9 @@ class SecConfigure: # pass # nyi in drivers if currLnb.increased_voltage.value: - sec.setLNBIncreasedVoltage(lnbParam.ON) + sec.setLNBIncreasedVoltage(True) else: - sec.setLNBIncreasedVoltage(lnbParam.OFF) + sec.setLNBIncreasedVoltage(False) dm = currLnb.diseqcMode.value if dm == "none": @@ -449,8 +474,8 @@ class SecConfigure: # finally add the orbital positions for y in lnbSat[x]: self.addSatellite(sec, y) - if x > 32: - satpos = x > 32 and (3604-(36 - x)) or y + if x > 64: + satpos = x > 64 and (3604-(68 - x)) or y else: satpos = y currSat = config.Nims[slotid].advanced.sat[satpos] @@ -471,7 +496,7 @@ class SecConfigure: elif currSat.tonemode.value == "off": sec.setToneMode(switchParam.OFF) - if not currSat.usals.value and x < 34: + if not currSat.usals.value and x < 66: sec.setRotorPosNum(currSat.rotorposition.value) else: sec.setRotorPosNum(0) #USALS @@ -485,7 +510,7 @@ class NIM(object): def __init__(self, slot, type, description, has_outputs = True, internally_connectable = None, multi_type = {}, frontend_id = None, i2c = None, is_empty = False): self.slot = slot - if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", None): + if type not in ("DVB-S", "DVB-C", "DVB-T", "DVB-S2", "DVB-T2", "DVB-S2X", None): print "warning: unknown NIM type %s, not using." % type type = None @@ -497,30 +522,47 @@ class NIM(object): self.i2c = i2c self.frontend_id = frontend_id self.__is_empty = is_empty - - def isCompatible(self, what): - if not self.isSupported(): - return False - compatible = { + self.compatible = { None: (None,), "DVB-S": ("DVB-S", None), "DVB-C": ("DVB-C", None), "DVB-T": ("DVB-T", None), - "DVB-S2": ("DVB-S", "DVB-S2", None) + "DVB-S2": ("DVB-S", "DVB-S2", None), + "DVB-T2": ("DVB-T", "DVB-T2", None), + "DVB-S2X": ("DVB-S", "DVB-S2", "DVB-S2X", None), } - return what in compatible[self.type] - + def getType(self): + try: + if self.isMultiType(): + return self.multi_type[self.config.multiType.value] + except: + pass return self.type + + def isCompatible(self, what): + if not self.isSupported(): + return False + return what in self.compatible[self.getType()] + + def canBeCompatible(self, what): + if self.isCompatible(what): + return True + for type in self.getMultiTypeList().values(): + if what in self.compatible[type]: + return True + return False def connectableTo(self): connectable = { "DVB-S": ("DVB-S", "DVB-S2"), "DVB-C": ("DVB-C",), "DVB-T": ("DVB-T",), - "DVB-S2": ("DVB-S", "DVB-S2") + "DVB-S2": ("DVB-S", "DVB-S2"), + "DVB-T2": ("DVB-T", "DVB-T2",), + "DVB-S2X": ("DVB-S", "DVB-S2", "DVB-S2X"), } - return connectable[self.type] + return connectable[self.getType()] def getSlotName(self): # get a friendly description for a slot name. @@ -561,7 +603,16 @@ class NIM(object): # empty tuners are supported! def isSupported(self): return (self.frontend_id is not None) or self.__is_empty - + + def isMultistream(self): + multistream = self.frontend_id is not None and eDVBResourceManager.getInstance().frontendIsMultistream(self.frontend_id) or False + # HACK due to poor support for VTUNER_SET_FE_INFO + # When vtuner does not accept fe_info we have to fallback to detection using tuner name + # More tuner names will be added when confirmed as multistream (FE_CAN_MULTISTREAM) + if not multistream and "TBS" in self.description: + multistream = True + return multistream + # returns dict {: } def getMultiTypeList(self): return self.multi_type @@ -572,10 +623,12 @@ class NIM(object): return { "DVB-S": "DVB-S", "DVB-T": "DVB-T", - "DVB-S2": "DVB-S2", "DVB-C": "DVB-C", + "DVB-S2": "DVB-S2", + "DVB-T2": "DVB-T2", + "DVB-S2X": "DVB-S2X", None: _("empty") - }[self.type] + }[self.getType()] friendly_type = property(getFriendlyType) @@ -594,7 +647,7 @@ class NIM(object): friendly_full_description = property(getFriendlyFullDescription) config_mode = property(lambda self: config.Nims[self.slot].configMode.value) config = property(lambda self: config.Nims[self.slot]) - empty = property(lambda self: self.type is None) + empty = property(lambda self: self.getType() is None) class NimManager: def getConfiguredSats(self): @@ -754,19 +807,38 @@ class NimManager: entry["frontend_device"] = entry["internally_connectable"] = None if not (entry.has_key("multi_type")): entry["multi_type"] = {} + + # get MultiType from DTV_ENUM_DELSYS + if entry["frontend_device"] is not None: + types = [type for type in ["DVB-C", "DVB-T2", "DVB-T", "DVB-S2", "DVB-S", "ATSC", "DVB-S2X"] if eDVBResourceManager.getInstance().frontendIsCompatible(entry["frontend_device"], type)] + if "DVB-T2" in types and "DVB-T" in types: + # DVB-T2 implies DVB-T support + types.remove("DVB-T") + if "DVB-S2" in types and "DVB-S" in types: + # DVB-S2 implies DVB-S support + types.remove("DVB-S") + if "DVB-S2X" in types: + if "DVB-S" in types: + # DVB-S2X implies DVB-S support + types.remove("DVB-S") + if "DVB-S2" in types: + # DVB-S2X implies DVB-S2 support + types.remove("DVB-S2") + if len(types) > 1: + entry["multi_type"] = {} + for type in types: + entry["multi_type"][str(types.index(type))] = type + self.nim_slots.append(NIM(slot = id, description = entry["name"], type = entry["type"], has_outputs = entry["has_outputs"], internally_connectable = entry["internally_connectable"], multi_type = entry["multi_type"], frontend_id = entry["frontend_device"], i2c = entry["i2c"], is_empty = entry["isempty"])) def hasNimType(self, chktype): for slot in self.nim_slots: - if slot.isCompatible(chktype): + if slot.canBeCompatible(chktype): return True - for type in slot.getMultiTypeList().values(): - if chktype == type: - return True return False def getNimType(self, slotid): - return self.nim_slots[slotid].type + return self.nim_slots[slotid].getType() def getNimDescription(self, slotid): return self.nim_slots[slotid].friendly_full_description @@ -788,6 +860,9 @@ class NimManager: list.append(x.slot) return list + def isSupportMultistream(self, slotid): + return self.getNim(slotid).isMultistream() + def __init__(self): self.satList = [ ] self.cablesList = [] @@ -823,6 +898,10 @@ class NimManager: for slot in self.getNimListOfType(type, exception = slotid): if self.hasOutputs(slot): slots.append(slot) + + # remove duplicates from list + slots = list(set(slots)) + # remove nims, that have a conntectedTo reference on for testnim in slots[:]: for nim in self.getNimListOfType("DVB-S", slotid): @@ -830,6 +909,17 @@ class NimManager: if nimConfig.content.items.has_key("configMode") and nimConfig.configMode.value == "loopthrough" and int(nimConfig.connectedTo.value) == testnim: slots.remove(testnim) break + + if nimConfig.content.items.has_key("configMode") and nimConfig.configMode.value == "advanced": + try: + if (nimConfig.advanced.unicableconnected is not None) and (nimConfig.advanced.unicableconnected.value == True): + if int(nimConfig.advanced.unicableconnectedTo.value) == testnim: + slots.remove(testnim) + break + except: + pass + + slots.sort() return slots @@ -838,6 +928,10 @@ class NimManager: type = self.getNimType(slotid) if type == "DVB-S2": type = "DVB-S" + elif type == "DVB-T2": + type = "DVB-T" + elif type == "DVB-S2X": + type = "DVB-S" nimList = self.getNimListOfType(type, slotid) for nim in nimList[:]: mode = self.getNimConfig(nim) @@ -849,6 +943,10 @@ class NimManager: type = self.getNimType(slotid) if type == "DVB-S2": type = "DVB-S" + elif type == "DVB-T2": + type = "DVB-T" + elif type == "DVB-S2X": + type = "DVB-S" nimList = self.getNimListOfType(type, slotid) positionerList = [] for nim in nimList[:]: @@ -1059,7 +1157,7 @@ def InitSecParams(): # the C(++) part should can handle this # the configElement should be only visible when diseqc 1.2 is disabled -def InitNimManager(nimmgr): +def InitNimManager(nimmgr, update_slots = []): hw = HardwareInfo() addNimConfig = False try: @@ -1087,11 +1185,15 @@ def InitNimManager(nimmgr): root = doc.getroot() entry = root.find("lnb") + lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8","scr9","scr10", + "scr11","scr12","scr13","scr14","scr15","scr16","scr17","scr18","scr19","scr20", + "scr21","scr22","scr23","scr24","scr25","scr26","scr27","scr28","scr29","scr30", + "scr31","scr32") for manufacturer in entry.getchildren(): m={} for product in manufacturer.getchildren(): + p={} #new dict empty for new product scr=[] - lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8") for i in range(len(lscr)): scr.append(product.get(lscr[i],"0")) for i in range(len(lscr)): @@ -1099,21 +1201,36 @@ def InitNimManager(nimmgr): scr.pop() else: break; - lof=[] - lof.append(int(product.get("positions",1))) - lof.append(int(product.get("lofl",9750))) - lof.append(int(product.get("lofh",10600))) - lof.append(int(product.get("threshold",11700))) - scr.append(tuple(lof)) - m.update({product.get("name"):tuple(scr)}) + + p.update({"frequencies":tuple(scr)}) #add scr frequencies to dict product + + diction = product.get("format","EN50494").upper() + if diction =="JESS" or diction =="UNICABLE2" or diction =="SCD2" or diction =="EN50607": + diction = "EN50607" + else: + diction = "EN50494" + p.update({"diction":tuple([diction])}) #add diction to dict product + + positions=[] + positions.append(int(product.get("positions",1))) + for cnt in range(positions[0]): + lof=[] + lof.append(int(product.get("lofl",9750))) + lof.append(int(product.get("lofh",10600))) + lof.append(int(product.get("threshold",11700))) + positions.append(tuple(lof)) + + p.update({"positions":tuple(positions)}) #add positons to dict product. + + m.update({product.get("name"):p}) #add dict product to dict manufacturer unicablelnbproducts.update({manufacturer.get("name"):m}) entry = root.find("matrix") for manufacturer in entry.getchildren(): m={} for product in manufacturer.getchildren(): + p={} #new dict empty for new product scr=[] - lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8") for i in range(len(lscr)): scr.append(product.get(lscr[i],"0")) for i in range(len(lscr)): @@ -1121,14 +1238,29 @@ def InitNimManager(nimmgr): scr.pop() else: break; - lof=[] - lof.append(int(product.get("positions",1))) - lof.append(int(product.get("lofl",9750))) - lof.append(int(product.get("lofh",10600))) - lof.append(int(product.get("threshold",11700))) - scr.append(tuple(lof)) - m.update({product.get("name"):tuple(scr)}) - unicablematrixproducts.update({manufacturer.get("name"):m}) + + p.update({"frequencies":tuple(scr)}) #add scr frequencies to dict product + + diction = product.get("format","EN50494").upper() + if diction =="JESS" or diction =="UNICABLE2" or diction =="SCD2" or diction =="EN50607": + diction = "EN50607" + else: + diction = "EN50494" + p.update({"diction":tuple([diction])}) #add diction to dict product + + positions=[] + positions.append(int(product.get("positions",1))) + for cnt in range(positions[0]): + lof=[] + lof.append(int(product.get("lofl",9750))) + lof.append(int(product.get("lofh",10600))) + lof.append(int(product.get("threshold",11700))) + positions.append(tuple(lof)) + + p.update({"positions":tuple(positions)}) #add positons to dict product + + m.update({product.get("name"):p}) #add dict product to dict manufacturer + unicablematrixproducts.update({manufacturer.get("name"):m}) #add dict manufacturer to dict unicablematrixproducts UnicableLnbManufacturers = unicablelnbproducts.keys() UnicableLnbManufacturers.sort() @@ -1141,8 +1273,14 @@ def InitNimManager(nimmgr): "unicable_user": "Unicable "+_("User defined")} unicable_choices_default = "unicable_lnb" - advanced_lnb_satcruser_choices = [ ("1", "SatCR 1"), ("2", "SatCR 2"), ("3", "SatCR 3"), ("4", "SatCR 4"), - ("5", "SatCR 5"), ("6", "SatCR 6"), ("7", "SatCR 7"), ("8", "SatCR 8")] + advanced_lnb_satcr_user_choicesEN50494 = [("1", "SatCR 1"), ("2", "SatCR 2"), ("3", "SatCR 3"), ("4", "SatCR 4"), ("5", "SatCR 5"), ("6", "SatCR 6"), ("7", "SatCR 7"), ("8", "SatCR 8")] + + advanced_lnb_satcr_user_choicesEN50607 = [("1", "SatCR 1"), ("2", "SatCR 2"), ("3", "SatCR 3"), ("4", "SatCR 4"), ("5", "SatCR 5"), ("6", "SatCR 6"), ("7", "SatCR 7"), ("8", "SatCR 8"), + ("9", "SatCR 9"), ("10", "SatCR 10"), ("11", "SatCR 11"), ("12", "SatCR 12"), ("13", "SatCR 13"), ("14", "SatCR 14"), ("15", "SatCR 15"), ("16", "SatCR 16"), + ("17", "SatCR 17"), ("18", "SatCR 18"), ("19", "SatCR 19"), ("20", "SatCR 20"), ("21", "SatCR 21"), ("22", "SatCR 22"), ("23", "SatCR 23"), ("24", "SatCR 24"), + ("25", "SatCR 25"), ("26", "SatCR 26"), ("27", "SatCR 27"), ("28", "SatCR 28"), ("29", "SatCR 29"), ("30", "SatCR 30"), ("31", "SatCR 31"), ("32", "SatCR 32")] + + advanced_lnb_diction_user_choices = [("EN50494", "Unicable(EN50494)"), ("EN50607", "JESS(EN50607)")] prio_list = [ ("-1", _("Auto")) ] prio_list += [(str(prio), str(prio)) for prio in range(65)+range(14000,14065)+range(19000,19065)] @@ -1168,7 +1306,7 @@ def InitNimManager(nimmgr): advanced_satlist_choices = nimmgr.satList + [ (3601, _('All Satellites')+' 1', 1), (3602, _('All Satellites')+' 2', 1), (3603, _('All Satellites')+' 3', 1), (3604, _('All Satellites')+' 4', 1)] - advanced_lnb_choices = [("0", "not available")] + [(str(y), "LNB " + str(y)) for y in range(1, 33)] + advanced_lnb_choices = [("0", "not available")] + [(str(y), "LNB " + str(y)) for y in range(1, 65)] advanced_voltage_choices = [("polarization", _("Polarization")), ("13V", _("13 V")), ("18V", _("18 V"))] advanced_tonemode_choices = [("band", _("Band")), ("on", _("On")), ("off", _("Off"))] advanced_lnb_toneburst_choices = [("none", _("None")), ("A", _("A")), ("B", _("B"))] @@ -1193,81 +1331,127 @@ def InitNimManager(nimmgr): if isinstance(section.unicable, ConfigNothing): if lnb == 1: section.unicable = ConfigSelection(unicable_choices, unicable_choices_default) - elif lnb == 2: - section.unicable = ConfigSelection(choices = {"unicable_matrix": _("Unicable Martix"),"unicable_user": "Unicable "+_("User defined")}, default = "unicable_matrix") +# elif lnb == 2: else: - section.unicable = ConfigSelection(choices = {"unicable_user": _("User defined")}, default = "unicable_user") - - def fillUnicableConf(sectionDict, unicableproducts, vco_null_check): - for y in unicableproducts: - products = unicableproducts[y].keys() - products.sort() - tmp = ConfigSubsection() - tmp.product = ConfigSelection(choices = products, default = products[0]) - tmp.scr = ConfigSubDict() - tmp.vco = ConfigSubDict() - tmp.lofl = ConfigSubDict() - tmp.lofh = ConfigSubDict() - tmp.loft = ConfigSubDict() - tmp.positions = ConfigSubDict() - for z in products: + section.unicable = ConfigSelection(choices = {"unicable_matrix": _("Unicable Martix"),"unicable_user": "Unicable "+_("User defined")}, default = "unicable_matrix") +# section.unicable = ConfigSelection(choices = {"unicable_user": _("User defined")}, default = "unicable_user") + def fillUnicableConf(sectionDict, unicableproducts, vco_null_check): + for manufacturer in unicableproducts: + products = unicableproducts[manufacturer].keys() + products.sort() + products_valide = [] + products_valide_append = products_valide.append + tmp = ConfigSubsection() + tmp.scr = ConfigSubDict() + tmp.vco = ConfigSubDict() + tmp.lofl = ConfigSubDict() + tmp.lofh = ConfigSubDict() + tmp.loft = ConfigSubDict() + tmp.positions = ConfigSubDict() + tmp.diction = ConfigSubDict() + for article in products: + positionslist = unicableproducts[manufacturer][article].get("positions") + positions = int(positionslist[0]) + dictionlist = [unicableproducts[manufacturer][article].get("diction")] + if lnb <= positions or dictionlist[0][0] !="EN50607": + tmp.positions[article] = ConfigSubList() + tmp.positions[article].append(ConfigInteger(default=positions, limits = (positions, positions))) + tmp.diction[article] = ConfigSelection(choices = dictionlist, default = dictionlist[0][0]) + scrlist = [] - vcolist = unicableproducts[y][z] - tmp.vco[z] = ConfigSubList() - for cnt in range(1,1+len(vcolist)-1): + scrlist_append = scrlist.append + vcolist=unicableproducts[manufacturer][article].get("frequencies") + tmp.vco[article] = ConfigSubList() + for cnt in range(1,len(vcolist)+1): vcofreq = int(vcolist[cnt-1]) if vcofreq == 0 and vco_null_check: - scrlist.append(("%d" %cnt,"SCR %d " %cnt +_("not used"))) + scrlist_append(("%d" %cnt,"SCR %d " %cnt +_("not used"))) else: - scrlist.append(("%d" %cnt,"SCR %d" %cnt)) - tmp.vco[z].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq))) - tmp.scr[z] = ConfigSelection(choices = scrlist, default = scrlist[0][0]) - - positions = int(vcolist[len(vcolist)-1][0]) - tmp.positions[z] = ConfigSubList() - tmp.positions[z].append(ConfigInteger(default=positions, limits = (positions, positions))) - - lofl = vcolist[len(vcolist)-1][1] - tmp.lofl[z] = ConfigSubList() - tmp.lofl[z].append(ConfigInteger(default=lofl, limits = (lofl, lofl))) - - lofh = int(vcolist[len(vcolist)-1][2]) - tmp.lofh[z] = ConfigSubList() - tmp.lofh[z].append(ConfigInteger(default=lofh, limits = (lofh, lofh))) - - loft = int(vcolist[len(vcolist)-1][3]) - tmp.loft[z] = ConfigSubList() - tmp.loft[z].append(ConfigInteger(default=loft, limits = (loft, loft))) - sectionDict[y] = tmp - - if lnb < 3: - print "MATRIX" - section.unicableMatrix = ConfigSubDict() - section.unicableMatrixManufacturer = ConfigSelection(UnicableMatrixManufacturers, UnicableMatrixManufacturers[0]) - fillUnicableConf(section.unicableMatrix, unicablematrixproducts, True) - - if lnb < 2: - print "LNB" - section.unicableLnb = ConfigSubDict() - section.unicableLnbManufacturer = ConfigSelection(UnicableLnbManufacturers, UnicableLnbManufacturers[0]) - fillUnicableConf(section.unicableLnb, unicablelnbproducts, False) + scrlist_append(("%d" %cnt,"SCR %d" %cnt)) + tmp.vco[article].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq))) + + tmp.scr[article] = ConfigSelection(choices = scrlist, default = scrlist[0][0]) + + tmp.lofl[article] = ConfigSubList() + tmp.lofh[article] = ConfigSubList() + tmp.loft[article] = ConfigSubList() + + tmp_lofl_article_append = tmp.lofl[article].append + tmp_lofh_article_append = tmp.lofh[article].append + tmp_loft_article_append = tmp.loft[article].append + + for cnt in range(1,positions+1): + lofl = int(positionslist[cnt][0]) + lofh = int(positionslist[cnt][1]) + loft = int(positionslist[cnt][2]) + tmp_lofl_article_append(ConfigInteger(default=lofl, limits = (lofl, lofl))) + tmp_lofh_article_append(ConfigInteger(default=lofh, limits = (lofh, lofh))) + tmp_loft_article_append(ConfigInteger(default=loft, limits = (loft, loft))) + products_valide_append(article) + + if len(products_valide)==0: + products_valide_append("None") + tmp.product = ConfigSelection(choices = products_valide, default = products_valide[0]) + sectionDict[manufacturer] = tmp + + if lnb < 65: + print "MATRIX" + section.unicableMatrix = ConfigSubDict() + section.unicableMatrixManufacturer = ConfigSelection(UnicableMatrixManufacturers, UnicableMatrixManufacturers[0]) + fillUnicableConf(section.unicableMatrix, unicablematrixproducts, True) + + if lnb < 2: #Konfiguration nur fuer LNB1 zulassen + print "LNB" + section.unicableLnb = ConfigSubDict() + section.unicableLnbManufacturer = ConfigSelection(UnicableLnbManufacturers, UnicableLnbManufacturers[0]) + fillUnicableConf(section.unicableLnb, unicablelnbproducts, False) #TODO satpositions for satcruser - section.satcruser = ConfigSelection(advanced_lnb_satcruser_choices, default="1") - tmp = ConfigSubList() - tmp.append(ConfigInteger(default=1284, limits = (950, 2150))) - tmp.append(ConfigInteger(default=1400, limits = (950, 2150))) - tmp.append(ConfigInteger(default=1516, limits = (950, 2150))) - tmp.append(ConfigInteger(default=1632, limits = (950, 2150))) - tmp.append(ConfigInteger(default=1748, limits = (950, 2150))) - tmp.append(ConfigInteger(default=1864, limits = (950, 2150))) - tmp.append(ConfigInteger(default=1980, limits = (950, 2150))) - tmp.append(ConfigInteger(default=2096, limits = (950, 2150))) - section.satcrvcouser = tmp - - nim.advanced.unicableconnected = ConfigYesNo(default=False) - nim.advanced.unicableconnectedTo = ConfigSelection([(str(id), nimmgr.getNimDescription(id)) for id in nimmgr.getNimListOfType("DVB-S") if id != x]) - + + section.dictionuser = ConfigSelection(advanced_lnb_diction_user_choices, default="EN50494") + section.satcruserEN50494 = ConfigSelection(advanced_lnb_satcr_user_choicesEN50494, default="1") + section.satcruserEN50607 = ConfigSelection(advanced_lnb_satcr_user_choicesEN50607, default="1") + + tmp = ConfigSubList() + tmp.append(ConfigInteger(default=1284, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1400, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1516, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1632, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1748, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1864, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1980, limits = (950, 2150))) + tmp.append(ConfigInteger(default=2096, limits = (950, 2150))) + section.satcrvcouserEN50494 = tmp + + tmp.append(ConfigInteger(default=1284, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1400, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1516, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1632, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1748, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1864, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1980, limits = (950, 2150))) + tmp.append(ConfigInteger(default=2096, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1284, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1400, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1516, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1632, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1748, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1864, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1980, limits = (950, 2150))) + tmp.append(ConfigInteger(default=2096, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1284, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1400, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1516, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1632, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1748, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1864, limits = (950, 2150))) + tmp.append(ConfigInteger(default=1980, limits = (950, 2150))) + tmp.append(ConfigInteger(default=2096, limits = (950, 2150))) + section.satcrvcouserEN50607 = tmp + + nim.advanced.unicableconnected = ConfigYesNo(default=False) + nim.advanced.unicableconnectedTo = ConfigSelection([(str(id), nimmgr.getNimDescription(id)) for id in nimmgr.getNimListOfType("DVB-S") if id != x]) + def configDiSEqCModeChanged(configElement): section = configElement.section if configElement.value == "1_2" and isinstance(section.longitude, ConfigNothing): @@ -1298,7 +1482,7 @@ def InitNimManager(nimmgr): section.increased_voltage = ConfigYesNo(False) section.toneburst = ConfigSelection(advanced_lnb_toneburst_choices, "none") section.longitude = ConfigNothing() - if lnb > 32: + if lnb > 64: tmp = ConfigSelection(advanced_lnb_allsat_diseqcmode_choices, "1_2") tmp.section = section configDiSEqCModeChanged(tmp) @@ -1349,7 +1533,7 @@ def InitNimManager(nimmgr): tmp.tonemode = ConfigSelection(advanced_tonemode_choices, "band") tmp.usals = ConfigYesNo(default=True) tmp.rotorposition = ConfigInteger(default=1, limits=(1, 255)) - lnbnum = 33+x-3601 + lnbnum = 65+x-3601 lnb = ConfigSelection([("0", "not available"), (str(lnbnum), "LNB %d"%(lnbnum))], "0") lnb.slot_id = slot_id lnb.addNotifier(configLNBChanged, initial_call = False) @@ -1362,56 +1546,11 @@ def InitNimManager(nimmgr): if nimmgr.nim_slots[slot_id].description == 'Alps BSBE2': open("/proc/stb/frontend/%d/tone_amplitude" %(fe_id), "w").write(configElement.value) - def tunerTypeChanged(nimmgr, configElement): - fe_id = configElement.fe_id - - cur_type = int(open("/proc/stb/frontend/%d/mode" % (fe_id), "r").read()) - if cur_type != int(configElement.value): - print "tunerTypeChanged feid %d from %d to mode %d" % (fe_id, cur_type, int(configElement.value)) - - try: - oldvalue = open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "r").readline() - open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write("0") - except: - print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available" - - frontend = eDVBResourceManager.getInstance().allocateRawChannel(fe_id).getFrontend() - frontend.closeFrontend() - open("/proc/stb/frontend/%d/mode" % (fe_id), "w").write(configElement.value) - frontend.reopenFrontend() - try: - open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write(oldvalue) - except: - print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available" - nimmgr.enumerateNIMs() - else: - print "tuner type is already already %d" %cur_type - - empty_slots = 0 - for slot in nimmgr.nim_slots: - x = slot.slot - nim = config.Nims[x] - addMultiType = False + def createSatConfig(nim, x, empty_slots): + print "[Nimmanager] slot %d create config satellite.." % slot.slot try: - nim.multiType + nim.toneAmplitude except: - addMultiType = True - if slot.isMultiType() and addMultiType: - typeList = [] - for id in slot.getMultiTypeList().keys(): - type = slot.getMultiTypeList()[id] - typeList.append((id, type)) - nim.multiType = ConfigSelection(typeList, "0") - - nim.multiType.fe_id = x - empty_slots - nim.multiType.addNotifier(boundFunction(tunerTypeChanged, nimmgr)) - - empty_slots = 0 - for slot in nimmgr.nim_slots: - x = slot.slot - nim = config.Nims[x] - - if slot.isCompatible("DVB-S"): nim.toneAmplitude = ConfigSelection([("11", "340mV"), ("10", "360mV"), ("9", "600mV"), ("8", "700mV"), ("7", "800mV"), ("6", "900mV"), ("5", "1100mV")], "7") nim.toneAmplitude.fe_id = x - empty_slots nim.toneAmplitude.slot_id = x @@ -1438,25 +1577,12 @@ def InitNimManager(nimmgr): nim.fastTurningBegin = ConfigDateTime(default = mktime(btime.timetuple()), formatstring = _("%H:%M"), increment = 900) etime = datetime(1970, 1, 1, 19, 0); nim.fastTurningEnd = ConfigDateTime(default = mktime(etime.timetuple()), formatstring = _("%H:%M"), increment = 900) - config_mode_choices = [ ("nothing", _("nothing connected")), - ("simple", _("simple")), ("advanced", _("advanced"))] - if len(nimmgr.getNimListOfType(slot.type, exception = x)) > 0: - config_mode_choices.append(("equal", _("equal to"))) - config_mode_choices.append(("satposdepends", _("second cable of motorized LNB"))) - if len(nimmgr.canConnectTo(x)) > 0: - config_mode_choices.append(("loopthrough", _("loopthrough to"))) - nim.advanced = ConfigNothing() - tmp = ConfigSelection(config_mode_choices, "nothing") - tmp.slot_id = x - tmp.addNotifier(configModeChanged, initial_call = False) - nim.configMode = tmp - elif slot.isCompatible("DVB-C"): - nim.configMode = ConfigSelection( - choices = { - "enabled": _("enabled"), - "nothing": _("nothing connected"), - }, - default = "enabled") + + def createCableConfig(nim, x): + print "[Nimmanager] slot %d create config cable.." % slot.slot + try: + nim.cable + except: list = [ ] n = 0 for x in nimmgr.cablesList: @@ -1490,13 +1616,12 @@ def InitNimManager(nimmgr): nim.cable.scan_sr_6875 = ConfigYesNo(default = True) nim.cable.scan_sr_ext1 = ConfigInteger(default = 0, limits = (0, 7230)) nim.cable.scan_sr_ext2 = ConfigInteger(default = 0, limits = (0, 7230)) - elif slot.isCompatible("DVB-T"): - nim.configMode = ConfigSelection( - choices = { - "enabled": _("enabled"), - "nothing": _("nothing connected"), - }, - default = "enabled") + + def createTerrestrialConfig(nim, x): + print "[Nimmanager] slot %d create config terrestrial.." % slot.slot + try: + nim.terrestrial + except: list = [] n = 0 for x in nimmgr.terrestrialsList: @@ -1504,11 +1629,103 @@ def InitNimManager(nimmgr): n += 1 nim.terrestrial = ConfigSelection(choices = list) nim.terrestrial_5V = ConfigOnOff() + + def tunerTypeChanged(nimmgr, configElement): + fe_id = configElement.fe_id + eDVBResourceManager.getInstance().setFrontendType(nimmgr.nim_slots[fe_id].frontend_id, nimmgr.nim_slots[fe_id].getType()) + import os + if os.path.exists("/proc/stb/frontend/%d/mode" % fe_id): + cur_type = int(open("/proc/stb/frontend/%d/mode" % (fe_id), "r").read()) + if cur_type == int(configElement.value): + print "tuner type is already already %d" %cur_type + return + print "tunerTypeChanged feid %d from %d to mode %d" % (fe_id, cur_type, int(configElement.value)) + + print "tunerTypeChanged feid %d, mode %d" % (fe_id, int(configElement.value)) + + try: + oldvalue = open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "r").readline() + open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write("0") + except: + print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available" + + frontend = eDVBResourceManager.getInstance().allocateRawChannel(fe_id).getFrontend() + frontend.closeFrontend() + + if os.path.exists("/proc/stb/frontend/%d/mode" % fe_id): + open("/proc/stb/frontend/%d/mode" % (fe_id), "w").write(configElement.value) + + frontend.reopenFrontend() + try: + open("/sys/module/dvb_core/parameters/dvb_shutdown_timeout", "w").write(oldvalue) + except: + print "[info] no /sys/module/dvb_core/parameters/dvb_shutdown_timeout available" + nimmgr.enumerateNIMs() + + empty_slots = 0 + for slot in nimmgr.nim_slots: + print "[InitNimManager] check multi type slot %d" % slot.slot + x = slot.slot + nim = config.Nims[x] + addMultiType = False + try: + nim.multiType + except: + addMultiType = True + if slot.isMultiType() and addMultiType: + print "[InitNimManager] slot %d is multi type : " % slot.slot, slot.getMultiTypeList() + typeList = [] + for id in slot.getMultiTypeList().keys(): + type = slot.getMultiTypeList()[id] + typeList.append((id, type)) + nim.multiType = ConfigSelection(typeList, "0") + nim.multiType.fe_id = x - empty_slots + nim.multiType.addNotifier(boundFunction(tunerTypeChanged, nimmgr)) + + empty_slots = 0 + for slot in nimmgr.nim_slots: + x = slot.slot + nim = config.Nims[x] + + if update_slots and (x not in update_slots): + continue + + if slot.isCompatible("DVB-S"): + createSatConfig(nim, x, empty_slots) + config_mode_choices = [ ("nothing", _("nothing connected")), + ("simple", _("simple")), ("advanced", _("advanced"))] + if len(nimmgr.getNimListOfType(slot.getType(), exception = x)) > 0: + config_mode_choices.append(("equal", _("equal to"))) + config_mode_choices.append(("satposdepends", _("second cable of motorized LNB"))) + if len(nimmgr.canConnectTo(x)) > 0: + config_mode_choices.append(("loopthrough", _("loopthrough to"))) + nim.advanced = ConfigNothing() + tmp = ConfigSelection(config_mode_choices, "nothing") + tmp.slot_id = x + tmp.addNotifier(configModeChanged, initial_call = False) + nim.configMode = tmp + elif slot.isCompatible("DVB-C"): + nim.configMode = ConfigSelection( + choices = { + "enabled": _("enabled"), + "nothing": _("nothing connected"), + }, + default = "enabled") + createCableConfig(nim, x) + elif slot.isCompatible("DVB-T"): + nim.configMode = ConfigSelection( + choices = { + "enabled": _("enabled"), + "nothing": _("nothing connected"), + }, + default = "enabled") + createTerrestrialConfig(nim, x) else: + print "[Nimmanager] slot %d create config nothing.." % slot.slot empty_slots += 1 nim.configMode = ConfigSelection(choices = { "nothing": _("disabled") }, default="nothing"); - if slot.type is not None: - print "pls add support for this frontend type!", slot.type + if slot.getType() is not None: + print "pls add support for this frontend type!", slot.getType() # assert False nimmgr.sec = SecConfigure(nimmgr)