Support turbo2.
[vuplus_dvbapp] / lib / python / Screens / Satconfig.py
index d5249b9..564541b 100644 (file)
@@ -1,4 +1,4 @@
-from enigma import eDVBDB
+from enigma import eDVBDB, getLinkedSlotID, isFBCLink
 from Screen import Screen
 from Components.SystemInfo import SystemInfo
 from Components.ActionMap import ActionMap
 from Screen import Screen
 from Components.SystemInfo import SystemInfo
 from Components.ActionMap import ActionMap
@@ -10,11 +10,15 @@ from Components.config import getConfigListEntry, config, ConfigNothing, ConfigS
 from Components.Sources.List import List
 from Screens.MessageBox import MessageBox
 from Screens.ChoiceBox import ChoiceBox
 from Components.Sources.List import List
 from Screens.MessageBox import MessageBox
 from Screens.ChoiceBox import ChoiceBox
+from Screens.ServiceStopScreen import ServiceStopScreen
 
 from time import mktime, localtime
 from datetime import datetime
 
 
 from time import mktime, localtime
 from datetime import datetime
 
-class NimSetup(Screen, ConfigListScreen):
+from Components.PluginComponent import plugins
+from Plugins.Plugin import PluginDescriptor
+
+class NimSetup(Screen, ConfigListScreen, ServiceStopScreen):
        def createSimpleSetup(self, list, mode):
                nim = self.nimConfig
                if mode == "single":
        def createSimpleSetup(self, list, mode):
                nim = self.nimConfig
                if mode == "single":
@@ -57,7 +61,7 @@ class NimSetup(Screen, ConfigListScreen):
                
        def createConfigMode(self):
                if self.nim.isCompatible("DVB-S"):
                
        def createConfigMode(self):
                if self.nim.isCompatible("DVB-S"):
-                       choices = { "nothing": _("nothing connected"),
+                       choices = { "nothing": _("not configured"),
                                                "simple": _("simple"),
                                                "advanced": _("advanced")}
                        #if len(nimmanager.getNimListOfType(nimmanager.getNimType(self.slotid), exception = x)) > 0:
                                                "simple": _("simple"),
                                                "advanced": _("advanced")}
                        #if len(nimmanager.getNimListOfType(nimmanager.getNimType(self.slotid), exception = x)) > 0:
@@ -69,12 +73,16 @@ class NimSetup(Screen, ConfigListScreen):
                                choices["satposdepends"] = _("second cable of motorized LNB")
                        if len(nimmanager.canConnectTo(self.slotid)) > 0:
                                choices["loopthrough"] = _("loopthrough to")
                                choices["satposdepends"] = _("second cable of motorized LNB")
                        if len(nimmanager.canConnectTo(self.slotid)) > 0:
                                choices["loopthrough"] = _("loopthrough to")
+                       if isFBCLink(self.nim.slot):
+                               choices = { "nothing": _("not configured"),
+                                               "advanced": _("advanced")}
                        self.nimConfig.configMode.setChoices(choices, default = "nothing")
 
        def createSetup(self):
                print "Creating setup"
                self.list = [ ]
 
                        self.nimConfig.configMode.setChoices(choices, default = "nothing")
 
        def createSetup(self):
                print "Creating setup"
                self.list = [ ]
 
+               self.multiType = None
                self.configMode = None
                self.diseqcModeEntry = None
                self.advancedSatsEntry = None
                self.configMode = None
                self.diseqcModeEntry = None
                self.advancedSatsEntry = None
@@ -93,6 +101,13 @@ class NimSetup(Screen, ConfigListScreen):
                self.advancedType = None
                self.advancedManufacturer = None
                self.advancedSCR = None
                self.advancedType = None
                self.advancedManufacturer = None
                self.advancedSCR = None
