Merge commit 'origin/bug_138_networkwizard_fixes' into experimental
[enigma2.git] / lib / python / Plugins / SystemPlugins / Satfinder / plugin.py
index 9ad113021640c2158731f5020ba17a6a059524cd..d4fe6b58d5d5f89c015e3e04d1a81e1e6c47194f 100644 (file)
@@ -1,4 +1,4 @@
-from enigma import eTimer, eDVBResourceManager,\
+from enigma import eDVBResourceManager,\
        eDVBFrontendParametersSatellite, eDVBFrontendParameters
 
 from Screens.Screen import Screen
        eDVBFrontendParametersSatellite, eDVBFrontendParameters
 
 from Screens.Screen import Screen
@@ -12,73 +12,9 @@ from Components.ActionMap import ActionMap
 from Components.NimManager import nimmanager, getConfigSatlist
 from Components.MenuList import MenuList
 from Components.config import ConfigSelection, getConfigListEntry
 from Components.NimManager import nimmanager, getConfigSatlist
 from Components.MenuList import MenuList
 from Components.config import ConfigSelection, getConfigListEntry
-
-class Tuner:
-       def __init__(self, frontend):
-               self.frontend = frontend
-               
-       def tune(self, transponder):
-               if self.frontend:
-                       print "tuning to transponder with data", transponder
-                       parm = eDVBFrontendParametersSatellite()
-                       parm.frequency = transponder[0] * 1000
-                       parm.symbol_rate = transponder[1] * 1000
-                       parm.polarisation = transponder[2]
-                       parm.fec = transponder[3]
-                       parm.inversion = transponder[4]
-                       parm.orbital_position = transponder[5]
-                       parm.system = 0  # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2)
-                       parm.modulation = 1 # FIXMEE !! HARDCODED QPSK 
-                       feparm = eDVBFrontendParameters()
-                       feparm.setDVBS(parm)
-                       self.lastparm = feparm
-                       self.frontend.tune(feparm)
-       
-       def retune(self):
-               if self.frontend:
-                       self.frontend.tune(self.lastparm)
+from Components.TuneTest import Tuner
 
 class Satfinder(ScanSetup):
 
 class Satfinder(ScanSetup):
-       skin = """
-               <screen position="90,100" size="520,400" title="Tune">
-                       <widget name="config" position="20,10" size="460,210" scrollbarMode="showOnDemand" />
-                       <widget name="introduction" position="20,360" zPosition="-10" size="350,30" font="Regular;23" />
-                       <eLabel text="dB:" position="23,230" size="60,22" font="Regular;21" />
-                       <eLabel text="SNR:" position="23,255" size="60,22" font="Regular;21" />
-                       <eLabel text="AGC:" position="23,280" size="60,22" font="Regular;21" />
-                       <eLabel text="BER:" position="23,305" size="60,22" font="Regular;21" />
-                       <eLabel text="Lock:" position="23,330" size="60,22" font="Regular;21" />
-                       <widget source="Frontend" render="Label" position="295,230" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">SNRdB</convert>
-                       </widget>
-                       <widget source="Frontend" render="Label" position="295,255" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">SNR</convert>
-                       </widget>
-                       <widget source="Frontend" render="Label" position="295,280" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">AGC</convert>
-                       </widget>
-                       <widget source="Frontend" render="Label" position="295,305" size="60,22" font="Regular;21" >
-                               <convert type="FrontendInfo">BER</convert>
-                       </widget>
-                       <widget source="Frontend" render="Progress" position="85,257" size="200,22" >
-                               <convert type="FrontendInfo">SNR</convert>
-                       </widget>
-                       <widget source="Frontend" render="Progress" position="85,282" size="200,22" >
-                               <convert type="FrontendInfo">AGC</convert>
-                       </widget>
-                       <widget source="Frontend" render="Progress" position="85,307" size="200,22" >
-                               <convert type="FrontendInfo">BER</convert>
-                       </widget>
-                       <widget source="Frontend" render="Pixmap" pixmap="key_green-fs8.png" position="295,330" zPosition="4" size="28,20" alphatest="on" >
-                               <convert type="FrontendInfo">LOCK</convert>
-                       <convert type="ConditionalShowHide" />
-                       </widget>
-                       <widget source="Frontend" render="Pixmap" pixmap="key_red-fs8.png" position="295,330" zPosition="4" size="28,20" alphatest="on" >
-                               <convert type="FrontendInfo">LOCK</convert>
-                       <convert type="ConditionalShowHide">Invert</convert>
-                       </widget>
-               </screen>"""
-
        def openFrontend(self):
                res_mgr = eDVBResourceManager.getInstance()
                if res_mgr:
        def openFrontend(self):
                res_mgr = eDVBResourceManager.getInstance()
                if res_mgr:
