do some late imports
[enigma2.git] / lib / python / Plugins / SystemPlugins / Satfinder / plugin.py
index d4277af8e577e04099364588cb5e3fae72c8f769..c3e270b171fd589f3c26e8ba781b870f1ce331a1 100644 (file)
-from enigma import eTimer, eDVBSatelliteEquipmentControl, eDVBResourceManager, eDVBDiseqcCommand, eDVBResourceManagerPtr, iDVBChannelPtr, iDVBFrontendPtr, iDVBFrontend, eDVBFrontendParametersSatellite, eDVBFrontendParameters
+from enigma import eDVBResourceManager,\
+       eDVBFrontendParametersSatellite, eDVBFrontendParameters
+
 from Screens.Screen import Screen
 from Screens.ScanSetup import ScanSetup
 from Screens.MessageBox import MessageBox
 from Plugins.Plugin import PluginDescriptor
 
 from Components.Label import Label
 from Screens.Screen import Screen
 from Screens.ScanSetup import ScanSetup
 from Screens.MessageBox import MessageBox
 from Plugins.Plugin import PluginDescriptor
 
 from Components.Label import Label
-from Components.ConfigList import ConfigList
-from Components.TunerInfo import TunerInfo
+from Components.Sources.FrontendStatus import FrontendStatus
 from Components.ActionMap import ActionMap
 from Components.ActionMap import ActionMap
-from Components.NimManager import nimmanager
+from Components.NimManager import nimmanager, getConfigSatlist
 from Components.MenuList import MenuList
 from Components.MenuList import MenuList
-from Components.config import config, ConfigSubsection, configElement_nonSave, configNothing, getConfigListEntry, configSelection, currentConfigSelectionElement, configSatlist
+from Components.config import ConfigSelection, getConfigListEntry
 
 class Tuner:
        def __init__(self, frontend):
                self.frontend = frontend
                
        def tune(self, transponder):
 
 class Tuner:
        def __init__(self, frontend):
                self.frontend = frontend
                
        def tune(self, transponder):
-               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, True)
-               self.lastparm = feparm
-               self.frontend.tune(feparm)
+               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):
        
        def retune(self):
-               self.frontend.tune(self.lastparm)
-       
-       def getTransponderData(self):
-               return self.frontend.readTransponderData(True)
+               if self.frontend:
+                       self.frontend.tune(self.lastparm)
 
 
-class Diseqc:
-       def __init__(self, feid = 0):
-               self.ready = False
-               self.feid = feid
-               res_mgr = eDVBResourceManagerPtr()
-               if eDVBResourceManager.getInstance(res_mgr) == 0:
-                       self.raw_channel = iDVBChannelPtr()
-                       if res_mgr.allocateRawChannel(self.raw_channel, self.feid) == 0:
-                               self.frontend = iDVBFrontendPtr()
-                               if self.raw_channel.getFrontend(self.frontend) == 0:
-                                       self.ready = True
+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:
+                       self.raw_channel = res_mgr.allocateRawChannel(self.feid)
+                       if self.raw_channel:
+                               self.frontend = self.raw_channel.getFrontend()
+                               if self.frontend:
+                                       return True
                                else:
                                        print "getFrontend failed"
                        else:
                                print "getRawChannel failed"
                else:
                        print "getResourceManager instance failed"
                                else:
                                        print "getFrontend failed"
                        else:
                                print "getRawChannel failed"
                else:
                        print "getResourceManager instance failed"