+               self.advancedDiction = None
+               self.advancedConnected = None
+               
+               if self.nim.isMultiType():
+                       multiType = self.nimConfig.multiType
+                       self.multiType = getConfigListEntry(_("Tuner type"), multiType)
+                       self.list.append(self.multiType)
 
                if self.nim.isCompatible("DVB-S"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
 
                if self.nim.isCompatible("DVB-S"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
@@ -198,11 +213,19 @@ class NimSetup(Screen, ConfigListScreen):
                checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
                        self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
                checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
                        self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
                        self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
-                       self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, \
-                       self.uncommittedDiseqcCommand, self.cableScanType)
+                       self.advancedType, self.advancedSCR, self.advancedDiction, self.advancedManufacturer, self.advancedUnicable, self.advancedConnected, \
+                       self.uncommittedDiseqcCommand, self.cableScanType, self.multiType)
+               if self["config"].getCurrent() == self.multiType:
+                       update_slots = [self.slotid]
+                       from Components.NimManager import InitNimManager
+                       InitNimManager(nimmanager, update_slots)
+                       self.nim = nimmanager.nim_slots[self.slotid]
+                       self.nimConfig = self.nim.config
+                       
                for x in checkList:
                        if self["config"].getCurrent() == x:
                                self.createSetup()
                for x in checkList:
                        if self["config"].getCurrent() == x:
                                self.createSetup()
+                               break
 
        def run(self):
                if self.have_advanced and self.nim.config_mode == "advanced":
 
        def run(self):
                if self.have_advanced and self.nim.config_mode == "advanced":
@@ -221,7 +244,7 @@ class NimSetup(Screen, ConfigListScreen):
        def fillListWithAdvancedSatEntrys(self, Sat):
                lnbnum = int(Sat.lnb.value)
                currLnb = self.nimConfig.advanced.lnb[lnbnum]
        def fillListWithAdvancedSatEntrys(self, Sat):
                lnbnum = int(Sat.lnb.value)
                currLnb = self.nimConfig.advanced.lnb[lnbnum]
-               
+               diction = None
                if isinstance(currLnb, ConfigNothing):
                        currLnb = None
 
                if isinstance(currLnb, ConfigNothing):
                        currLnb = None
 
@@ -230,6 +253,10 @@ class NimSetup(Screen, ConfigListScreen):
                self.list.append(self.advancedLnbsEntry)
 
                if currLnb:
                self.list.append(self.advancedLnbsEntry)
 
                if currLnb:
+                       if isFBCLink(self.nim.slot):
+                               if currLnb.lof.value != "unicable":
+                                       currLnb.lof.value = "unicable"
+
                        self.list.append(getConfigListEntry(_("Priority"), currLnb.prio))
                        self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
                        self.list.append(self.advancedLof)
                        self.list.append(getConfigListEntry(_("Priority"), currLnb.prio))
                        self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
                        self.list.append(self.advancedLof)
@@ -243,40 +270,73 @@ class NimSetup(Screen, ConfigListScreen):
                                self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable)
                                self.list.append(self.advancedUnicable)
                                if currLnb.unicable.value == "unicable_user":
                                self.advancedUnicable = getConfigListEntry("Unicable "+_("Configuration Mode"), currLnb.unicable)
                                self.list.append(self.advancedUnicable)
                                if currLnb.unicable.value == "unicable_user":
-                                       self.advancedSCR = getConfigListEntry(_("Channel"), currLnb.satcruser)
+                                       self.advancedDiction = getConfigListEntry(_("Diction"), currLnb.dictionuser)
+                                       self.list.append(self.advancedDiction)
+
+                                       if currLnb.dictionuser.value == "EN50494":
+                                               satcr = currLnb.satcruserEN50494
+                                               stcrvco = currLnb.satcrvcouserEN50494[currLnb.satcruserEN50494.index]
+                                       elif currLnb.dictionuser.value == "EN50607":
+                                               satcr = currLnb.satcruserEN50607
+                                               stcrvco = currLnb.satcrvcouserEN50607[currLnb.satcruserEN50607.index]
+
+                                       self.advancedSCR = getConfigListEntry(_("Channel"), satcr)
                                        self.list.append(self.advancedSCR)
                                        self.list.append(self.advancedSCR)
-                                       self.list.append(getConfigListEntry(_("Frequency"), currLnb.satcrvcouser[currLnb.satcruser.index]))
+                                       self.list.append(getConfigListEntry(_("Frequency"), stcrvco))
+
                                        self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
                                        self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
                                        self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
                                elif currLnb.unicable.value == "unicable_matrix":
                                        manufacturer_name = currLnb.unicableMatrixManufacturer.value
                                        manufacturer = currLnb.unicableMatrix[manufacturer_name]
                                        self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
                                        self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
                                        self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
                                elif currLnb.unicable.value == "unicable_matrix":
                                        manufacturer_name = currLnb.unicableMatrixManufacturer.value
                                        manufacturer = currLnb.unicableMatrix[manufacturer_name]
