some restrictions for the sat setup
authorStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Thu, 26 Jun 2008 18:55:11 +0000 (18:55 +0000)
committerStefan Pluecken <stefan.pluecken@multimedia-labs.de>
Thu, 26 Jun 2008 18:55:11 +0000 (18:55 +0000)
we don't allow
- DVB-S tuner ==loopthrough==> DVB-S2 tuner
- tuner A ==equals to==> tuner B set to loopthrough
- tuner A ==equals to==> tuner B set to 2nd cable on positioner LNB
- tuner A ==2nd cable==> tuner B, if tuner B is already referenced in another tuner's config as 2nd cable on this positioner

lib/python/Components/NimManager.py
lib/python/Screens/Satconfig.py

index f2f7c57fafcb0e3e0b9144a2a263e429f1dd461d..794cd80d9a72366ec97acc0fd8c5893f74b24cb9 100644 (file)
@@ -563,6 +563,9 @@ class NimManager:
                                return True
                return False
        
+       def getNimType(self, slotid):
+               return self.nim_slots[slotid].type
+       
        def getNimDescription(self, slotid):
                return self.nim_slots[slotid].friendly_full_description
 
@@ -595,18 +598,50 @@ class NimManager:
        def hasOutputs(self, slotid):
                return self.nim_slots[slotid].hasOutputs()
        
-       def connectableTo(self, slotid):
+       def canConnectTo(self, slotid):
                slots = []
                if self.nim_slots[slotid].internallyConnectableTo() is not None:
                        slots.append(self.nim_slots[slotid].internallyConnectableTo())
                for type in self.nim_slots[slotid].connectableTo(): 
                        for slot in self.getNimListOfType(type, exception = slotid):
-                               if self.hasOutputs(slot):
-                                       slots.append(slot)
+                               # FIXME we restrict loopthrough from dvb-s2 to dvb-s, because the c++ part can't handle it
+                               if not (type == "DVB-S" and self.getNimType(slot)):
+                                       if self.hasOutputs(slot):
+                                               slots.append(slot)
                slots.sort()
                
                return slots
        
+       def canEqualTo(self, slotid):
+               type = self.getNimType(slotid)
+               if self.getNimConfig(slotid) == "DVB-S2":
+                       type = "DVB-S"
+               nimList = self.getNimListOfType(type, slotid)
+               for nim in nimList[:]:
+                       mode = self.getNimConfig(nim)
+                       if mode.configMode.value == "loopthrough" or mode.configMode.value == "satposdepends":
+                               nimList.remove(nim)
+               return nimList
+       
+       def canDependOn(self, slotid):
+               type = self.getNimType(slotid)
+               if self.getNimConfig(slotid) == "DVB-S2":
+                       type = "DVB-S"
+               nimList = self.getNimListOfType(type, slotid)
+               positionerList = []
+               for nim in nimList[:]:
+                       mode = self.getNimConfig(nim)
+                       if mode.configMode.value == "simple" and mode.diseqcMode.value == "positioner":
+                               alreadyConnected = False
+                               for testnim in nimList:
+                                       testmode = self.getNimConfig(testnim)
+                                       if testmode.configMode.value == "satposdepends" and int(testmode.connectedTo.value) == int(nim):
+                                               alreadyConnected = True
+                                               break
+                               if not alreadyConnected:
+                                       positionerList.append(nim)
+               return positionerList
+       
        def getNimConfig(self, slotid):
                return config.Nims[slotid]
 
@@ -743,8 +778,6 @@ def InitNimManager(nimmgr):
                x = slot.slot
                nim = config.Nims[x]
                