-       
-       def getFrontend(self):
-               return self.frontend
-               
-       def command(self, what, param = 0):
-               if self.ready:
-                       cmd = eDVBDiseqcCommand()
-                       if what == "moveWest":
-                               string = 'e03169' + ("%02x" % param)
-                       elif what == "moveEast":
-                               string = 'e03168' + ("%02x" % param)
-                       elif what == "moveTo":
-                               string = 'e0316b' + ("%02x" % param)
-                       elif what == "store":
-                               string = 'e0316a' + ("%02x" % param)
-                       elif what == "limitOn":
-                               string = 'e0316a00'
-                       elif what == "limitOff":
-                               string = 'e03163'
-                       elif what == "limitEast":
-                               string = 'e03166'
-                       elif what == "limitWest":
-                               string = 'e03167'
-                       else:
-                               string = 'e03160' #positioner stop
-                       print "diseqc command:",
-                       print string
-                       
-                       cmd.setCommandString(string)
-                       self.frontend.sendDiseqc(cmd)
-
-class Satfinder(ScanSetup):
-       skin = """
-               <screen position="90,100" size="520,400" title="Tune">
-                       <widget name="config" position="20,10" size="460,240" scrollbarMode="showOnDemand" />
-                       <widget name="introduction" position="20,360" zPosition="-10" size="350,30" font="Regular;23" />
-                       <widget name="snr" text="SNR:" position="0,245" size="60,22" font="Regular;21" />
-                       <widget name="agc" text="AGC:" position="0,270" size="60,22" font="Regular;21" />
-                       <widget name="ber" text="BER:" position="0,295" size="60,22" font="Regular;21" />
-                       <widget name="lock" text="Lock:" position="0,320" size="60,22" font="Regular;21" />
-                       <widget name="snr_percentage" position="220,245" size="60,22" font="Regular;21" />
-                       <widget name="agc_percentage" position="220,270" size="60,22" font="Regular;21" />
-                       <widget name="ber_value" position="220,295" size="60,22" font="Regular;21" />
-                       <widget name="lock_state" position="60,320" size="150,22" font="Regular;21" />
-                       <widget name="snr_bar" position="60,245" size="150,22" />
-                       <widget name="agc_bar" position="60,270" size="150,22" />
-                       <widget name="ber_bar" position="60,295" size="150,22" />
-               </screen>"""
+               return False
 
        def __init__(self, session, feid):
                self.initcomplete = False
                self.feid = feid
 
        def __init__(self, session, feid):
                self.initcomplete = False
                self.feid = feid
-               
-               ScanSetup.__init__(self, session)
-               self.session.nav.stopService()
-               
-               self.diseqc = Diseqc(self.feid)
-               self.tuner = Tuner(self.diseqc.getFrontend())
-               
-               self["snr"] = Label()
-               self["agc"] = Label()
-               self["ber"] = Label()
-               self["lock"] = Label()
-               self["snr_percentage"] = TunerInfo(TunerInfo.SNR_PERCENTAGE, frontendfkt = self.diseqc.getFrontend)
-               self["agc_percentage"] = TunerInfo(TunerInfo.AGC_PERCENTAGE, frontendfkt = self.diseqc.getFrontend)
-               self["ber_value"] = TunerInfo(TunerInfo.BER_VALUE, frontendfkt = self.diseqc.getFrontend)
-               self["snr_bar"] = TunerInfo(TunerInfo.SNR_BAR, frontendfkt = self.diseqc.getFrontend)
-               self["agc_bar"] = TunerInfo(TunerInfo.AGC_BAR, frontendfkt = self.diseqc.getFrontend)
-               self["ber_bar"] = TunerInfo(TunerInfo.BER_BAR, frontendfkt = self.diseqc.getFrontend)
-               self["lock_state"] = TunerInfo(TunerInfo.LOCK_STATE, frontendfkt = self.diseqc.getFrontend)
+               self.oldref = None
 
 
-               self["introduction"].setText("")
-               
-               self.statusTimer = eTimer()
-               self.statusTimer.timeout.get().append(self.updateStatus)
-               self.statusTimer.start(50, False)
+               if not self.openFrontend():
+                       self.oldref = session.nav.getCurrentlyPlayingServiceReference()
+                       session.nav.stopService() # try to disable foreground service
+                       if not self.openFrontend():
+                               if session.pipshown: # try to disable pip
+                                       session.pipshown = False
+                                       del session.pip
+                                       if not self.openFrontend():
+                                               self.frontend = None # in normal case this should not happen
 
 
+               ScanSetup.__init__(self, session)
+               self.tuner = Tuner(self.frontend)
+               self["introduction"].setText("")
+               self["Frontend"] = FrontendStatus(frontend_source = lambda : self.frontend, update_interval = 100)
                self.initcomplete = True
                self.initcomplete = True
