one motor command retrie should be enough (in normal case no retrie is
[enigma2.git] / lib / python / Components / NimManager.py
index e968cfe1aeb7df84836e886df415651935f73ca1..04ea2889203ae3f02190b0b358da80b7132d93ca 100644 (file)
@@ -1,6 +1,6 @@
-from config import config, ConfigSubsection, ConfigSelection, ConfigFloat, ConfigSatlist, ConfigYesNo, ConfigInteger, ConfigSubList, ConfigNothing, ConfigSubDict
+from config import config, ConfigSubsection, ConfigSelection, ConfigFloat, ConfigSatlist, ConfigYesNo, ConfigInteger, ConfigSubList, ConfigNothing, ConfigSubDict, ConfigOnOff
 
-from enigma import eDVBSatelliteEquipmentControl, \
+from enigma import eDVBSatelliteEquipmentControl as secClass, \
        eDVBSatelliteLNBParameters as lnbParam, \
        eDVBSatelliteDiseqcParameters as diseqcParam, \
        eDVBSatelliteSwitchParameters as switchParam, \
@@ -16,6 +16,14 @@ from xml.sax.handler import ContentHandler
 
 from Tools.BoundFunction import boundFunction
 
+def getConfigSatlist(orbpos, satlist):
+       default_orbpos = None
+       for x in satlist:
+               if x[0] == orbpos:
+                       default_orbpos = orbpos
+                       break
+       return ConfigSatlist(satlist, default_orbpos)
+
 def tryOpen(filename):
        try:
                procFile = open(filename)
@@ -32,7 +40,6 @@ class SecConfigure:
                        tunermask |= (1 << self.equal[slotid])
                elif self.linked.has_key(slotid):
                        tunermask |= (1 << self.linked[slotid])
-               sec.setLNBTunerMask(tunermask)
                sec.setLNBLOFL(9750000)
                sec.setLNBLOFH(10600000)
                sec.setLNBThreshold(11700000)
@@ -56,7 +63,6 @@ class SecConfigure:
                elif (diseqcmode == 3): # diseqc 1.2
                        if self.satposdepends.has_key(slotid):
                                tunermask |= (1 << self.satposdepends[slotid])
-                               sec.setLNBTunerMask(tunermask)
                        sec.setLatitude(latitude)
                        sec.setLaDirection(laDirection)
                        sec.setLongitude(longitude)
@@ -72,6 +78,8 @@ class SecConfigure:
                                sec.setRotorPosNum(0) # USALS
                                self.satList.append(int(x[0]))
 
+               sec.setLNBTunerMask(tunermask)
+
        def setSatposDepends(self, sec, nim1, nim2):
                print "tuner", nim1, "depends on satpos of", nim2
                sec.setTunerDepends(nim1, nim2)
@@ -84,7 +92,7 @@ class SecConfigure:
                return self.satList
 
        def update(self):
-               sec = eDVBSatelliteEquipmentControl.getInstance()
+               sec = secClass.getInstance()
                sec.clear() ## this do unlinking NIMs too !!
                print "sec config cleared"
                self.satList = []
@@ -97,13 +105,13 @@ class SecConfigure:
                        nim = config.Nims[x]
                        if slot.nimType == self.NimManager.nimType["DVB-S"]:
                                if nim.configMode.value == "equal":
-                                       self.equal[nim.equalTo.value]=x
+                                       self.equal[nim.equalTo.index]=x
                                if nim.configMode.value == "loopthrough":
-                                       self.linkNIMs(sec, x, nim.linkedTo.value)
-                                       self.linked[nim.linkedTo.value]=x
+                                       self.linkNIMs(sec, x, nim.linkedTo.index)
+                                       self.linked[nim.linkedTo.index]=x
                                elif nim.configMode.value == "satposdepends":
                                        self.setSatposDepends(sec, x, nim.satposDependsTo.index)
-                                       self.satposdepends[nim.satposDependsTo.value]=x
+                                       self.satposdepends[nim.satposDependsTo.index]=x
 
                for slot in self.NimManager.nimslots:
                        x = slot.slotid
@@ -178,10 +186,10 @@ class SecConfigure:
                                        sec.setLNBLOFH(currLnb.lofh.value * 1000)
                                        sec.setLNBThreshold(currLnb.threshold.value * 1000)
                                        
-                               if currLnb.output_12v.value == "0V":
-                                       pass # nyi in drivers
-                               elif currLnb.output_12v.value == "12V":
-                                       pass # nyi in drivers
+#                              if currLnb.output_12v.value == "0V":
+#                                      pass # nyi in drivers
+#                              elif currLnb.output_12v.value == "12V":
+#                                      pass # nyi in drivers
                                        
                                if currLnb.increased_voltage.value:
                                        sec.setLNBIncreasedVoltage(lnbParam.ON)
@@ -353,14 +361,14 @@ class NimManager:
                                self.parsedCab = str(tname)
                        elif (name == "transponder"):
                                freq = int(attrs.get('frequency',""))
-                               sr = int(attrs.get('symbol_rate',""))
-                               mod = int(attrs.get('modulation',"3")) # QAM64 default
-                               fec = int(attrs.get('fec_inner',"0")) # AUTO default
+                               #sr = int(attrs.get('symbol_rate',""))
+                               #mod = int(attrs.get('modulation',"3")) # QAM64 default
+                               #fec = int(attrs.get('fec_inner',"0")) # AUTO default
                                if self.parsedCab in self.transponders:
                                        pass
                                else:
                                        self.transponders[self.parsedCab] = [ ]
-                               self.transponders[self.parsedCab].append((1, freq, sr, mod, fec))
+                               self.transponders[self.parsedCab].append((1, freq))
 
        class parseTerrestrials(ContentHandler):
                def __init__(self, terrestrialsList, transponders):
@@ -410,13 +418,16 @@ class NimManager:
                return self.transpondersterrestrial[region]
        
        def getCableDescription(self, nim):
-               return self.cablesList[config.Nims[nim].cable.value]
+               return self.cablesList[0]
+       
+       def getCableTrustNit(self, nim):
+               return config.Nims[nim].cabletype.value == "quick"
 
        def getTerrestrialDescription(self, nim):
-               return self.terrestrialsList[config.Nims[nim].terrestrial.value][0]
+               return self.terrestrialsList[config.Nims[nim].terrestrial.index][0]
 
        def getTerrestrialFlags(self, nim):
-               return self.terrestrialsList[config.Nims[nim].terrestrial.value][1]
+               return self.terrestrialsList[config.Nims[nim].terrestrial.index][1]
 
        def getConfiguredSats(self):
                return self.sec.getSatList()
@@ -573,9 +584,9 @@ class NimManager:
 
                        if configMode == "simple":
                                dm = config.Nims[slotid].diseqcMode.value
-                               if dm in ["single", "toneburst", "diseqc_a_b", "diseqc_a_b_c_d"]:
+                               if dm in ["single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
                                        list.append(self.satList[config.Nims[slotid].diseqcA.index])
-                               if dm in ["toneburst", "diseqc_a_b", "diseqc_a_b_c_d"]:
+                               if dm in ["toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"]:
                                        list.append(self.satList[config.Nims[slotid].diseqcB.index])
                                if dm == "diseqc_a_b_c_d":
                                        list.append(self.satList[config.Nims[slotid].diseqcC.index])
@@ -629,7 +640,65 @@ class NimManager:
                #print "nimDiseqcD set to " + str(val)
                pass
 
+def InitSecParams():
+       config.sec = ConfigSubsection()
+
+       x = ConfigInteger(default=15)
+       x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_CONT_TONE, configElement.value))
+       config.sec.delay_after_continuous_tone_change = x
+
+       x = ConfigInteger(default=10)
+       x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_FINAL_VOLTAGE_CHANGE, configElement.value))
+       config.sec.delay_after_final_voltage_change = x
+
+       x = ConfigInteger(default=120)
+       x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_BETWEEN_DISEQC_REPEATS, configElement.value))
+       config.sec.delay_between_diseqc_repeats = x
+
+       x = ConfigInteger(default=50)
+       x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_LAST_DISEQC_CMD, configElement.value))
+       config.sec.delay_after_last_diseqc_command = x
+
+       x = ConfigInteger(default=50)
+       x.addNotifier(lambda configElement: secClass.setParam(secClass.DELAY_AFTER_TONEBURST, configElement.value))
+       config.sec.delay_after_toneburst = x
+
+       x = ConfigInteger(default=120)
+       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
+
+       x = ConfigInteger(default=700)
+       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)
+       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
+
+       x = ConfigInteger(default=750)
+       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)
+       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)
+       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)
+       x.addNotifier(lambda configElement: secClass.setParam(secClass.MOTOR_RUNNING_TIMEOUT, configElement.value))
+       config.sec.motor_running_timeout = x
+
+       x = ConfigInteger(default=1)
+       x.addNotifier(lambda configElement: secClass.setParam(secClass.MOTOR_COMMAND_RETRIES, configElement.value))
+       config.sec.motor_command_retries = x
+
+
 def InitNimManager(nimmgr):