+#                                      if "product" in manufacturer.content:
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer)
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableMatrixManufacturer)
-                                       self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
-                                       self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
                                        self.list.append(self.advancedManufacturer)
                                        self.list.append(self.advancedManufacturer)
-                                       self.list.append(self.advancedType)
-                                       self.list.append(self.advancedSCR)
-                                       self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
+                                       if product_name in manufacturer.scr:
+                                               diction = manufacturer.diction[product_name].value
+                                               self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+                                               self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+                                               self.list.append(self.advancedType)
+                                               self.list.append(self.advancedSCR)
+                                               self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
                                elif currLnb.unicable.value == "unicable_lnb":
                                        manufacturer_name = currLnb.unicableLnbManufacturer.value
                                        manufacturer = currLnb.unicableLnb[manufacturer_name]
                                elif currLnb.unicable.value == "unicable_lnb":
                                        manufacturer_name = currLnb.unicableLnbManufacturer.value
                                        manufacturer = currLnb.unicableLnb[manufacturer_name]
+#                                      if "product" in manufacturer.content:
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer)
                                        product_name = manufacturer.product.value
                                        self.advancedManufacturer = getConfigListEntry(_("Manufacturer"), currLnb.unicableLnbManufacturer)
-                                       self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
-                                       self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
                                        self.list.append(self.advancedManufacturer)
                                        self.list.append(self.advancedManufacturer)
-                                       self.list.append(self.advancedType)
-                                       self.list.append(self.advancedSCR)
-                                       self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
+                                       if product_name in manufacturer.scr:
+                                               diction = manufacturer.diction[product_name].value
+                                               self.advancedType = getConfigListEntry(_("Type"), manufacturer.product)
+                                               self.advancedSCR = getConfigListEntry(_("Channel"), manufacturer.scr[product_name])
+                                               self.list.append(self.advancedType)
+                                               self.list.append(self.advancedSCR)
+                                               self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index])) 
+
+                               choices = []
+                               connectable = nimmanager.canConnectTo(self.slotid)
+                               for id in connectable:
+                                       choices.append((str(id), nimmanager.getNimDescription(id)))
+                               if len(choices):
+                                       if isFBCLink(self.nim.slot):
+                                               if self.nimConfig.advanced.unicableconnected.value != True:
+                                                       self.nimConfig.advanced.unicableconnected.value = True
+
+                                       self.advancedConnected = getConfigListEntry(_("connected"), self.nimConfig.advanced.unicableconnected)
+                                       self.list.append(self.advancedConnected)
+                                       if self.nimConfig.advanced.unicableconnected.value == True:
+                                               self.nimConfig.advanced.unicableconnectedTo.setChoices(choices)
+                                               self.list.append(getConfigListEntry(_("Connected to"),self.nimConfig.advanced.unicableconnectedTo))
+
                        else:   #kein Unicable
                                self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
                                self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
                                self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
 
                        else:   #kein Unicable
                                self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
                                self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
                                self.list.append(getConfigListEntry(_("Tone mode"), Sat.tonemode))
 
-                       if lnbnum < 33:
+                       if lnbnum < 65 and diction !="EN50607":
                                self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
                                self.list.append(self.advancedDiseqcMode)
                        if currLnb.diseqcMode.value != "none":
                                self.advancedDiseqcMode = getConfigListEntry(_("DiSEqC mode"), currLnb.diseqcMode)
                                self.list.append(self.advancedDiseqcMode)
                        if currLnb.diseqcMode.value != "none":
@@ -340,7 +400,40 @@ class NimSetup(Screen, ConfigListScreen):
                        self.fillListWithAdvancedSatEntrys(Sat)
                self["config"].list = self.list
 
                        self.fillListWithAdvancedSatEntrys(Sat)
                self["config"].list = self.list
 