-               
-       def updateStatus(self):
-               self["snr_percentage"].update()
-               self["agc_percentage"].update()
-               self["ber_value"].update()
-               self["snr_bar"].update()
-               self["agc_bar"].update()
-               self["ber_bar"].update()
-               self["lock_state"].update()
-               
+
        def createSetup(self):
                self.typeOfTuningEntry = None
                self.satEntry = None
        def createSetup(self):
                self.typeOfTuningEntry = None
                self.satEntry = None
-
+               
                self.list = []
                self.list = []
-               self.typeOfTuningEntry = getConfigListEntry(_('Tune'), config.tuning.type)
+               self.typeOfTuningEntry = getConfigListEntry(_('Tune'), self.tuning_type)
                self.list.append(self.typeOfTuningEntry)
                self.list.append(self.typeOfTuningEntry)
-               self.satEntry = getConfigListEntry(_('Satellite'), config.tuning.sat)
+               self.satEntry = getConfigListEntry(_('Satellite'), self.tuning_sat)
                self.list.append(self.satEntry)
                self.list.append(self.satEntry)
-               if currentConfigSelectionElement(config.tuning.type) == "manual_transponder":
-                       self.list.append(getConfigListEntry(_('Frequency'), config.scan.sat.frequency))
-                       self.list.append(getConfigListEntry(_('Inversion'), config.scan.sat.inversion))
-                       self.list.append(getConfigListEntry(_('Symbol Rate'), config.scan.sat.symbolrate))
-                       self.list.append(getConfigListEntry(_("Polarity"), config.scan.sat.polarization))
-                       self.list.append(getConfigListEntry(_("FEC"), config.scan.sat.fec))
-               elif currentConfigSelectionElement(config.tuning.type) == "predefined_transponder":
-                       self.list.append(getConfigListEntry(_("Transponder"), config.tuning.transponder))
+               if self.tuning_type.value == "manual_transponder":
+                       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))
+               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)
 
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
@@ -170,39 +143,42 @@ class Satfinder(ScanSetup):
                        self.updateSats()
                        self.createSetup()
 
                        self.updateSats()
                        self.createSetup()
 
+       def sat_changed(self, config_element):
+               self.newConfig()
+               self.retune(config_element)
+
        def retune(self, configElement):
                returnvalue = (0, 0, 0, 0, 0, 0, 0)
        def retune(self, configElement):
                returnvalue = (0, 0, 0, 0, 0, 0, 0)
-               satpos = config.tuning.sat.vals[config.tuning.sat.value][1]
-               if currentConfigSelectionElement(config.tuning.type) == "manual_transponder":
-                       returnvalue = (config.scan.sat.frequency.value[0], config.scan.sat.symbolrate.value[0], config.scan.sat.polarization.value, config.scan.sat.fec.value, config.scan.sat.inversion.value, satpos)
-               elif currentConfigSelectionElement(config.tuning.type) == "predefined_transponder":
-                       transponder = nimmanager.getTransponders(config.tuning.sat.vals[config.tuning.sat.value][1])[config.tuning.transponder.value]
-                       returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, config.tuning.sat.vals[config.tuning.sat.value][1], satpos)
-               self.tune(returnvalue)
+               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)
+                       self.tune(returnvalue)
 
        def createConfig(self, foo):
 
        def createConfig(self, foo):
