X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/707680758061af81a33f094241c1f74a6c932a8e..d26a119a33db3ad39b4930712cef2b15cbaf0f8c:/lib/python/Screens/ScanSetup.py diff --git a/lib/python/Screens/ScanSetup.py b/lib/python/Screens/ScanSetup.py index 9541c60f..052dc708 100644 --- a/lib/python/Screens/ScanSetup.py +++ b/lib/python/Screens/ScanSetup.py @@ -5,7 +5,68 @@ from Components.ActionMap import NumberActionMap from Components.ConfigList import ConfigList from Components.NimManager import nimmanager from Components.Label import Label -from enigma import eDVBFrontendParametersSatellite, eComponentScan +from enigma import eDVBFrontendParametersSatellite, eComponentScan, eDVBSatelliteEquipmentControl, eDVBFrontendParametersTerrestrial + +def buildTerTransponder(frequency, + inversion=2, bandwidth = 3, fechigh = 6, feclow = 6, + modulation = 2, transmission = 2, guard = 4, + hierarchy = 4): + # WARNING: normally, enums are working directly. + # Don't copy this (very bad)!! Instead either fix swig (good) or + # move this into a central place. + Bw8MHz = 0 + Bw7MHz = 1 + Bw6MHz = 2 + Bw5MHz = 3 + BwAuto = 4 + + f1_2 = 0 + f2_3 = 1 + f3_4 = 2 + f5_6 = 3 + f7_8 = 4 + fAuto = 5 + + TM2k = 0 + TM8k = 1 + TM4k = 2 + TMAuto = 3 + + GI_1_32 = 0 + GI_1_16 = 1 + GI_1_8 = 2 + GI_1_4 = 3 + GI_Auto = 4 + + HNone = 0 + H1 = 1 + H2 = 2 + H4 = 3 + HAuto = 4 + + QPSK = 0 + QAM16 = 1 + QAM64 = 2 + Auto = 3 + + Off = 0 + On = 1 + Unknown = 2 + + parm = eDVBFrontendParametersTerrestrial() + + parm.frequency = frequency + + parm.inversion = [Off, On, Unknown][inversion] + parm.bandwidth = [Bw8MHz, Bw7MHz, Bw6MHz, BwAuto][bandwidth] # Bw5MHz unsupported + parm.code_rate_HP = [fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][fechigh] + parm.code_rate_LP = [fAuto, f1_2, f2_3, f3_4, f5_6, f7_8, fAuto][feclow] + parm.modulation = [QPSK, QAM16, Auto][modulation] # QAM64 unsupported + parm.transmission_mode = [TM2k, TM8k, TMAuto][transmission] # TM4k unsupported + parm.guard_interval = [GI_1_32, GI_1_16, GI_1_8, GI_1_4, GI_Auto][guard] + parm.hierarchy = [HNone, H1, H2, H4, HAuto][hierarchy] + + return parm def getInitialTransponderList(tlist, pos): list = nimmanager.getTransponders(pos) @@ -36,6 +97,29 @@ def getInitialCableTransponderList(tlist, cable): parm.inversion = 2 # AUTO tlist.append(parm) +def getInitialTerrestrialTransponderList(tlist, region): + list = nimmanager.getTranspondersTerrestrial(region) + + +# inversion=2, bandwidth = 3, fechigh = 6, feclow = 6, +# modulation = 2, transmission = 2, guard = 4, +# hierarchy = 4): + + for x in list: +#self.transponders[self.parsedTer].append((2, freq, bw, const, crh, crl, guard, transm, hierarchy, inv)) + if x[0] == 2: #TERRESTRIAL + # FIXME: we need to convert the other parameters... + + # convert terrestrial.xml bandwidth to our enum + if x[2] in [0, 1]: + bandwidth = [1, 0][x[2]] + else: + bandwidth = 3 # auto + + parm = buildTerTransponder(x[1], bandwidth = [1, 0][x[2]]) + tlist.append(parm) + + class ScanSetup(Screen): def __init__(self, session): Screen.__init__(self, session) @@ -147,6 +231,7 @@ class ScanSetup(Screen): if (nimmanager.getNimType(config.scan.nims.value) == nimmanager.nimType["DVB-T"]): if currentConfigSelectionElement(config.scan.typeterrestrial) == "single_transponder": self.list.append(getConfigListEntry(_("Frequency"), config.scan.ter.frequency)) + self.list.append(getConfigListEntry(_("Network scan"), config.scan.ter.networkScan)) self.list.append(getConfigListEntry(_("Inversion"), config.scan.ter.inversion)) self.list.append(getConfigListEntry(_("Bandwidth"), config.scan.ter.bandwidth)) self.list.append(getConfigListEntry(_("Code rate high"), config.scan.ter.fechigh)) @@ -229,13 +314,16 @@ class ScanSetup(Screen): # terrestial config.scan.ter.frequency = configElement_nonSave("config.scan.ter.frequency", configSequence, [466], configsequencearg.get("INTEGER", (100, 900))) config.scan.ter.inversion = configElement_nonSave("config.scan.ter.inversion", configSelection, 2, (("off", _("off")), ("on", _("on")), ("auto", _("Auto")))) - config.scan.ter.bandwidth = configElement_nonSave("config.scan.ter.bandwidth", configSelection, 3, (("8MHz", "8MHz"), ("7MHz", "7MHz"), ("6MHz", "6MHz"), ("auto", _("Auto")))) + # WORKAROUND: we can't use BW-auto + config.scan.ter.bandwidth = configElement_nonSave("config.scan.ter.bandwidth", configSelection, 0, (("8MHz", "8MHz"), ("7MHz", "7MHz"), ("6MHz", "6MHz"))) + #, ("auto", _("Auto")))) config.scan.ter.fechigh = configElement_nonSave("config.scan.ter.fechigh", configSelection, 6, (("none", _("None")), "1/2", "2/3", "3/4", "5/6", "7/8", _("Auto"))) config.scan.ter.feclow = configElement_nonSave("config.scan.ter.feclow", configSelection, 6, (_("None"), ("1_2", "1/2"), ("2_3", "2/3"), ("3_4", "3/4"), ("5_6", "5/6"), ("7_8", "7/8"), ("auto", _("Auto")))) config.scan.ter.modulation = configElement_nonSave("config.scan.ter.modulation", configSelection, 2, (("qpsk", "QPSK"), ("qam16", "QAM16"), ("auto", _("Auto")))) config.scan.ter.transmission = configElement_nonSave("config.scan.ter.transmission", configSelection, 2, (("2k", "2K"), ("8k", "8K"), ("auto", _("Auto")))) config.scan.ter.guard = configElement_nonSave("config.scan.ter.guard", configSelection, 4, (("1_32", "1/32"), ("1_16", "1/16"), ("1_8", "1/8"), ("1_4", "1/4"), ("auto", _("Auto")))) config.scan.ter.hierarchy = configElement_nonSave("config.scan.ter.hierarchy", configSelection, 4, (("none", _("None")), ("1", "1"), ("2", "2"), ("4", "4"), ("auto", _("Auto")))) + config.scan.ter.networkScan = configElement_nonSave("config.scan.cab.networkScan", configSelection, 0, (("no", _("no")), ("yes", _("yes")))) config.scan.scansat = {} for sat in nimmanager.satList: @@ -293,19 +381,8 @@ class ScanSetup(Screen): #parm.inversion = 2 #AUTO tlist.append(parm) - # FIXME use correct parameters - def addTerTransponder(self, tlist, frequency): - parm = eDVBFrontendParametersTerrestrial() - - parm.frequency = frequency * 1000000 - parm.inversion = 2 # eDVBFrontendParametersTerrestrial.Inversion.Unknown; - parm.bandwidth = 0 #eDVBFrontendParametersTerrestrial.Bandwidth.Bw8MHz; - parm.code_rate_HP = parm.code_rate_LP = 6 #eDVBFrontendParametersTerrestrial.FEC.fAuto; - parm.modulation = 1 #eDVBFrontendParametersTerrestrial.Modulation.QAM16; - parm.transmission_mode = 1 # eDVBFrontendParametersTerrestrial.TransmissionMode.TM8k; - parm.guard_interval = 0 # eDVBFrontendParametersTerrestrial.GuardInterval.GI_1_32; - parm.hierarchy = 0 #eDVBFrontendParametersTerrestrial.Hierarchy.HNone; - tlist.append(parm) + def addTerTransponder(self, tlist, *args, **kwargs): + tlist.append(buildTerTransponder(*args, **kwargs)) def keyGo(self): tlist = [] @@ -348,11 +425,20 @@ class ScanSetup(Screen): elif (nimmanager.getNimType(config.scan.nims.value) == nimmanager.nimType["DVB-T"]): if currentConfigSelectionElement(config.scan.typeterrestrial) == "single_transponder": self.addTerTransponder(tlist, - config.scan.ter.frequency.value[0]) - if currentConfigSelectionElement(config.scan.typeterrestrial) == "complete": - pass - - + config.scan.ter.frequency.value[0] * 1000000, + inversion = config.scan.ter.inversion.value, + bandwidth = config.scan.ter.bandwidth.value, + fechigh = config.scan.ter.fechigh.value, + feclow = config.scan.ter.feclow.value, + modulation = config.scan.ter.modulation.value, + transmission = config.scan.ter.transmission.value, + guard = config.scan.ter.guard.value, + hierarchy = config.scan.ter.hierarchy.value) + if currentConfigSelectionElement(config.scan.ter.networkScan) == "yes": + flags |= eComponentScan.scanNetworkSearch + elif currentConfigSelectionElement(config.scan.typeterrestrial) == "complete": + getInitialTerrestrialTransponderList(tlist, nimmanager.getTerrestrialDescription(config.scan.nims.value)) + flags |= eComponentScan.scanNetworkSearch for x in self["config"].list: x[1].save() @@ -376,17 +462,36 @@ class ScanSimple(Screen): def keyGo(self): scanList = [] + if nimmanager.getNimType(0) == nimmanager.nimType["DVB-S"] and nimmanager.getNimType(0) == nimmanager.getNimType(1): + sec = eDVBSatelliteEquipmentControl.getInstance() + if sec is not None: + exclusive_satellites = sec.get_exclusive_satellites(0,1) + else: + exclusive_satellites = [0,0] + else: + exclusive_satellites = [0,0] + print "exclusive satellites", exclusive_satellites for x in self.list: slotid = x[1].parent.configPath - print "configpath:", x[1].parent.configPath, "-", currentConfigSelectionElement(x[1].parent) + print "Scan Tuner", slotid, "-", currentConfigSelectionElement(x[1].parent) if currentConfigSelectionElement(x[1].parent) == "yes": tlist = [ ] if nimmanager.getNimType(x[1].parent.configPath) == nimmanager.nimType["DVB-S"]: + if slotid > 0: + idx = exclusive_satellites[0]+1 + else: + idx = 0 + exclusive_nim_sats = exclusive_satellites[idx+1:idx+1+exclusive_satellites[idx]] + print "exclusive_nim_sats", exclusive_nim_sats SatList = nimmanager.getSatListForNim(slotid) for sat in SatList: - getInitialTransponderList(tlist, sat[1]) + if sat[1] in exclusive_nim_sats or slotid == 0: + print sat + getInitialTransponderList(tlist, sat[1]) elif nimmanager.getNimType(x[1].parent.configPath) == nimmanager.nimType["DVB-C"]: getInitialCableTransponderList(tlist, nimmanager.getCableDescription(slotid)) + elif nimmanager.getNimType(x[1].parent.configPath) == nimmanager.nimType["DVB-T"]: + getInitialTerrestrialTransponderList(tlist, nimmanager.getTerrestrialDescription(slotid)) scanList.append({"transponders": tlist, "feid": slotid, "flags": eComponentScan.scanNetworkSearch}) self.session.openWithCallback(self.doNothing, ServiceScan, scanList = scanList) @@ -408,6 +513,19 @@ class ScanSimple(Screen): return 1 return 0 + def ScanNimTwoNeeded(self): + if nimmanager.getNimType(0) != nimmanager.getNimType(1): + return True + if nimmanager.getNimType(0) == nimmanager.nimType["DVB-S"]: #two dvb-s nims + if nimmanager.getNimConfigMode(1) in ["loopthrough", "satposdepends", "equal", "nothing"]: + return False + sec = eDVBSatelliteEquipmentControl.getInstance() + if sec is not None: + exclusive_satellites = sec.get_exclusive_satellites(0,1) + if len(exclusive_satellites) == 0: + return False + return True + def __init__(self, session): Screen.__init__(self, session) @@ -422,10 +540,13 @@ class ScanSimple(Screen): self.list = [] tlist = [] - for slotid in range(nimmanager.getNimSocketCount()): - if nimmanager.getNimType(slotid) != nimmanager.nimType["DVB-S"] or currentConfigSelectionElement(config.Nims[slotid].configMode) != "nothing": - nim = configElement_nonSave(slotid, configSelection, 0, (("yes", _("yes")), ("no", _("no")))) - self.list.append(getConfigListEntry(_("Scan NIM") + " " + str(slotid) + " (" + nimmanager.getNimTypeName(slotid) + ")", nim)) + nimcount = nimmanager.getNimSocketCount() + if nimcount > 0: + nim = configElement_nonSave(0, configSelection, 0,(("yes", _("yes")),("no", _("no")))) + self.list.append(getConfigListEntry(_("Scan NIM") + " 0 (" + nimmanager.getNimTypeName(0) + ")", nim)) + if nimcount > 1 and self.ScanNimTwoNeeded(): + nim = configElement_nonSave(1, configSelection, 0, (("yes", _("yes")), ("no", _("no")))) + self.list.append(getConfigListEntry(_("Scan NIM") + " 1 (" + nimmanager.getNimTypeName(1) + ")", nim)) self["config"] = ConfigList(self.list) self["header"] = Label(_("Automatic Scan"))