+       InitSecParams()
+
        config.Nims = ConfigSubList()
        for x in range(nimmgr.nimCount):
                config.Nims.append(ConfigSubsection())
@@ -661,16 +730,15 @@ def InitNimManager(nimmgr):
                                                "advanced": _("advanced")},
                                        default = "simple")
                        else:
-
                                nim.configMode = ConfigSelection(
                                        choices = {
                                                "equal": _("equal to Socket A"),
-                                               "looptrough": _("loopthrough to socket A"),
+                                               "loopthrough": _("loopthrough to socket A"),
                                                "nothing": _("nothing connected"),
                                                "satposdepends": _("second cable of motorized LNB"),
                                                "simple": _("simple"),
                                                "advanced": _("advanced")},
-                                       default = "looptrough")
+                                       default = "loopthrough")
 
                        #important - check if just the 2nd one is LT only and the first one is DVB-S
                        if nim.configMode.value in ["loopthrough", "satposdepends", "equal"]:
@@ -695,8 +763,9 @@ def InitNimManager(nimmgr):
                                        ("diseqc_a_b_c_d", _("DiSEqC A/B/C/D")),
                                        ("positioner", _("Positioner"))],
                                default = "diseqc_a_b")
-                       nim.diseqcA = ConfigSatlist(default = 192, list = nimmgr.satList)
-                       nim.diseqcB = ConfigSatlist(default = 130, list = nimmgr.satList)
+
+                       nim.diseqcA = getConfigSatlist(192, nimmgr.satList)
+                       nim.diseqcB = getConfigSatlist(130, nimmgr.satList)
                        nim.diseqcC = ConfigSatlist(list = nimmgr.satList)
                        nim.diseqcD = ConfigSatlist(list = nimmgr.satList)
                        nim.positionerMode = ConfigSelection(
@@ -727,7 +796,7 @@ def InitNimManager(nimmgr):
                        
                        # advanced config:
                        nim.advanced = ConfigSubsection()
-                       nim.advanced.sats = ConfigSatlist(default = 192, list = nimmgr.satList)
+                       nim.advanced.sats = getConfigSatlist(192,nimmgr.satList)
                        nim.advanced.sat = ConfigSubDict()
                        lnbs = [("0", "not available")]
                        for y in range(1, 33):
@@ -757,7 +826,7 @@ def InitNimManager(nimmgr):
                                nim.advanced.lnb[x].lofl = ConfigInteger(default=9750, limits = (0, 99999))
                                nim.advanced.lnb[x].lofh = ConfigInteger(default=10600, limits = (0, 99999))
                                nim.advanced.lnb[x].threshold = ConfigInteger(default=11700, limits = (0, 99999))
-                               nim.advanced.lnb[x].output_12v = ConfigSelection(choices = [("0V", _("0 V")), ("12V", _("12 V"))], default="0V")
+#                              nim.advanced.lnb[x].output_12v = ConfigSelection(choices = [("0V", _("0 V")), ("12V", _("12 V"))], default="0V")
                                nim.advanced.lnb[x].increased_voltage = ConfigYesNo(default=False)
                                nim.advanced.lnb[x].toneburst = ConfigSelection(choices = [("none", _("None")), ("A", _("A")), ("B", _("B"))], default = "none")
                                nim.advanced.lnb[x].diseqcMode = ConfigSelection(choices = [("none", _("None")), ("1_0", _("1.0")), ("1_1", _("1.1")), ("1_2", _("1.2"))], default = "none")
@@ -783,11 +852,13 @@ def InitNimManager(nimmgr):
                                nim.advanced.lnb[x].powerThreshold = ConfigInteger(default=50, limits=(0, 100))
 
                elif slot.nimType == nimmgr.nimType["DVB-C"]:
-                       nim.cable = ConfigSelection(choices = nimmgr.cablesList)
+                       nim.cabletype = ConfigSelection(choices = [("quick", _("Quick")), ("complete", _("Complete"))], default = "complete")
                elif slot.nimType == nimmgr.nimType["DVB-T"]:
                        list = []
+                       n = 0
                        for x in nimmgr.terrestrialsList:
-                               list.append(x[0])
+                               list.append((str(n), x[0]))
+                               n += 1
                        nim.terrestrial = ConfigSelection(choices = list)
                        nim.terrestrial_5V = ConfigOnOff()
                else: