add handleCommand to converter
[enigma2.git] / lib / python / Components / NimManager.py
index 550ce846caa2b5edb45aa05c39004244b9a96196..c24d8d351f718b6b17f8a3c0594c5d97f9e77fb3 100644 (file)
@@ -2,7 +2,6 @@ from config import config       #global config instance
 
 from config import configElement
 from config import ConfigSubsection
-from config import ConfigSlider
 from config import configSelection
 from config import currentConfigSelectionElement
 from config import getConfigSelectionElement
@@ -45,7 +44,7 @@ class SecConfigure:
                sec.setLNBTunerMask(tunermask)
                sec.setLNBLOFL(9750000)
                sec.setLNBLOFH(10600000)
-               sec.setLNBThreshold(11750000)
+               sec.setLNBThreshold(11700000)
                sec.setLNBIncreasedVoltage(lnbParam.OFF)
                sec.setRepeats(0)
                sec.setFastDiSEqC(0)
@@ -177,7 +176,7 @@ class SecConfigure:
                                if currentConfigSelectionElement(currLnb.lof) == "universal_lnb":
                                        sec.setLNBLOFL(9750000)
                                        sec.setLNBLOFH(10600000)
-                                       sec.setLNBThreshold(11750000)
+                                       sec.setLNBThreshold(11700000)
                                elif currentConfigSelectionElement(currLnb.lof) == "c_band":
                                        sec.setLNBLOFL(5150000)
                                        sec.setLNBLOFH(5150000)
@@ -252,11 +251,11 @@ class SecConfigure:
                                                
                                                if currentConfigSelectionElement(currLnb.diseqcRepeats) == "none":
                                                        sec.setRepeats(0)
-                                               elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "One":
+                                               elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "one":
                                                        sec.setRepeats(1)
-                                               elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "Two":
+                                               elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "two":
                                                        sec.setRepeats(2)
-                                               elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "Three":
+                                               elif currentConfigSelectionElement(currLnb.diseqcRepeats) == "three":
                                                        sec.setRepeats(3)
                                                
                                        setCommandOrder=False
@@ -344,21 +343,23 @@ class NimManager:
                                tpos = int(attrs.get('position',""))
                                if tpos < 0:
                                        tpos = 3600 + tpos
-                               tname = attrs.get('name',"")
+                               tname = attrs.get('name',"").encode("UTF-8")
                                self.satellites[tpos] = tname
                                self.satList.append( (tname, tpos) )
                                self.parsedSat = int(tpos)
                        elif (name == "transponder"):
+                               modulation = int(attrs.get('modulation',"1")) # QPSK default
+                               system = int(attrs.get('system',"0")) # DVB-S default
                                freq = int(attrs.get('frequency',""))
                                sr = int(attrs.get('symbol_rate',""))
                                pol = int(attrs.get('polarization',""))
-                               fec = int(attrs.get('fec_inner',""))
+                               fec = int(attrs.get('fec_inner',"0")) # AUTO default
                                if self.parsedSat in self.transponders:
                                        pass
                                else:
                                        self.transponders[self.parsedSat] = [ ]
 
-                               self.transponders[self.parsedSat].append((0, freq, sr, pol, fec))
+                               self.transponders[self.parsedSat].append((0, freq, sr, pol, fec, system, modulation))
 
        class parseCables(ContentHandler):
                def __init__(self, cablesList, transponders):
@@ -369,19 +370,18 @@ class NimManager:
                def startElement(self, name, attrs):
                        if (name == "cable"):
                                #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
-                               tname = attrs.get('name',"")
+                               tname = attrs.get('name',"").encode("UTF-8")
                                self.cablesList.append(str(tname))
                                self.parsedCab = str(tname)
                        elif (name == "transponder"):
                                freq = int(attrs.get('frequency',""))
                                sr = int(attrs.get('symbol_rate',""))
-                               mod = int(attrs.get('modulation',""))
-                               fec = int(attrs.get('fec_inner',""))
+                               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))
 
        class parseTerrestrials(ContentHandler):
@@ -393,21 +393,25 @@ class NimManager:
                def startElement(self, name, attrs):
                        if (name == "terrestrial"):
                                #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
-                               tname = attrs.get('name',"")
+                               tname = attrs.get('name',"").encode("UTF-8")
                                tflags = attrs.get('flags',"")
                                self.terrestrialsList.append((tname, tflags))
                                self.parsedTer = str(tname)
                        elif (name == "transponder"):
                                # TODO finish this!
                                freq = int(attrs.get('centre_frequency',""))
-                               bw = int(attrs.get('bandwidth',""))
-                               const = int(attrs.get('constellation',""))
-                               crh = int(attrs.get('code_rate_hp',""))
-                               crl = int(attrs.get('code_rate_lp',""))
-                               guard = int(attrs.get('guard_interval',""))
-                               transm = int(attrs.get('transmission_mode',""))
-                               hierarchy = int(attrs.get('hierarchy_information',""))
-                               inv = int(attrs.get('inversion',""))
+                               bw = int(attrs.get('bandwidth',"3")) # AUTO
+                               const = int(attrs.get('constellation',"1")) # AUTO
+                               crh = int(attrs.get('code_rate_hp',"5")) # AUTO
+                               if crh > 5: # our terrestrial.xml is buggy... 6 for AUTO
+                                       crh = 5
+                               crl = int(attrs.get('code_rate_lp',"5")) # AUTO
+                               if crl > 5: # our terrestrial.xml is buggy... 6 for AUTO
+                                       crl = 5
+                               guard = int(attrs.get('guard_interval',"4")) # AUTO
+                               transm = int(attrs.get('transmission_mode',"2")) # AUTO
+                               hierarchy = int(attrs.get('hierarchy_information',"4")) # AUTO
+                               inv = int(attrs.get('inversion',"2")) # AUTO
                                if self.parsedTer in self.transponders:
                                        pass
                                else:
@@ -416,7 +420,25 @@ class NimManager:
                                self.transponders[self.parsedTer].append((2, freq, bw, const, crh, crl, guard, transm, hierarchy, inv))
 
        def getTransponders(self, pos):
-               return self.transponders[pos]
+               if self.transponders.has_key(pos):
+                       return self.transponders[pos]
+               else:
+                       return []
+
+       def getTranspondersCable(self, cable):
+               return self.transponderscable[cable]
+
+       def getTranspondersTerrestrial(self, region):
+               return self.transpondersterrestrial[region]
+       
+       def getCableDescription(self, nim):
+               return self.cablesList[config.Nims[nim].cable.value]
+
+       def getTerrestrialDescription(self, nim):
+               return self.terrestrialsList[config.Nims[nim].terrestrial.value][0]
+
+       def getTerrestrialFlags(self, nim):
+               return self.terrestrialsList[config.Nims[nim].terrestrial.value][1]
 
        def getConfiguredSats(self):
                return self.sec.getSatList()
@@ -470,6 +492,7 @@ class NimManager:
                                self.nimSocketCount += 1
                        elif line.strip().startswith("Type:"):
                                self.nimTypes[lastsocket] = str(line.strip()[6:])
+                               #self.nimTypes[lastsocket] = str("DVB-T")
                        elif line.strip().startswith("Name:"):
                                self.nimNames[lastsocket] = str(line.strip()[6:])
                        elif line.strip().startswith("empty"):
@@ -480,10 +503,16 @@ class NimManager:
 
        def getNimType(self, slotID):
                if slotID >= self.nimCount:
-                       return "empty/unknown"
+                       return self.nimType["empty/unknown"]
                else:   
                        return self.nimType[self.nimTypes[slotID]]
                        
+       def getNimTypeName(self, slotID):
+               if slotID >= self.nimCount:
+                       return "empty/unknown"
+               else:   
+                       return self.nimTypes[slotID]
+               
        def getNimName(self, slotID):
                return self.nimNames[slotID]
 
@@ -544,7 +573,13 @@ class NimManager:
                                nimText += ("DVB-S", "DVB-C", "DVB-T")[slot.nimType] + ")"
                        list.append((nimText, slot))
                return list
+
+       def getNimConfigMode(self, slotid):
+               return currentConfigSelectionElement(config.Nims[slotid].configMode)
        
+       def getSatList(self):
+               return self.satList
+
        def getSatListForNim(self, slotid):
                list = []
                if (self.getNimType(slotid) == self.nimType["DVB-S"]):
@@ -553,6 +588,11 @@ class NimManager:
                        #print "self.satellites:", self.satList[config.Nims[slotid].diseqcA.value]
                        #print "diseqcA:", config.Nims[slotid].diseqcA.value
                        configMode = currentConfigSelectionElement(config.Nims[slotid].configMode)
