X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/99664f9122c380480189d7ad7ecfcd73de226d2a..64fdc7815a0b07777d9c9706f02317d325f8f773:/lib/python/Components/NimManager.py diff --git a/lib/python/Components/NimManager.py b/lib/python/Components/NimManager.py index a4984e62..b3be2603 100644 --- a/lib/python/Components/NimManager.py +++ b/lib/python/Components/NimManager.py @@ -10,7 +10,11 @@ from config import configSequence from config import configsequencearg from config import configSatlist -from enigma import * +from enigma import eDVBSatelliteEquipmentControl, \ + eDVBSatelliteLNBParameters as lnbParam, \ + eDVBSatelliteDiseqcParameters as diseqcParam, \ + eDVBSatelliteSwitchParameters as switchParam, \ + eDVBSatelliteRotorParameters as rotorParam import xml.dom.minidom from xml.dom import EMPTY_NAMESPACE @@ -30,19 +34,21 @@ def tryOpen(filename): return procFile class SecConfigure: - def addLNBSimple(self, slotid, diseqcmode, toneburstmode = 0, diseqcpos = 0, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0): + def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = 0, diseqcpos = 0, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0): #simple defaults - sec = eDVBSatelliteEquipmentControl.getInstance() sec.addLNB() - sec.setLNBTunerMask(1 << slotid) + tunermask = 1 << slotid + if self.linked.has_key(slotid): + tunermask |= (1 << self.linked[slotid]) + sec.setLNBTunerMask(tunermask) sec.setLNBLOFL(9750000) sec.setLNBLOFH(10600000) sec.setLNBThreshold(11750000) sec.setRepeats(0) sec.setFastDiSEqC(0) sec.setSeqRepeat(0) - sec.setVoltageMode(0) #HV - sec.setToneMode(0) #HILO + sec.setVoltageMode(switchParam.HV) + sec.setToneMode(switchParam.HILO) sec.setCommandOrder(0) #user values sec.setDiSEqCMode(diseqcmode) @@ -67,63 +73,90 @@ class SecConfigure: sec.setVoltageMode(0) sec.setToneMode(0) self.satList.append(int(x[1])) - - def linkNIMs(self, nim1, nim2): - eDVBSatelliteEquipmentControl.getInstance().setTunerLinked(nim1, nim2) - + def linkNIMs(self, sec, nim1, nim2): + print "link tuner", nim1, "to tuner", nim2 + sec.setTunerLinked(nim1, nim2) + def getSatList(self): return self.satList def update(self): - eDVBSatelliteEquipmentControl.getInstance().clear() - + sec = eDVBSatelliteEquipmentControl.getInstance() + sec.clear() ## this do unlinking NIMs too !! + print "sec config cleared" self.satList = [] + self.linked = { } + for slot in self.NimManager.nimslots: + x = slot.slotid + nim = config.Nims[x] + if slot.nimType == self.NimManager.nimType["DVB-S"]: + if currentConfigSelectionElement(nim.configMode) == "loopthrough": + self.linkNIMs(sec, x, nim.linkedTo.value) + self.linked[nim.linkedTo.value]=x + for slot in self.NimManager.nimslots: x = slot.slotid nim = config.Nims[x] if slot.nimType == self.NimManager.nimType["DVB-S"]: print "slot: " + str(x) + " configmode: " + str(nim.configMode.value) if currentConfigSelectionElement(nim.configMode) == "loopthrough": - self.linkNIMs(x, nim.linkedTo.value) - nim = config.Nims[nim.linkedTo.value] + pass elif currentConfigSelectionElement(nim.configMode) == "simple": #simple config if currentConfigSelectionElement(nim.diseqcMode) == "single": #single - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = 0, diseqcmode = 0, diseqcpos = 4) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.NONE, diseqcpos = diseqcParam.SENDNO) elif currentConfigSelectionElement(nim.diseqcMode) == "toneburst_a_b": #Toneburst A/B - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = 1, diseqcmode = 0, diseqcpos = 4) - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcB.vals[nim.diseqcB.value][1]), toneburstmode = 1, diseqcmode = 0, diseqcpos = 4) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = diseqcParam.A, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcB.vals[nim.diseqcB.value][1]), toneburstmode = diseqcParam.B, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.SENDNO) elif currentConfigSelectionElement(nim.diseqcMode) == "diseqc_a_b": #DiSEqC A/B - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = 0, diseqcmode = 1, diseqcpos = 0) - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcB.vals[nim.diseqcB.value][1]), toneburstmode = 0, diseqcmode = 1, diseqcpos = 1) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcB.vals[nim.diseqcB.value][1]), toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB) elif currentConfigSelectionElement(nim.diseqcMode) == "diseqc_a_b_c_d": #DiSEqC A/B/C/D - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = 0, diseqcmode = 1, diseqcpos = 0) - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcB.vals[nim.diseqcB.value][1]), toneburstmode = 0, diseqcmode = 1, diseqcpos = 1) - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcC.vals[nim.diseqcC.value][1]), toneburstmode = 0, diseqcmode = 1, diseqcpos = 2) - self.addLNBSimple(slotid = x, orbpos = int(nim.diseqcD.vals[nim.diseqcD.value][1]), toneburstmode = 0, diseqcmode = 1, diseqcpos = 3) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcA.vals[nim.diseqcA.value][1]), toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AA) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcB.vals[nim.diseqcB.value][1]), toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.AB) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcC.vals[nim.diseqcC.value][1]), toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BA) + self.addLNBSimple(sec, slotid = x, orbpos = int(nim.diseqcD.vals[nim.diseqcD.value][1]), toneburstmode = diseqcParam.NO, diseqcmode = diseqcParam.V1_0, diseqcpos = diseqcParam.BB) elif currentConfigSelectionElement(nim.diseqcMode) == "positioner": #Positioner - self.addLNBSimple(slotid = x, diseqcmode = 3, longitude = float(str(nim.longitude.value[0]) + "." + str(nim.longitude.value[1])), loDirection = nim.longitudeOrientation.value - 2, latitude = float(str(nim.latitude.value[0]) + "." + str(nim.latitude.value[1])), laDirection = nim.latitudeOrientation.value) - pass + if currentConfigSelectionElement(nim.latitudeOrientation) == "north": + laValue = rotorParam.NORTH + else: + laValue = rotorParam.SOUTH + if currentConfigSelectionElement(nim.longitudeOrientation) == "east": + loValue = rotorParam.EAST + else: + loValue = rotorParam.WEST + self.addLNBSimple(sec, slotid = x, diseqcmode = 3, + longitude = configsequencearg.getFloat(nim.longitude), + loDirection = loValue, + latitude = configsequencearg.getFloat(nim.latitude), + laDirection = laValue) +# pass elif currentConfigSelectionElement(nim.configMode) == "nothing": pass - else: #advanced config - self.updateAdvanced(x) + else: #advanced config + self.updateAdvanced(sec, x) + print "sec config completed" - def updateAdvanced(self, slotid): - sec = eDVBSatelliteEquipmentControl.getInstance() + def updateAdvanced(self, sec, slotid): lnbSat = {} for x in range(1,33): lnbSat[x] = [] for x in self.NimManager.satList: lnb = config.Nims[slotid].advanced.sat[x[1]].lnb.value if lnb != 0: + print "add", x[1], "to", lnb lnbSat[lnb].append(x[1]) for x in range(1,33): if len(lnbSat[x]) > 0: currLnb = config.Nims[slotid].advanced.lnb[x] sec.addLNB() - sec.setLNBTunerMask(1 << slotid) + + tunermask = 1 << slotid + if self.linked.has_key(slotid): + tunermask |= (1 << self.linked[slotid]) + sec.setLNBTunerMask(tunermask) + if currentConfigSelectionElement(currLnb.lof) == "universal_lnb": sec.setLNBLOFL(9750000) sec.setLNBLOFH(10600000) @@ -133,125 +166,140 @@ class SecConfigure: sec.setLNBLOFH(5150000) sec.setLNBThreshold(5150000) elif currentConfigSelectionElement(currLnb.lof) == "user_defined": - sec.setLNBLOFL(currLnb.lofl.value * 1000) - sec.setLNBLOFH(currLnb.lofh.value * 1000) - sec.setLNBThreshold(currLnb.threshold.value * 1000) + sec.setLNBLOFL(currLnb.lofl.value[0] * 1000) + sec.setLNBLOFH(currLnb.lofh.value[0] * 1000) + sec.setLNBThreshold(currLnb.threshold.value[0] * 1000) if currentConfigSelectionElement(currLnb.output_12v) == "0V": - pass + pass # nyi in drivers elif currentConfigSelectionElement(currLnb.output_12v) == "12V": - pass - + pass # nyi in drivers + if currentConfigSelectionElement(currLnb.increased_voltage) == "yes": - pass + sec.setLNBIncreasedVoltage(lnbParam.ON) else: - pass - + sec.setLNBIncreasedVoltage(lnbParam.OFF) + if currentConfigSelectionElement(currLnb.diseqcMode) == "none": - pass + sec.setDiSEqCMode(diseqcParam.NONE) elif currentConfigSelectionElement(currLnb.diseqcMode) == "1_0": - pass + sec.setDiSEqCMode(diseqcParam.V1_0) elif currentConfigSelectionElement(currLnb.diseqcMode) == "1_1": - pass + sec.setDiSEqCMode(diseqcParam.V1_1) elif currentConfigSelectionElement(currLnb.diseqcMode) == "1_2": - pass - + sec.setDiSEqCMode(diseqcParam.V1_2) + if currentConfigSelectionElement(currLnb.diseqcMode) != "none": if currentConfigSelectionElement(currLnb.toneburst) == "none": - pass + sec.setToneburst(diseqcParam.NO) elif currentConfigSelectionElement(currLnb.toneburst) == "A": - pass + sec.setToneburst(diseqcParam.A) elif currentConfigSelectionElement(currLnb.toneburst) == "B": - pass - - + sec.setToneburst(diseqcParam.B) + if currentConfigSelectionElement(currLnb.commitedDiseqcCommand) == "none": - pass + sec.setCommittedCommand(diseqcParam.SENDNO) elif currentConfigSelectionElement(currLnb.commitedDiseqcCommand) == "AA": - pass + sec.setCommittedCommand(diseqcParam.AA) elif currentConfigSelectionElement(currLnb.commitedDiseqcCommand) == "AB": - pass + sec.setCommittedCommand(diseqcParam.AB) elif currentConfigSelectionElement(currLnb.commitedDiseqcCommand) == "BA": - pass + sec.setCommittedCommand(diseqcParam.BA) elif currentConfigSelectionElement(currLnb.commitedDiseqcCommand) == "BB": - pass - + sec.setCommittedCommand(diseqcParam.BB) + if currentConfigSelectionElement(currLnb.fastDiseqc) == "yes": - pass + sec.setFastDiSEqC(True) else: - pass - + sec.setFastDiSEqC(False) + if currentConfigSelectionElement(currLnb.sequenceRepeat) == "yes": - pass + sec.setSeqRepeat(True) else: - pass - + sec.setSeqRepeat(False) + if currentConfigSelectionElement(currLnb.diseqcMode) == "1_0": currCO = currLnb.commandOrder1_0.value else: currCO = currLnb.commandOrder.value - pass # do something with currLnb.uncommittedDiseqcCommand.value... holds 0 for none, 1 for input 1, 2 for input 2 etc. + if currLnb.uncommittedDiseqcCommand.value > 0: + sec.setUncommittedCommand(0xF0|(currLnb.uncommittedDiseqcCommand.value-1)) + else: + sec.setUncommittedCommand(0) # SENDNO if currentConfigSelectionElement(currLnb.diseqcRepeats) == "none": - pass + sec.setRepeats(0) elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "One": - pass + sec.setRepeats(1) elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "Two": - pass + sec.setRepeats(2) elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "Three": - pass - + sec.setRepeats(3) + + setCommandOrder=False if currCO == 0: # committed, toneburst - pass + setCommandOrder=True elif currCO == 1: # toneburst, committed - pass + setCommandOrder=True elif currCO == 2: # committed, uncommitted, toneburst - pass + setCommandOrder=True elif currCO == 3: # toneburst, committed, uncommitted - pass + setCommandOrder=True elif currCO == 4: # uncommitted, committed, toneburst - pass + setCommandOrder=True elif currCO == 5: # toneburst, uncommitted, commmitted - pass - + setCommandOrder=True + if setCommandOrder: + sec.setCommandOrder(currCO) + if currentConfigSelectionElement(currLnb.diseqcMode) == "1_2": - sec.setLatitude(float(str(currLnb.latitude.value[0]) + "." + str(currLnb.latitude.value[1]))) - sec.setLaDirection(nim.latitudeOrientation.value) - sec.setLongitude(float(str(currLnb.longitude.value[0]) + "." + str(currLnb.longitude.value[1]))) - sec.setLoDirection(nim.longitudeOrientation.value - 2) - + latitude = configsequencearg.getFloat(currLnb.latitude) + sec.setLatitude(latitude) + longitude = configsequencearg.getFloat(currLnb.longitude) + sec.setLongitude(longitude) + if currentConfigSelectionElement(currLnb.latitudeOrientation) == "north": + sec.setLaDirection(rotorParam.NORTH) + else: + sec.setLaDirection(rotorParam.SOUTH) + if currentConfigSelectionElement(currLnb.longitudeOrientation) == "east": + sec.setLoDirection(rotorParam.EAST) + else: + sec.setLoDirection(rotorParam.WEST) + if currentConfigSelectionElement(currLnb.powerMeasurement) == "yes": - pass # set to currLnb.powerThreshold.value, which is an integer holding the mA value - + sec.setUseInputpower(True) + sec.setInputpowerDelta(currLnb.powerThreshold.value[0]) + else: + sec.setUseInputpower(False) + # finally add the orbital positions for y in lnbSat[x]: sec.addSatellite(y) currSat = config.Nims[slotid].advanced.sat[y] if currentConfigSelectionElement(currSat.voltage) == "polarization": - pass + sec.setVoltageMode(switchParam.HV) elif currentConfigSelectionElement(currSat.voltage) == "13V": - pass + sec.setVoltageMode(switchParam._14V) elif currentConfigSelectionElement(currSat.voltage) == "18V": - pass - + sec.setVoltageMode(switchParam._18V) + if currentConfigSelectionElement(currSat.tonemode) == "band": - pass + sec.setToneMode(switchParam.HILO) elif currentConfigSelectionElement(currSat.tonemode) == "on": - pass + sec.setToneMode(switchParam.ON) elif currentConfigSelectionElement(currSat.tonemode) == "off": - pass - + sec.setToneMode(switchParam.OFF) + if currentConfigSelectionElement(currSat.usals) == "no": - pass # use currSat.rotorposition.value to set the stored rotor position + sec.setRotorPosNum(currSat.rotorposition.value[0]) else: - pass # use usals for this sat! - - + sec.setRotorPosNum(0) #USALS + def __init__(self, nimmgr): self.NimManager = nimmgr self.update() - + class nimSlot: def __init__(self, slotid, nimtype, name): self.slotid = slotid @@ -492,19 +540,20 @@ class NimManager: list.append(x) return list - #callbacks for c++ config - def nimConfigModeChanged(self, slotid, mode): - if (mode != 2): # not linked - print "Unlinking slot " + str(slotid) - # TODO call c++ to unlink nim in slot slotid - if (mode == 2): # linked - pass - #FIXME!!! - #if (len(self.getNimListOfType(self.nimType["DVB-S"], slotid)) > 0): - # print "Linking slot " + str(slotid) + " to " + str(nimmgr.getConfigPrefix(slotid).value) - # TODO call c++ to link nim in slot slotid with nim in slot nimmgr.getConfigPrefix(slotid).value - def nimLinkedToChanged(self, slotid, val): - print "Linking slot " + str(slotid) + " to " + str(val) +# #callbacks for c++ config +# def nimConfigModeChanged(self, slotid, mode): +# if (mode != 2): # not linked +# print "Unlinking slot " + str(slotid) +# # TODO call c++ to unlink nim in slot slotid +# if (mode == 2): # linked +# pass +# #FIXME!!! +# #if (len(self.getNimListOfType(self.nimType["DVB-S"], slotid)) > 0): +# # print "Linking slot " + str(slotid) + " to " + str(nimmgr.getConfigPrefix(slotid).value) +# # TODO call c++ to link nim in slot slotid with nim in slot nimmgr.getConfigPrefix(slotid).value + +# def nimLinkedToChanged(self, slotid, val): +# print "Linking slot " + str(slotid) + " to " + str(val) def nimDiseqcModeChanged(self, slotid, mode): #print "nimDiseqcModeChanged set to " + str(mode) @@ -528,10 +577,10 @@ def InitNimManager(nimmgr): for x in range(nimmgr.nimCount): config.Nims.append(ConfigSubsection()) - def nimConfigModeChanged(slotid, configElement): - nimmgr.nimConfigModeChanged(slotid, configElement.value) - def nimLinkedToChanged(slotid, configElement): - nimmgr.nimLinkedToChanged(slotid, configElement.value) +# def nimConfigModeChanged(slotid, configElement): +# nimmgr.nimConfigModeChanged(slotid, configElement.value) +# def nimLinkedToChanged(slotid, configElement): +# nimmgr.nimLinkedToChanged(slotid, configElement.value) def nimDiseqcModeChanged(slotid, configElement): nimmgr.nimDiseqcModeChanged(slotid, configElement.value) @@ -575,7 +624,7 @@ def InitNimManager(nimmgr): nim.diseqcD = configElement(cname + "diseqcD", configSatlist, 0, nimmgr.satList); nim.positionerMode = configElement(cname + "positionerMode", configSelection, 0, (("usals", _("USALS")), ("manual", _("manual")))); nim.longitude = configElement(cname + "longitude", configSequence, [5,100], configsequencearg.get("FLOAT", [(0,90),(0,999)])); - nim.longitudeOrientation = configElement(cname + "longitudeOrientation", configSelection, 0, (_("East"), _("West"))) + nim.longitudeOrientation = configElement(cname + "longitudeOrientation", configSelection, 0, (("east", _("East")), ("west", _("West")))) nim.latitude = configElement(cname + "latitude", configSequence, [50,767], configsequencearg.get("FLOAT", [(0,90),(0,999)])); nim.latitudeOrientation = configElement(cname + "latitudeOrientation", configSelection, 0, (("north", _("North")), ("south", _("South")))) satNimList = nimmgr.getNimListOfType(nimmgr.nimType["DVB-S"], slot.slotid) @@ -585,13 +634,13 @@ def InitNimManager(nimmgr): nim.linkedTo = configElement(cname + "linkedTo", configSelection, 0, satNimListNames); #perhaps the instance of the slot is more useful? - nim.configMode.addNotifier(boundFunction(nimConfigModeChanged,x)) +# nim.configMode.addNotifier(boundFunction(nimConfigModeChanged,x)) nim.diseqcMode.addNotifier(boundFunction(nimDiseqcModeChanged,x)) nim.diseqcA.addNotifier(boundFunction(nimPortAChanged,int(x))) nim.diseqcB.addNotifier(boundFunction(nimPortBChanged,x)) nim.diseqcC.addNotifier(boundFunction(nimPortCChanged,x)) nim.diseqcD.addNotifier(boundFunction(nimPortDChanged,x)) - nim.linkedTo.addNotifier(boundFunction(nimLinkedToChanged,x)) +# nim.linkedTo.addNotifier(boundFunction(nimLinkedToChanged,x)) # advanced config: nim.advanced = ConfigSubsection() @@ -629,9 +678,9 @@ def InitNimManager(nimmgr): disCmd.append("Input " + str(y)) nim.advanced.lnb[x].uncommittedDiseqcCommand = configElement(cname + "advanced.lnb" + str(x) + ".uncommittedDiseqcCommand", configSelection, 0, disCmd) nim.advanced.lnb[x].diseqcRepeats = configElement(cname + "advanced.lnb" + str(x) + ".diseqcRepeats", configSelection, 0, (("none", _("None")), ("one", _("One")), ("two", _("Two")), ("three", _("Three")))) - nim.advanced.lnb[x].longitude = configElement(cname + "advanced.lnb" + str(x) + ".longitude", configSequence, [5,100], configsequencearg.get("FLOAT", [(0,90),(0,999)])); - nim.advanced.lnb[x].longitudeOrientation = configElement(cname + "advanced.lnb" + str(x) + ".longitudeOrientation", configSelection, 0, (_("East"), _("West"))) - nim.advanced.lnb[x].latitude = configElement(cname + "advanced.lnb" + str(x) + ".latitude", configSequence, [50,767], configsequencearg.get("FLOAT", [(0,90),(0,999)])); + nim.advanced.lnb[x].longitude = configElement(cname + "advanced.lnb" + str(x) + ".longitude", configSequence, [5,100], configsequencearg.get("FLOAT", [(0,90),(0,999)])) + nim.advanced.lnb[x].longitudeOrientation = configElement(cname + "advanced.lnb" + str(x) + ".longitudeOrientation", configSelection, 0, (("east", _("East")), ("west", _("West")))) + nim.advanced.lnb[x].latitude = configElement(cname + "advanced.lnb" + str(x) + ".latitude", configSequence, [50,767], configsequencearg.get("FLOAT", [(0,90),(0,999)])) nim.advanced.lnb[x].latitudeOrientation = configElement(cname + "advanced.lnb" + str(x) + ".latitudeOrientation", configSelection, 0, (("north", _("North")), ("south", _("South")))) nim.advanced.lnb[x].powerMeasurement = configElement(cname + "advanced.lnb" + str(x) + ".powerMeasurement", configSelection, 0, (("yes", _("Yes")), ("no", _("No")))) nim.advanced.lnb[x].powerThreshold = configElement(cname + "advanced.lnb" + str(x) + ".powerThreshold", configSequence, [50], configsequencearg.get("INTEGER", (0, 100)))