+       def checkLoopthrough(self):
+               if self.nimConfig.configMode.value == "loopthrough":
+                       loopthrough_count = 0
+                       dvbs_slots = nimmanager.getNimListOfType('DVB-S')
+                       dvbs_slots_len = len(dvbs_slots)
+
+                       for x in dvbs_slots:
+                               try:
+                                       nim_slot = nimmanager.nim_slots[x]
+                                       if nim_slot == self.nimConfig:
+                                               self_idx = x
+                                       if nim_slot.config.configMode.value == "loopthrough":
+                                               loopthrough_count += 1
+                               except: pass
+                       if loopthrough_count >= dvbs_slots_len:
+                               return False
+
+               self.slot_dest_list = []
+               def checkRecursiveConnect(slot_id):
+                       if slot_id in self.slot_dest_list:
+                               return False
+                       self.slot_dest_list.append(slot_id)
+                       slot_config = nimmanager.nim_slots[slot_id].config
+                       if slot_config.configMode.value == "loopthrough":
+                               return checkRecursiveConnect(int(slot_config.connectedTo.value))
+                       return True
+
+               return checkRecursiveConnect(self.slotid)
+
        def keySave(self):
        def keySave(self):
+               if not self.checkLoopthrough():
+                       self.session.open(MessageBox, _("The loopthrough setting is wrong."),MessageBox.TYPE_ERROR,timeout=10)
+                       return
+
                old_configured_sats = nimmanager.getConfiguredSats()
                self.run()
                new_configured_sats = nimmanager.getConfiguredSats()
                old_configured_sats = nimmanager.getConfiguredSats()
                self.run()
                new_configured_sats = nimmanager.getConfiguredSats()
@@ -349,6 +442,9 @@ class NimSetup(Screen, ConfigListScreen):
                self.deleteConfirmed((None, "no"))
 
        def deleteConfirmed(self, confirmed):
                self.deleteConfirmed((None, "no"))
 
        def deleteConfirmed(self, confirmed):
+               if confirmed is None:
+                       confirmed = (None, "no")
+
                if confirmed[1] == "yes" or confirmed[1] == "yestoall":
                        eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove)
 
                if confirmed[1] == "yes" or confirmed[1] == "yestoall":
                        eDVBDB.getInstance().removeServices(-1, -1, -1, self.satpos_to_remove)
 
@@ -375,12 +471,15 @@ class NimSetup(Screen, ConfigListScreen):
                        if confirmed[1] == "yestoall" or confirmed[1] == "notoall":
                                self.deleteConfirmed(confirmed)
                        break
                        if confirmed[1] == "yestoall" or confirmed[1] == "notoall":
                                self.deleteConfirmed(confirmed)
                        break
-               if not self.satpos_to_remove:
-                       self.close()
-               
+               else:
+                       self.restoreService(_("Zap back to service before tuner setup?"))
+
        def __init__(self, session, slotid):
                Screen.__init__(self, session)
                self.list = [ ]
        def __init__(self, session, slotid):
                Screen.__init__(self, session)
                self.list = [ ]
+               
+               ServiceStopScreen.__init__(self)
+               self.stopService()
 
                ConfigListScreen.__init__(self, self.list)
 
 
                ConfigListScreen.__init__(self, self.list)
 
@@ -398,13 +497,31 @@ class NimSetup(Screen, ConfigListScreen):
                self.createSetup()
 
        def keyLeft(self):
                self.createSetup()
 
        def keyLeft(self):
+               if isFBCLink(self.nim.slot):
+                       checkList = (self.advancedLof, self.advancedConnected)
+                       curEntry = self["config"].getCurrent()
+                       if curEntry in checkList:
+                               return
+
                ConfigListScreen.keyLeft(self)
                self.newConfig()
 
        def keyRight(self):
                ConfigListScreen.keyLeft(self)
                self.newConfig()
 
        def keyRight(self):
+               if isFBCLink(self.nim.slot):
+                       checkList = (self.advancedLof, self.advancedConnected)
+                       curEntry = self["config"].getCurrent()
+                       if curEntry in checkList:
+                               return
+
                ConfigListScreen.keyRight(self)
                self.newConfig()
                
                ConfigListScreen.keyRight(self)
                self.newConfig()
                
+       def keyCancel(self):
+               if self["config"].isChanged():
+                       self.session.openWithCallback(self.cancelConfirm, MessageBox, _("Really close without saving settings?"))
+               else:
+                       self.restoreService(_("Zap back to service before tuner setup?"))
+               
        def saveAll(self):
                if self.nim.isCompatible("DVB-S"):
                        # reset connectedTo to all choices to properly store the default value
        def saveAll(self):
                if self.nim.isCompatible("DVB-S"):
                        # reset connectedTo to all choices to properly store the default value