+
+                       if configMode == "equal":
+                               slotid=0 #FIXME add handling for more than two tuners !!!
+                               configMode = currentConfigSelectionElement(config.Nims[slotid].configMode)
+
                        if configMode == "simple":
                                if (config.Nims[slotid].diseqcMode.value <= 3):
                                        list.append(self.satList[config.Nims[slotid].diseqcA.value])
@@ -568,6 +608,29 @@ class NimManager:
                                for x in self.satList:
                                        if config.Nims[slotid].advanced.sat[x[1]].lnb.value != 0:
                                                list.append(x)
+
+               return list
+
+       def getRotorSatListForNim(self, slotid):
+               list = []
+               if (self.getNimType(slotid) == self.nimType["DVB-S"]):
+                       #print "slotid:", slotid
+
+                       #print "self.satellites:", self.satList[config.Nims[slotid].diseqcA.value]
+                       #print "diseqcA:", config.Nims[slotid].diseqcA.value
+                       configMode = currentConfigSelectionElement(config.Nims[slotid].configMode)
+                       if configMode == "simple":
+                               if (config.Nims[slotid].diseqcMode.value == 4):
+                                       for x in self.satList:
+                                               list.append(x)
+                       elif configMode == "advanced":
+                               for x in self.satList:
+                                       nim = config.Nims[slotid]
+                                       lnbnum = nim.advanced.sat[x[1]].lnb.value
+                                       if lnbnum != 0:
+                                               lnb = nim.advanced.lnb[lnbnum]
+                                               if lnb.diseqcMode.value == 3: # diseqc 1.2
+                                                       list.append(x)
                return list
 
        def nimDiseqcModeChanged(self, slotid, mode):
@@ -642,9 +705,9 @@ def InitNimManager(nimmgr):
                        nim.diseqcC = configElement(cname + "diseqcC", configSatlist, 0, nimmgr.satList, False);
                        nim.diseqcD = configElement(cname + "diseqcD", configSatlist, 0, nimmgr.satList, False);
                        nim.positionerMode = configElement(cname + "positionerMode", configSelection, 0, (("usals", _("USALS")), ("manual", _("manual"))), False);
-                       nim.longitude = configElement(cname + "longitude", configSequence, [5,100], configsequencearg.get("FLOAT", [(0,90),(0,999)]), False);
+                       nim.longitude = configElement(cname + "longitude", configSequence, [5,100], configsequencearg.get("FLOAT", [(0,359),(0,999)]), False);
                        nim.longitudeOrientation = configElement(cname + "longitudeOrientation", configSelection, 0, (("east", _("East")), ("west", _("West"))), False)
-                       nim.latitude = configElement(cname + "latitude", configSequence, [50,767], configsequencearg.get("FLOAT", [(0,90),(0,999)]), False);
+                       nim.latitude = configElement(cname + "latitude", configSequence, [50,767], configsequencearg.get("FLOAT", [(0,359),(0,999)]), False);
                        nim.latitudeOrientation = configElement(cname + "latitudeOrientation", configSelection, 0, (("north", _("North")), ("south", _("South"))), False)
                        satNimList = nimmgr.getNimListOfType(nimmgr.nimType["DVB-S"], slot.slotid)
                        satNimListNames = []
@@ -691,7 +754,7 @@ def InitNimManager(nimmgr):
                                nim.advanced.lnb[x].lof = configElement(cname + "advanced.lnb" + str(x) + ".lof", configSelection, 0, (("universal_lnb", _("Universal LNB")), ("c_band", _("C-Band")), ("user_defined", _("User defined"))), False)
                                nim.advanced.lnb[x].lofl = configElement(cname + "advanced.lnb" + str(x) + ".lofl", configSequence, [9750], configsequencearg.get("INTEGER", (0, 99999)), False)
                                nim.advanced.lnb[x].lofh = configElement(cname + "advanced.lnb" + str(x) + ".lofh", configSequence, [10600], configsequencearg.get("INTEGER", (0, 99999)), False)