-               # HACK: currently, we can only looptrough to socket A
-
                if slot.isCompatible("DVB-S"):
                        choices = { "nothing": _("nothing connected"),
                                        "simple": _("simple"),
@@ -752,7 +785,7 @@ def InitNimManager(nimmgr):
                        if len(nimmgr.getNimListOfType(slot.type, exception = x)) > 0:
                                choices["equal"] = _("equal to")
                                choices["satposdepends"] = _("second cable of motorized LNB")
-                       if len(nimmgr.connectableTo(x)) > 0:
+                       if len(nimmgr.canConnectTo(x)) > 0:
                                choices["loopthrough"] = _("loopthrough to")
                        nim.configMode = ConfigSelection(choices = choices, default = "simple")
 
index e5f73160064808d1f3e1620f30061424dd449dfc..7977d8814e3efddd5abbe450798f0854fc2e54d7 100644 (file)
@@ -4,7 +4,7 @@ from Components.SystemInfo import SystemInfo
 from Components.ActionMap import ActionMap
 from Components.ConfigList import ConfigListScreen
 from Components.MenuList import MenuList
-from Components.NimManager import nimmanager
+from Components.NimManager import nimmanager, InitNimManager
 from Components.config import getConfigListEntry, config, ConfigNothing, ConfigSelection
 from Screens.MessageBox import MessageBox
 
@@ -46,7 +46,22 @@ class NimSetup(Screen, ConfigListScreen):
                        if nim.powerMeasurement.value:
                                nim.powerMeasurement.value = False
                                nim.powerMeasurement.save()
-                               
+               
+       def createConfigMode(self):
+               choices = { "nothing": _("nothing connected"),
+                                       "simple": _("simple"),
+                                       "advanced": _("advanced")}
+               #if len(nimmanager.getNimListOfType(nimmanager.getNimType(self.slotid), exception = x)) > 0:
+               #       choices["equal"] = _("equal to")
+               #       choices["satposdepends"] = _("second cable of motorized LNB")
+               if len(nimmanager.canEqualTo(self.slotid)) > 0:
+                       choices["equal"] = _("equal to")
+               if len(nimmanager.canDependOn(self.slotid)) > 0:
+                       choices["satposdepends"] = _("second cable of motorized LNB")
+               if len(nimmanager.canConnectTo(self.slotid)) > 0:
+                       choices["loopthrough"] = _("loopthrough to")
+               self.nimConfig.configMode = ConfigSelection(choices = choices, default = "simple")
+                                       
        def createSetup(self):
                print "Creating setup"
                self.list = [ ]
@@ -77,12 +92,17 @@ class NimSetup(Screen, ConfigListScreen):
                                        self.createSimpleSetup(self.list, self.nimConfig.diseqcMode.value)
                                if self.nimConfig.diseqcMode.value == "positioner":
                                        self.createPositionerSetup(self.list)
-                       elif self.nimConfig.configMode.value in ["satposdepends", "equal"]:
+                       elif self.nimConfig.configMode.value == "equal":
                                choices = []
-                               if self.nim.type == "DVB-S2":
-                                       nimlist = nimmanager.getNimListOfType("DVB-S", exception = self.nim.slot)
-                               else:
-                                       nimlist = nimmanager.getNimListOfType(self.nim.type, exception = self.nim.slot)
+                               nimlist = nimmanager.canEqualTo(self.nim.slot)
+                               for id in nimlist:
+                                       #choices.append((str(id), str(chr(65 + id))))
+                                       choices.append((str(id), nimmanager.getNimDescription(id)))
+                               self.nimConfig.connectedTo = ConfigSelection(choices = choices)
+                               self.list.append(getConfigListEntry(_("Tuner"), self.nimConfig.connectedTo))
+                       elif self.nimConfig.configMode.value == "satposdepends":
+                               choices = []
+                               nimlist = nimmanager.canDependOn(self.nim.slot)
                                for id in nimlist:
                                        #choices.append((str(id), str(chr(65 + id))))
                                        choices.append((str(id), nimmanager.getNimDescription(id)))
@@ -90,8 +110,8 @@ class NimSetup(Screen, ConfigListScreen):
                                self.list.append(getConfigListEntry(_("Tuner"), self.nimConfig.connectedTo))
                        elif self.nimConfig.configMode.value == "loopthrough":
                                choices = []
-                               print "connectable to:", nimmanager.connectableTo(self.slotid)
-                               connectable = nimmanager.connectableTo(self.slotid) 
+                               print "connectable to:", nimmanager.canConnectTo(self.slotid)
+                               connectable = nimmanager.canConnectTo(self.slotid) 
                                for id in connectable:
                                        choices.append((str(id), nimmanager.getNimDescription(id)))
                                self.nimConfig.connectedTo = ConfigSelection(choices = choices)
@@ -310,6 +330,7 @@ class NimSetup(Screen, ConfigListScreen):
                self.slotid = slotid
                self.nim = nimmanager.nim_slots[slotid]
                self.nimConfig = self.nim.config
+               self.createConfigMode()
                self.createSetup()
 
        def keyLeft(self):