@@ -115,31 +51,54 @@ class Satfinder(ScanSetup):
                self["introduction"].setText("")
                self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100)
                self.initcomplete = True
                self["introduction"].setText("")
                self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100)
                self.initcomplete = True
+               self.onClose.append(self.__onClose)
+
+       def __onClose(self):
+               self.session.nav.playService(self.oldref)
 
        def createSetup(self):
                self.typeOfTuningEntry = None
                self.satEntry = None
                
                self.list = []
 
        def createSetup(self):
                self.typeOfTuningEntry = None
                self.satEntry = None
                
                self.list = []
+
                self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning_type)
                self.list.append(self.typeOfTuningEntry)
                self.satEntry = getConfigListEntry(_('Satellite'), self.tuning_sat)
                self.list.append(self.satEntry)
                self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning_type)
                self.list.append(self.typeOfTuningEntry)
                self.satEntry = getConfigListEntry(_('Satellite'), self.tuning_sat)
                self.list.append(self.satEntry)
+
+               nim = nimmanager.nim_slots[self.feid]
+
+               self.systemEntry = None
                if self.tuning_type.value == "manual_transponder":
                if self.tuning_type.value == "manual_transponder":
+                       if nim.isCompatible("DVB-S2"):
+                               self.systemEntry = getConfigListEntry(_('System'), self.scan_sat.system)
+                               self.list.append(self.systemEntry)
+                       else:
+                               # downgrade to dvb-s, in case a -s2 config was active
+                               self.scan_sat.system.value = eDVBFrontendParametersSatellite.System_DVB_S
                        self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                        self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
                        self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
                        self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
                        self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                        self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
                        self.list.append(getConfigListEntry(_('Symbol Rate'), self.scan_sat.symbolrate))
                        self.list.append(getConfigListEntry(_("Polarity"), self.scan_sat.polarization))
-                       self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
+                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S:
+                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec))
+                       elif self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
+                               self.list.append(getConfigListEntry(_("FEC"), self.scan_sat.fec_s2))
+                               self.modulationEntry = getConfigListEntry(_('Modulation'), self.scan_sat.modulation)
+                               self.list.append(self.modulationEntry)
+                               self.list.append(getConfigListEntry(_('Rolloff'), self.scan_sat.rolloff))
+                               self.list.append(getConfigListEntry(_('Pilot'), self.scan_sat.pilot))
                elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
                        self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
        def newConfig(self):
                elif self.tuning_transponder and self.tuning_type.value == "predefined_transponder":
                        self.list.append(getConfigListEntry(_("Transponder"), self.tuning_transponder))
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
        def newConfig(self):
-               if self["config"].getCurrent() == self.typeOfTuningEntry:
+               cur = self["config"].getCurrent()
+               if cur in (self.typeOfTuningEntry, self.systemEntry):
                        self.createSetup()
                        self.createSetup()
-               elif self["config"].getCurrent() == self.satEntry:
+               elif cur == self.satEntry:
                        self.updateSats()
                        self.createSetup()
 
                        self.updateSats()
                        self.createSetup()
 
@@ -148,16 +107,33 @@ class Satfinder(ScanSetup):
                self.retune(config_element)
 
        def retune(self, configElement):
                self.retune(config_element)
 
        def retune(self, configElement):