@@ -424,19 +541,20 @@ class NimSetup(Screen, ConfigListScreen):
                        x[1].cancel()
                # we need to call saveAll to reset the connectedTo choices
                self.saveAll()
                        x[1].cancel()
                # we need to call saveAll to reset the connectedTo choices
                self.saveAll()
-               self.close()
+               self.restoreService(_("Zap back to service before tuner setup?"))
                
        def nothingConnectedShortcut(self):
                if type(self["config"].getCurrent()[1]) is ConfigSatlist:
                        self["config"].getCurrent()[1].setValue("3601")
                        self["config"].invalidateCurrent()
                
        def nothingConnectedShortcut(self):
                if type(self["config"].getCurrent()[1]) is ConfigSatlist:
                        self["config"].getCurrent()[1].setValue("3601")
                        self["config"].invalidateCurrent()
-                       
+
 class NimSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
                self.list = [None] * nimmanager.getSlotCount()
                self["nimlist"] = List(self.list)
 class NimSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
                self.list = [None] * nimmanager.getSlotCount()
                self["nimlist"] = List(self.list)
+               self.loadFBCLinks()
                self.updateList()
                
                self.setResultClass()
                self.updateList()
                
                self.setResultClass()
@@ -446,6 +564,22 @@ class NimSelection(Screen):
                        "ok": self.okbuttonClick ,
                        "cancel": self.close
                }, -2)
                        "ok": self.okbuttonClick ,
                        "cancel": self.close
                }, -2)
+
+       def loadFBCLinks(self):
+               for x in nimmanager.nim_slots:
+                       slotid = x.slot
+                       nimConfig = nimmanager.getNimConfig(x.slot)
+                       configMode = nimConfig.configMode.value
+                       if self.showNim(x):
+                               if x.isCompatible("DVB-S"):
+                                       if isFBCLink(x.slot) and configMode != "advanced":
+                                               link = getLinkedSlotID(x.slot)
+
+                                               if link == -1:
+                                                       nimConfig.configMode.value = "nothing"
+                                               else:
+                                                       nimConfig.configMode.value = "loopthrough"
+                                                       nimConfig.connectedTo.value = str(link)
                
        def setResultClass(self):
                self.resultclass = NimSetup
                
        def setResultClass(self):
                self.resultclass = NimSetup
@@ -453,8 +587,17 @@ class NimSelection(Screen):
        def okbuttonClick(self):
                nim = self["nimlist"].getCurrent()
                nim = nim and nim[3]
        def okbuttonClick(self):
                nim = self["nimlist"].getCurrent()
                nim = nim and nim[3]
-               if nim is not None and not nim.empty:
-                       self.session.openWithCallback(self.updateList, self.resultclass, nim.slot)
+
+               nimConfig = nimmanager.getNimConfig(nim.slot)
+               if isFBCLink(nim.slot) and nimConfig.configMode.value == "loopthrough":
+                       return
+
+               if nim is not None and not nim.empty and nim.isSupported():
+                       self.session.openWithCallback(self.NimSetupCB, self.resultclass, nim.slot)
+
+       def NimSetupCB(self):
+               self.loadFBCLinks()
+               self.updateList()
                        
        def showNim(self, nim):
                return True
                        
        def showNim(self, nim):
                return True