-                               nim.advanced.lnb[x].threshold = configElement(cname + "advanced.lnb" + str(x) + ".threshold", configSequence, [11750], configsequencearg.get("INTEGER", (0, 99999)), False)
+                               nim.advanced.lnb[x].threshold = configElement(cname + "advanced.lnb" + str(x) + ".threshold", configSequence, [11700], configsequencearg.get("INTEGER", (0, 99999)), False)
                                nim.advanced.lnb[x].output_12v = configElement(cname + "advanced.lnb" + str(x) + ".output_12v", configSelection, 0, (("0V", _("0 V")), ("12V", _("12 V"))), False)
                                nim.advanced.lnb[x].increased_voltage = configElement(cname + "advanced.lnb" + str(x) + ".increased_voltage", configSelection, 0, (("no", _("No")), ("yes", _("Yes"))), False)
                                nim.advanced.lnb[x].toneburst = configElement(cname + "advanced.lnb" + str(x) + ".toneburst", configSelection, 0, (("none", _("None")), ("A", _("A")), ("B", _("B"))), False)
@@ -703,19 +766,24 @@ def InitNimManager(nimmgr):
                                nim.advanced.lnb[x].commandOrder = configElement(cname + "advanced.lnb" + str(x) + ".commandOrder", configSelection, 0, ("committed, toneburst", "toneburst, committed", "committed, uncommitted, toneburst", "toneburst, committed, uncommitted", "uncommitted, committed, toneburst", "toneburst, uncommitted, commmitted"), False)
                                nim.advanced.lnb[x].uncommittedDiseqcCommand = configElement(cname + "advanced.lnb" + str(x) + ".uncommittedDiseqcCommand", configSelection, 0, ucsw, False)
                                nim.advanced.lnb[x].diseqcRepeats = configElement(cname + "advanced.lnb" + str(x) + ".diseqcRepeats", configSelection, 0, (("none", _("None")), ("one", _("One")), ("two", _("Two")), ("three", _("Three"))), False)
-                               nim.advanced.lnb[x].longitude = configElement(cname + "advanced.lnb" + str(x) + ".longitude", configSequence, [5,100], configsequencearg.get("FLOAT", [(0,90),(0,999)]), False)
+                               nim.advanced.lnb[x].longitude = configElement(cname + "advanced.lnb" + str(x) + ".longitude", configSequence, [5,100], configsequencearg.get("FLOAT", [(0,359),(0,999)]), False)
                                nim.advanced.lnb[x].longitudeOrientation = configElement(cname + "advanced.lnb" + str(x) + ".longitudeOrientation", configSelection, 0, (("east", _("East")), ("west", _("West"))), False)
-                               nim.advanced.lnb[x].latitude = configElement(cname + "advanced.lnb" + str(x) + ".latitude", configSequence, [50,767], configsequencearg.get("FLOAT", [(0,90),(0,999)]), False)
+                               nim.advanced.lnb[x].latitude = configElement(cname + "advanced.lnb" + str(x) + ".latitude", configSequence, [50,767], configsequencearg.get("FLOAT", [(0,359),(0,999)]), False)
                                nim.advanced.lnb[x].latitudeOrientation = configElement(cname + "advanced.lnb" + str(x) + ".latitudeOrientation", configSelection, 0, (("north", _("North")), ("south", _("South"))), False)
                                nim.advanced.lnb[x].powerMeasurement = configElement(cname + "advanced.lnb" + str(x) + ".powerMeasurement", configSelection, 0, (("yes", _("Yes")), ("no", _("No"))), False)
                                nim.advanced.lnb[x].powerThreshold = configElement(cname + "advanced.lnb" + str(x) + ".powerThreshold", configSequence, [50], configsequencearg.get("INTEGER", (0, 100)), False)
                elif slot.nimType == nimmgr.nimType["DVB-C"]:
                        nim.cable = configElement(cname + "cable", configSelection, 0, nimmgr.cablesList, False);
                elif slot.nimType == nimmgr.nimType["DVB-T"]:
-                       nim.cable = configElement(cname + "terrestrial", configSelection, 0, nimmgr.terrestrialsList, False);
+                       list = []
+                       for x in nimmgr.terrestrialsList:
+                               list.append(x[0])
+                       nim.terrestrial = configElement(cname + "terrestrial", configSelection, 0, list, False);
+                       nim.terrestrial_5V = configElement(cname + "terrestrial_5V", configSelection, 1, (("on", _("On")), ("off", _("Off"))), True);
                else:
                        print "pls add support for this frontend type!"         
 
        nimmgr.sec = SecConfigure(nimmgr)
 
+
 nimmanager = NimManager()