-               config.tuning = ConfigSubsection()
-               
-               config.tuning.type = configElement_nonSave("config.tuning.type", configSelection, 0, (("manual_transponder", _("Manual transponder")), ("predefined_transponder", _("Predefined satellite"))))
-               config.tuning.sat = configElement_nonSave("config.tuning.sat", configSatlist, 192, nimmanager.getRotorSatListForNim(self.feid))
+               self.tuning_transponder = None
+               self.tuning_type = ConfigSelection(choices = [("manual_transponder", _("Manual transponder")), ("predefined_transponder", _("Predefined transponder"))])
+               self.tuning_sat = getConfigSatlist(192, nimmanager.getSatListForNim(self.feid))
                ScanSetup.createConfig(self, None)
                
                self.updateSats()
                ScanSetup.createConfig(self, None)
                
                self.updateSats()
-
-               config.tuning.type.addNotifier(self.retune)
-               config.tuning.sat.addNotifier(self.retune)
-               config.scan.sat.frequency.addNotifier(self.retune)
-               config.scan.sat.inversion.addNotifier(self.retune)
-               config.scan.sat.symbolrate.addNotifier(self.retune)
-               config.scan.sat.polarization.addNotifier(self.retune)
-               config.scan.sat.fec.addNotifier(self.retune)
-               config.tuning.transponder.addNotifier(self.retune)
                
                
+               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)
+
        def updateSats(self):
        def updateSats(self):
-               satnum = config.tuning.sat.value
-               satlist = config.tuning.sat.vals
-               if len(satlist):
-                       transponderlist = nimmanager.getTransponders(satlist[satnum][1])
+               orb_pos = self.tuning_sat.orbital_position
+               if orb_pos is not None:
+                       transponderlist = nimmanager.getTransponders(orb_pos)
                        list = []
                        for x in transponderlist:
                                if x[3] == 0:
                        list = []
                        for x in transponderlist:
                                if x[3] == 0:
@@ -213,6 +189,8 @@ 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:
                                        fec = "FEC_AUTO"
                                elif x[4] == 1:
                                if x[4] == 0:
                                        fec = "FEC_AUTO"
                                elif x[4] == 1:
@@ -229,22 +207,29 @@ class Satfinder(ScanSetup):
                                        fec = "FEC_8_9"
                                elif x[4] == 6:
                                        fec = "FEC_None"
                                        fec = "FEC_8_9"
                                elif x[4] == 6:
                                        fec = "FEC_None"
+                               else:
+                                       fec = "FEC_Unknown"
                                list.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
                                list.append(str(x[1]) + "," + str(x[2]) + "," + pol + "," + fec)
-                       config.tuning.transponder = configElement_nonSave("config.tuning.transponder", configSelection, 0, list)
-       
+                       self.tuning_transponder = ConfigSelection(choices = list)
+                       self.tuning_transponder.addNotifier(self.retune, initial_call = False)
+
        def keyGo(self):
        def keyGo(self):
-               returnvalue = (0, 0, 0, 0, 0, 0, 0)
-               satpos = config.tuning.sat.vals[config.tuning.sat.value][1]
-               if currentConfigSelectionElement(config.tuning.type) == "manual_transponder":
-                       returnvalue = (config.scan.sat.frequency.value[0], config.scan.sat.symbolrate.value[0], config.scan.sat.polarization.value, config.scan.sat.fec.value, config.scan.sat.inversion.value, satpos)
-               elif currentConfigSelectionElement(config.tuning.type) == "predefined_transponder":
-                       transponder = nimmanager.getTransponders(config.tuning.sat.vals[config.tuning.sat.value][1])[config.tuning.transponder.value]
-                       returnvalue = (int(transponder[1] / 1000), int(transponder[2] / 1000), transponder[3], transponder[4], 2, config.tuning.sat.vals[config.tuning.sat.value][1], satpos)
-               self.close(returnvalue)
+               self.retune(self.tuning_type)
 
 
-       def keyCancel(self):
+       def restartPrevService(self, yesno):
+               if yesno:
+                       if self.frontend:
+                               self.frontend = None
+                               del self.raw_channel
+                       self.session.nav.playService(self.oldref)
                self.close(None)
                self.close(None)