@@ -471,22 +614,30 @@ class NimSelection(Screen):
                                                text = { "loopthrough": _("loopthrough to"),
                                                                 "equal": _("equal to"),
                                                                 "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
                                                text = { "loopthrough": _("loopthrough to"),
                                                                 "equal": _("equal to"),
                                                                 "satposdepends": _("second cable of motorized LNB") } [nimConfig.configMode.value]
-                                               text += " " + _("Tuner") + " " + ["A", "B", "C", "D"][int(nimConfig.connectedTo.value)]
+                                               text += " " + _("Tuner") + " " + chr(ord('A')+int(nimConfig.connectedTo.value))
                                        elif nimConfig.configMode.value == "nothing":
                                        elif nimConfig.configMode.value == "nothing":
-                                               text = _("nothing connected")
+                                               text = _("not configured")
                                        elif nimConfig.configMode.value == "simple":
                                                if nimConfig.diseqcMode.value in ("single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
                                        elif nimConfig.configMode.value == "simple":
                                                if nimConfig.diseqcMode.value in ("single", "toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
-                                                       text = _("Sats") + ": " 
+                                                       text = {"single": _("Single"), "toneburst_a_b": _("Toneburst A/B"), "diseqc_a_b": _("DiSEqC A/B"), "diseqc_a_b_c_d": _("DiSEqC A/B/C/D")}[nimConfig.diseqcMode.value] + "\n"
+                                                       text += _("Sats") + ": " 
+                                                       satnames = []
                                                        if nimConfig.diseqcA.orbital_position != 3601:
                                                        if nimConfig.diseqcA.orbital_position != 3601:
-                                                               text += nimmanager.getSatName(int(nimConfig.diseqcA.value))
+                                                               satnames.append(nimmanager.getSatName(int(nimConfig.diseqcA.value)))
                                                        if nimConfig.diseqcMode.value in ("toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
                                                                if nimConfig.diseqcB.orbital_position != 3601:
                                                        if nimConfig.diseqcMode.value in ("toneburst_a_b", "diseqc_a_b", "diseqc_a_b_c_d"):
                                                                if nimConfig.diseqcB.orbital_position != 3601:
-                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcB.value))
+                                                                       satnames.append(nimmanager.getSatName(int(nimConfig.diseqcB.value)))
                                                        if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
                                                                if nimConfig.diseqcC.orbital_position != 3601:
                                                        if nimConfig.diseqcMode.value == "diseqc_a_b_c_d":
                                                                if nimConfig.diseqcC.orbital_position != 3601:
-                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcC.value))
+                                                                       satnames.append(nimmanager.getSatName(int(nimConfig.diseqcC.value)))
                                                                if nimConfig.diseqcD.orbital_position != 3601:
                                                                if nimConfig.diseqcD.orbital_position != 3601:
-                                                                       text += "," + nimmanager.getSatName(int(nimConfig.diseqcD.value))
+                                                                       satnames.append(nimmanager.getSatName(int(nimConfig.diseqcD.value)))
+                                                       if len(satnames) <= 2:
+                                                               text += ", ".join(satnames)
+                                                       elif len(satnames) > 2:
+                                                               # we need a newline here, since multi content lists don't support automtic line wrapping
+                                                               text += ", ".join(satnames[:2]) + ",\n"
+                                                               text += "         " + ", ".join(satnames[2:])
                                                elif nimConfig.diseqcMode.value == "positioner":
                                                        text = _("Positioner") + ":"
                                                        if nimConfig.positionerMode.value == "usals":
                                                elif nimConfig.diseqcMode.value == "positioner":
                                                        text = _("Positioner") + ":"
                                                        if nimConfig.positionerMode.value == "usals":
@@ -497,12 +648,19 @@ class NimSelection(Screen):
                                                        text = _("simple")
                                        elif nimConfig.configMode.value == "advanced":
                                                text = _("advanced")
                                                        text = _("simple")
                                        elif nimConfig.configMode.value == "advanced":
                                                text = _("advanced")
+                                       if isFBCLink(x.slot) and nimConfig.configMode.value != "advanced":
+                                               text += _("\n<This tuner is configured automatically>")
                                elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
                                        if nimConfig.configMode.value == "nothing":
                                                text = _("nothing connected")
                                        elif nimConfig.configMode.value == "enabled":
                                                text = _("enabled")
                                elif x.isCompatible("DVB-T") or x.isCompatible("DVB-C"):
                                        if nimConfig.configMode.value == "nothing":
                                                text = _("nothing connected")
                                        elif nimConfig.configMode.value == "enabled":
                                                text = _("enabled")
+                               if x.isMultiType():
+                                       text = _("Switchable tuner types:") + "(" + ','.join(x.getMultiTypeList().values()) + ")" + "\n" + text
+                               if not x.isSupported():
+                                       text = _("tuner is not supported")
                                        
                                self.list.append((slotid, x.friendly_full_description, text, x))
                self["nimlist"].setList(self.list)
                self["nimlist"].updateList(self.list)
                                        
                                self.list.append((slotid, x.friendly_full_description, text, x))
                self["nimlist"].setList(self.list)
                self["nimlist"].updateList(self.list)
+