-               returnvalue = (0, 0, 0, 0, 0, 0, 0)
-               satpos = self.tuning_sat.orbital_position
-               
-               if satpos is not None:
-                       if self.tuning_type.value == "manual_transponder":
-                               returnvalue = (self.scan_sat.frequency.value, self.scan_sat.symbolrate.value, self.scan_sat.polarization.index, self.scan_sat.fec.index, self.scan_sat.inversion.index, satpos)
-                       elif self.tuning_type.value == "predefined_transponder":
-                               transponder = nimmanager.getTransponders(satpos)[self.tuning_transponder.index]
-                               returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, satpos)
+               returnvalue = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+               satpos = int(self.tuning_sat.value)
+               if self.tuning_type.value == "manual_transponder":
+                       if self.scan_sat.system.value == eDVBFrontendParametersSatellite.System_DVB_S2:
+                               fec = self.scan_sat.fec_s2.value
+                       else:
+                               fec = self.scan_sat.fec.value
+                       returnvalue = (
+                               self.scan_sat.frequency.value,
+                               self.scan_sat.symbolrate.value,
+                               self.scan_sat.polarization.value,
+                               fec,
+                               self.scan_sat.inversion.value,
+                               satpos,
+                               self.scan_sat.system.value,
+                               self.scan_sat.modulation.value,
+                               self.scan_sat.rolloff.value,
+                               self.scan_sat.pilot.value)
                        self.tune(returnvalue)
                        self.tune(returnvalue)
+               elif self.tuning_type.value == "predefined_transponder":
+                       tps = nimmanager.getTransponders(satpos)
+                       l = len(tps)
+                       if l > self.tuning_transponder.index:
+                               transponder = tps[self.tuning_transponder.index]
+                               returnvalue = (transponder[1] / 1000, transponder[2] / 1000,
+                                       transponder[3], transponder[4], 2, satpos, transponder[5], transponder[6], transponder[8], transponder[9])
+                               self.tune(returnvalue)
 
        def createConfig(self, foo):
                self.tuning_transponder = None
 
        def createConfig(self, foo):
                self.tuning_transponder = None
@@ -166,20 +142,21 @@ class Satfinder(ScanSetup):
                ScanSetup.createConfig(self, None)
                
                self.updateSats()
                ScanSetup.createConfig(self, None)
                
                self.updateSats()
-               
-               self.tuning_type.addNotifier(self.retune, initial_call = False)
-               self.tuning_sat.addNotifier(self.sat_changed, initial_call = False)
-               self.scan_sat.frequency.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.inversion.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.symbolrate.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.polarization.addNotifier(self.retune, initial_call = False)
-               self.scan_sat.fec.addNotifier(self.retune, initial_call = False)
+
+               for x in (self.tuning_type, self.tuning_sat, self.scan_sat.frequency,
+                       self.scan_sat.inversion, self.scan_sat.symbolrate,
+                       self.scan_sat.polarization, self.scan_sat.fec, self.scan_sat.pilot,
+                       self.scan_sat.fec_s2, self.scan_sat.fec, self.scan_sat.modulation,
+                       self.scan_sat.rolloff, self.scan_sat.system):
+                       x.addNotifier(self.retune, initial_call = False)
 
        def updateSats(self):
                orb_pos = self.tuning_sat.orbital_position
                if orb_pos is not None:
                        transponderlist = nimmanager.getTransponders(orb_pos)
                        list = []
 
        def updateSats(self):
                orb_pos = self.tuning_sat.orbital_position
                if orb_pos is not None:
                        transponderlist = nimmanager.getTransponders(orb_pos)
                        list = []
+                       default = None
+                       index = 0
                        for x in transponderlist:
                                if x[3] == 0:
                                        pol = "H"
                        for x in transponderlist:
                                if x[3] == 0:
                                        pol = "H"
@@ -189,24 +166,38 @@ class Satfinder(ScanSetup):
                                        pol = "CL"
                                elif x[3] == 3:
                                        pol = "CR"
                                        pol = "CL"
                                elif x[3] == 3:
                                        pol = "CR"
+                               else:
+                                       pol = "??"
                                if x[4] == 0:
                                if x[4] == 0:
-                                       fec = "FEC_AUTO"
+                                       fec = "FEC Auto"
                                elif x[4] == 1:
                                elif x[4] == 1:
-                                       fec = "FEC_1_2"
+                                       fec = "FEC 1/2"
                                elif x[4] == 2:
                                elif x[4] == 2:
-                                       fec = "FEC_2_3"
+                                       fec = "FEC 2/3"
                                elif x[4] == 3:
                                elif x[4] == 3:
-                                       fec = "FEC_3_4"
+                                       fec = "FEC 3/4"
                                elif x[4] == 4:
                                elif x[4] == 4:
-                                       fec = "FEC_5_6"
+                                       fec = "FEC 5/6"
                                elif x[4] == 5:
                                elif x[4] == 5:
-                                       fec = "FEC_7_8"
-                               elif x[4] == 5:
-                                       fec = "FEC_8_9"
+                                       fec = "FEC 7/8"
                                elif x[4] == 6:
                                elif x[4] == 6:
-                                       fec = "FEC_None"
-                               list.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
-                       self.tuning_transponder = ConfigSelection(choices = list)
+                                       fec = "FEC 8/9"
+                               elif x[4] == 7:
+                                       fec = "FEC 3/5"
+                               elif x[4] == 8:
+                                       fec = "FEC 4/5"
+                               elif x[4] == 9:
+                                       fec = "FEC 9/10"
+                               elif x[4] == 15:
+                                       fec = "FEC None"
+                               else:
+                                       fec = "FEC Unknown"
+                               e = str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec
+                               if default is None:
+                                       default = str(index)
+                               list.append((str(index), e))
+                               index += 1
+                       self.tuning_transponder = ConfigSelection(choices = list, default = default)
                        self.tuning_transponder.addNotifier(self.retune, initial_call = False)
 
        def keyGo(self):
                        self.tuning_transponder.addNotifier(self.retune, initial_call = False)
 
        def keyGo(self):
@@ -217,7 +208,8 @@ class Satfinder(ScanSetup):
                        if self.frontend:
                                self.frontend = None
                                del self.raw_channel
                        if self.frontend:
                                self.frontend = None
                                del self.raw_channel
-                       self.session.nav.playService(self.oldref)
+               else:
+                       self.oldref = None
                self.close(None)
 
        def keyCancel(self):
                self.close(None)
 
        def keyCancel(self):
@@ -231,10 +223,10 @@ class Satfinder(ScanSetup):
                        if transponder is not None:
                                self.tuner.tune(transponder)
 
                        if transponder is not None:
                                self.tuner.tune(transponder)
 
-class NimSelection(Screen):
+class SatNimSelection(Screen):
        skin = """
        skin = """
-               <screen position="140,165" size="400,100" title="select Slot">
-                       <widget name="nimlist" position="20,10" size="360,75" />
+               <screen position="140,165" size="400,130" title="select Slot">
+                       <widget name="nimlist" position="20,10" size="360,100" />
                </screen>"""
                
        def __init__(self, session):
                </screen>"""
                
        def __init__(self, session):
@@ -258,7 +250,13 @@ class NimSelection(Screen):
                self.session.open(Satfinder, selection)
 
 def SatfinderMain(session, **kwargs):
                self.session.open(Satfinder, selection)
 
 def SatfinderMain(session, **kwargs):
-       nimList = nimmanager.getNimListOfType("DVB-S")
+       nims = nimmanager.getNimListOfType("DVB-S")
+
+       nimList = []
+       for x in nims:
+               if not nimmanager.getNimConfig(x).configMode.value in ("loopthrough", "satposdepends", "nothing"):
+                       nimList.append(x)
+
        if len(nimList) == 0:
                session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
        else:
        if len(nimList) == 0:
                session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
        else:
@@ -268,11 +266,11 @@ def SatfinderMain(session, **kwargs):
                        if len(nimList) == 1:
                                session.open(Satfinder, nimList[0])
                        else:
                        if len(nimList) == 1:
                                session.open(Satfinder, nimList[0])
                        else:
-                               session.open(NimSelection)
+                               session.open(SatNimSelection)
 
 def SatfinderStart(menuid, **kwargs):
        if menuid == "scan":
 
 def SatfinderStart(menuid, **kwargs):
        if menuid == "scan":
-               return [(_("Satfinder"), SatfinderMain)]
+               return [(_("Satfinder"), SatfinderMain, "satfinder", None)]
        else:
                return []
 
        else:
                return []