-               
+
+       def keyCancel(self):
+               if self.oldref:
+                       self.session.openWithCallback(self.restartPrevService, MessageBox, _("Zap back to service before satfinder?"), MessageBox.TYPE_YESNO)
+               else:
+                       self.restartPrevService(False)
+
        def tune(self, transponder):
                if self.initcomplete:
                        if transponder is not None:
        def tune(self, transponder):
                if self.initcomplete:
                        if transponder is not None:
@@ -259,11 +244,11 @@ class NimSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
 
        def __init__(self, session):
                Screen.__init__(self, session)
 
-               nimlist = nimmanager.getNimListOfType(nimmanager.nimType["DVB-S"])
+               nimlist = nimmanager.getNimListOfType("DVB-S")
                nimMenuList = []
                for x in nimlist:
                nimMenuList = []
                for x in nimlist:
-                       nimMenuList.append((_("NIM ") + (["A", "B", "C", "D"][x]) + ": " + nimmanager.getNimName(x) + " (" + nimmanager.getNimTypeName(x) + ")", x))
-               
+                       nimMenuList.append((nimmanager.nim_slots[x].friendly_full_description, x))
+
                self["nimlist"] = MenuList(nimMenuList)
 
                self["actions"] = ActionMap(["OkCancelActions"],
                self["nimlist"] = MenuList(nimMenuList)
 
                self["actions"] = ActionMap(["OkCancelActions"],
@@ -273,23 +258,30 @@ class NimSelection(Screen):
                }, -1)
 
        def okbuttonClick(self):
                }, -1)
 
        def okbuttonClick(self):
-               selection = self["nimlist"].getCurrent()
-               self.session.open(Satfinder, selection[1])
+               selection = self["nimlist"].getCurrent()[1]
+               self.session.open(Satfinder, selection)
 
 def SatfinderMain(session, **kwargs):
 
 def SatfinderMain(session, **kwargs):
-       nimList = nimmanager.getNimListOfType(nimmanager.nimType["DVB-S"])
+       nimList = nimmanager.getNimListOfType("DVB-S")
        if len(nimList) == 0:
        if len(nimList) == 0:
-               session.open(MessageBox, _("No positioner capable frontend found."), MessageBox.TYPE_ERROR)
+               session.open(MessageBox, _("No satellite frontend found!!"), MessageBox.TYPE_ERROR)
        else:
                if session.nav.RecordTimer.isRecording():
        else:
                if session.nav.RecordTimer.isRecording():
-                       session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to configure the positioner."), MessageBox.TYPE_ERROR)
+                       session.open(MessageBox, _("A recording is currently running. Please stop the recording before trying to start the satfinder."), MessageBox.TYPE_ERROR)
                else:
                        if len(nimList) == 1:
                                session.open(Satfinder, nimList[0])
                else:
                        if len(nimList) == 1:
                                session.open(Satfinder, nimList[0])
-                       elif len(nimList) > 1:
-                               session.open(NimSelection)
                        else:
                        else:
-                               session.open(MessageBox, _("No tuner is configured for use with a diseqc positioner!"), MessageBox.TYPE_ERROR)
+                               session.open(NimSelection)
+
+def SatfinderStart(menuid, **kwargs):
+       if menuid == "scan":
+               return [(_("Satfinder"), SatfinderMain, "satfinder", None)]
+       else:
+               return []
 
 def Plugins(**kwargs):
 
 def Plugins(**kwargs):
-       return PluginDescriptor(name="Satfinder", description="Helps setting up your dish", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=SatfinderMain)
+       if (nimmanager.hasNimType("DVB-S")):
+               return PluginDescriptor(name=_("Satfinder"), description="Helps setting up your dish", where = PluginDescriptor.WHERE_MENU, fnc=SatfinderStart)
+       else:
+               return []