do not crash when attributes are not present; replace by defaults instead
[enigma2.git] / lib / python / Screens / Satconfig.py
index 5c4e6903912696a429cd0c739ad87b84d9ce1b0a..9f22013dcce3e1ccc3a4344a0789a72cb0c957c8 100644 (file)
@@ -1,10 +1,13 @@
 from Screen import Screen
 from Components.ActionMap import ActionMap
 from Screen import Screen
 from Components.ActionMap import ActionMap
-from Components.ConfigList import ConfigList, ConfigListScreen
+from Components.ConfigList import ConfigListScreen
 from Components.MenuList import MenuList
 from Components.NimManager import nimmanager
 from Components.config import getConfigListEntry, config, ConfigNothing
 
 from Components.MenuList import MenuList
 from Components.NimManager import nimmanager
 from Components.config import getConfigListEntry, config, ConfigNothing
 
+from time import mktime, localtime
+from datetime import datetime
+
 class NimSetup(Screen, ConfigListScreen):
        def createSimpleSetup(self, list, mode):
                if mode == "single":
 class NimSetup(Screen, ConfigListScreen):
        def createSimpleSetup(self, list, mode):
                if mode == "single":
@@ -19,14 +22,23 @@ class NimSetup(Screen, ConfigListScreen):
                                list.append(getConfigListEntry(_("Port D"), self.nimConfig.diseqcD))
 
        def createPositionerSetup(self, list):
                                list.append(getConfigListEntry(_("Port D"), self.nimConfig.diseqcD))
 
        def createPositionerSetup(self, list):
-#              list.append(getConfigListEntry(_("Positioner mode"), self.nimConfig.positionerMode))
-#              if self.nimConfig.positionerMode.value == "usals": # USALS
-               list.append(getConfigListEntry(_("Longitude"), self.nimConfig.longitude))
-               list.append(getConfigListEntry(" ", self.nimConfig.longitudeOrientation))
-               list.append(getConfigListEntry(_("Latitude"), self.nimConfig.latitude))
-               list.append(getConfigListEntry(" ", self.nimConfig.latitudeOrientation))
-#              elif self.nimConfig.positionerMode.value == "manual": # manual
-#                      pass
+               nim = self.nimConfig
+               list.append(getConfigListEntry(_("Longitude"), nim.longitude))
+               list.append(getConfigListEntry(" ", nim.longitudeOrientation))
+               list.append(getConfigListEntry(_("Latitude"), nim.latitude))
+               list.append(getConfigListEntry(" ", nim.latitudeOrientation))
+
+               self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), nim.powerMeasurement)
+               list.append(self.advancedPowerMeasurement)
+               if nim.powerMeasurement.value:
+                       list.append(getConfigListEntry(_("Power threshold in mA"), nim.powerThreshold))
+                       self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), nim.turningSpeed)
+                       list.append(self.turningSpeed)
+                       if nim.turningSpeed.value == "fast epoch":
+                               self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), nim.fastTurningBegin)
+                               self.turnFastEpochEnd = getConfigListEntry(_("End time"), nim.fastTurningEnd)
+                               list.append(self.turnFastEpochBegin)
+                               list.append(self.turnFastEpochEnd)
 
        def createSetup(self):
                print "Creating setup"
 
        def createSetup(self):
                print "Creating setup"
@@ -40,13 +52,16 @@ class NimSetup(Screen, ConfigListScreen):
                self.advancedUsalsEntry = None
                self.advancedLof = None
                self.advancedPowerMeasurement = None
                self.advancedUsalsEntry = None
                self.advancedLof = None
                self.advancedPowerMeasurement = None
-               
-               self.nim_type = nimmanager.getNimType(self.nim.slotid)
+               self.turningSpeed = None
+               self.turnFastEpochBegin = None
+               self.turnFastEpochEnd = None
+
+               self.cableScanType = None
 
 
-               if self.nim_type == nimmanager.nimType["DVB-S"]:
+               if self.nim.isCompatible("DVB-S"):
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
                        self.list.append(self.configMode)
                        self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
                        self.list.append(self.configMode)
-                       
+
                        if self.nimConfig.configMode.value == "simple":                 #simple setup
                                self.diseqcModeEntry = getConfigListEntry(_("DiSEqC Mode"), self.nimConfig.diseqcMode)
                                self.list.append(self.diseqcModeEntry)
                        if self.nimConfig.configMode.value == "simple":                 #simple setup
                                self.diseqcModeEntry = getConfigListEntry(_("DiSEqC Mode"), self.nimConfig.diseqcMode)
                                self.list.append(self.diseqcModeEntry)
@@ -60,33 +75,77 @@ class NimSetup(Screen, ConfigListScreen):
                                # SATs
                                self.advancedSatsEntry = getConfigListEntry(_("Satellite"), self.nimConfig.advanced.sats)
                                self.list.append(self.advancedSatsEntry)
                                # SATs
                                self.advancedSatsEntry = getConfigListEntry(_("Satellite"), self.nimConfig.advanced.sats)
                                self.list.append(self.advancedSatsEntry)
-                               print "blub", self.nimConfig.advanced.sat
-                               currSat = self.nimConfig.advanced.sat[self.nimConfig.advanced.sats.orbital_position]
+                               cur_orb_pos = self.nimConfig.advanced.sats.orbital_position
+                               satlist = self.nimConfig.advanced.sat.keys()
+                               if cur_orb_pos not in satlist:
+                                       cur_orb_pos = satlist[0]
+                               currSat = self.nimConfig.advanced.sat[cur_orb_pos]
                                self.fillListWithAdvancedSatEntrys(currSat)
                        self.have_advanced = True
                                self.fillListWithAdvancedSatEntrys(currSat)
                        self.have_advanced = True
-               elif self.nim_type == nimmanager.nimType["DVB-C"]:
-                       self.list.append(getConfigListEntry(_("Cable provider"), self.nimConfig.cable))
+               elif self.nim.isCompatible("DVB-C"):
+                       self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
+                       self.list.append(self.configMode)
+                       if self.nimConfig.configMode.value == "enabled":
+                               self.cableScanType=getConfigListEntry(_("Used service scan type"), self.nimConfig.cable.scan_type)
+                               self.list.append(self.cableScanType)
+                               if self.nimConfig.cable.scan_type.value == "provider":
+                                       self.list.append(getConfigListEntry(_("Provider to scan"), self.nimConfig.cable.scan_provider))
+                               else:
+                                       if self.nimConfig.cable.scan_type.value == "bands":
+                                               self.list.append(getConfigListEntry(_("Scan band EU VHF I"), self.nimConfig.cable.scan_band_EU_VHF_I))
+                                               self.list.append(getConfigListEntry(_("Scan band EU MID"), self.nimConfig.cable.scan_band_EU_MID))
+                                               self.list.append(getConfigListEntry(_("Scan band EU VHF III"), self.nimConfig.cable.scan_band_EU_VHF_III))
+                                               self.list.append(getConfigListEntry(_("Scan band EU UHF IV"), self.nimConfig.cable.scan_band_EU_UHF_IV))
+                                               self.list.append(getConfigListEntry(_("Scan band EU UHF V"), self.nimConfig.cable.scan_band_EU_UHF_V))
+                                               self.list.append(getConfigListEntry(_("Scan band EU SUPER"), self.nimConfig.cable.scan_band_EU_SUPER))
+                                               self.list.append(getConfigListEntry(_("Scan band EU HYPER"), self.nimConfig.cable.scan_band_EU_HYPER))
+                                               self.list.append(getConfigListEntry(_("Scan band US LOW"), self.nimConfig.cable.scan_band_US_LOW))
+                                               self.list.append(getConfigListEntry(_("Scan band US MID"), self.nimConfig.cable.scan_band_US_MID))
+                                               self.list.append(getConfigListEntry(_("Scan band US HIGH"), self.nimConfig.cable.scan_band_US_HIGH))
+                                               self.list.append(getConfigListEntry(_("Scan band US SUPER"), self.nimConfig.cable.scan_band_US_SUPER))
+                                               self.list.append(getConfigListEntry(_("Scan band US HYPER"), self.nimConfig.cable.scan_band_US_HYPER))
+                                       elif self.nimConfig.cable.scan_type.value == "steps":
+                                               self.list.append(getConfigListEntry(_("Frequency scan step size(khz)"), self.nimConfig.cable.scan_frequency_steps))
+                                       self.list.append(getConfigListEntry(_("Scan QAM16"), self.nimConfig.cable.scan_mod_qam16))
+                                       self.list.append(getConfigListEntry(_("Scan QAM32"), self.nimConfig.cable.scan_mod_qam32))
+                                       self.list.append(getConfigListEntry(_("Scan QAM64"), self.nimConfig.cable.scan_mod_qam64))
+                                       self.list.append(getConfigListEntry(_("Scan QAM128"), self.nimConfig.cable.scan_mod_qam128))
+                                       self.list.append(getConfigListEntry(_("Scan QAM256"), self.nimConfig.cable.scan_mod_qam256))
+                                       self.list.append(getConfigListEntry(_("Scan SR6900"), self.nimConfig.cable.scan_sr_6900))
+                                       self.list.append(getConfigListEntry(_("Scan SR6875"), self.nimConfig.cable.scan_sr_6875))
+                                       self.list.append(getConfigListEntry(_("Scan additional SR"), self.nimConfig.cable.scan_sr_ext1))
+                                       self.list.append(getConfigListEntry(_("Scan additional SR"), self.nimConfig.cable.scan_sr_ext2))
                        self.have_advanced = False
                        self.have_advanced = False
-               elif self.nim_type == nimmanager.nimType["DVB-T"]:
+               elif self.nim.isCompatible("DVB-T"):
+                       self.configMode = getConfigListEntry(_("Configuration Mode"), self.nimConfig.configMode)
+                       self.list.append(self.configMode)
                        self.have_advanced = False
                        self.have_advanced = False
-                       self.list.append(getConfigListEntry(_("Terrestrial provider"), self.nimConfig.terrestrial))
-                       self.list.append(getConfigListEntry(_("Enable 5V for active antenna"), self.nimConfig.terrestrial_5V))
+                       if self.nimConfig.configMode.value == "enabled":
+                               self.list.append(getConfigListEntry(_("Terrestrial provider"), self.nimConfig.terrestrial))
+                               self.list.append(getConfigListEntry(_("Enable 5V for active antenna"), self.nimConfig.terrestrial_5V))
                else:
                        self.have_advanced = False
                else:
                        self.have_advanced = False
-
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
        def newConfig(self):
                self["config"].list = self.list
                self["config"].l.setList(self.list)
 
        def newConfig(self):
-               checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, self.advancedLof, self.advancedPowerMeasurement)
+               checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
+                       self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
+                       self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, self.cableScanType)
                for x in checkList:
                        if self["config"].getCurrent() == x:
                                self.createSetup()
 
        def run(self):
                for x in checkList:
                        if self["config"].getCurrent() == x:
                                self.createSetup()
 
        def run(self):
-               if self.have_advanced and config.Nims[self.nim.slotid].configMode.value == "advanced":
+               if self.have_advanced and self.nim.config_mode == "advanced":
                        self.fillAdvancedList()
                        self.fillAdvancedList()
-               for x in self["config"].list:
+               for x in self.list:
+                       if x in [self.turnFastEpochBegin, self.turnFastEpochEnd]:
+                               # workaround for storing only hour*3600+min*60 value in configfile
+                               # not really needed.. just for cosmetics..
+                               tm = localtime(x[1].value)
+                               dt = datetime(1970, 1, 1, tm.tm_hour, tm.tm_min)
+                               x[1].value = int(mktime(dt.timetuple()))
                        x[1].save()
                nimmanager.sec.update()
 
                        x[1].save()
                nimmanager.sec.update()
 
@@ -126,17 +185,24 @@ class NimSetup(Screen, ConfigListScreen):
                                        self.list.append(getConfigListEntry(" ", currLnb.longitudeOrientation))
                                        self.list.append(getConfigListEntry(_("Latitude"), currLnb.latitude))
                                        self.list.append(getConfigListEntry(" ", currLnb.latitudeOrientation))
                                        self.list.append(getConfigListEntry(" ", currLnb.longitudeOrientation))
                                        self.list.append(getConfigListEntry(_("Latitude"), currLnb.latitude))
                                        self.list.append(getConfigListEntry(" ", currLnb.latitudeOrientation))
-                                       self.advancedPowerMeasurement = getConfigListEntry("Use Power Measurement", currLnb.powerMeasurement)
+                                       self.advancedPowerMeasurement = getConfigListEntry(_("Use Power Measurement"), currLnb.powerMeasurement)
                                        self.list.append(self.advancedPowerMeasurement)
                                        self.list.append(self.advancedPowerMeasurement)
-                                       if currLnb.powerMeasurement.value == "yes":
-                                               self.list.append(getConfigListEntry("Power Threshold in mA", currLnb.powerThreshold))
+                                       if currLnb.powerMeasurement.value:
+                                               self.list.append(getConfigListEntry(_("Power threshold in mA"), currLnb.powerThreshold))
+                                               self.turningSpeed = getConfigListEntry(_("Rotor turning speed"), currLnb.turningSpeed)
+                                               self.list.append(self.turningSpeed)
+                                               if currLnb.turningSpeed.value == "fast epoch":
+                                                       self.turnFastEpochBegin = getConfigListEntry(_("Begin time"), currLnb.fastTurningBegin)
+                                                       self.turnFastEpochEnd = getConfigListEntry(_("End time"), currLnb.fastTurningEnd)
+                                                       self.list.append(self.turnFastEpochBegin)
+                                                       self.list.append(self.turnFastEpochEnd)
                        self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
                        self.list.append(self.advancedLof)
                        if currLnb.lof.value == "user_defined":
                                self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
                                self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
                                self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
                        self.advancedLof = getConfigListEntry(_("LOF"), currLnb.lof)
                        self.list.append(self.advancedLof)
                        if currLnb.lof.value == "user_defined":
                                self.list.append(getConfigListEntry(_("LOF/L"), currLnb.lofl))
                                self.list.append(getConfigListEntry(_("LOF/H"), currLnb.lofh))
                                self.list.append(getConfigListEntry(_("Threshold"), currLnb.threshold))
-                       self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v))
+#                      self.list.append(getConfigListEntry(_("12V Output"), currLnb.output_12v))
                        self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
 
        def fillAdvancedList(self):
                        self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))
 
        def fillAdvancedList(self):
@@ -154,11 +220,6 @@ class NimSetup(Screen, ConfigListScreen):
                self.run()
                self.close()
 
                self.run()
                self.close()
 
-       def keyCancel(self):
-               for x in self["config"].list:
-                       x[1].cancel()
-               self.close()
-
        def __init__(self, session, slotid):
                Screen.__init__(self, session)
                self.list = [ ]
        def __init__(self, session, slotid):
                Screen.__init__(self, session)
                self.list = [ ]
@@ -171,8 +232,8 @@ class NimSetup(Screen, ConfigListScreen):
                        "cancel": self.keyCancel,
                }, -2)
 
                        "cancel": self.keyCancel,
                }, -2)
 
-               self.nim = nimmanager.nimList()[slotid][1]
-               self.nimConfig = config.Nims[self.nim.slotid]
+               self.nim = nimmanager.nim_slots[slotid]
+               self.nimConfig = self.nim.config
                self.createSetup()
 
        def keyLeft(self):
                self.createSetup()
 
        def keyLeft(self):
@@ -186,8 +247,12 @@ class NimSetup(Screen, ConfigListScreen):
 class NimSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
 class NimSelection(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
+               
+               menu = [ ]
+               for x in nimmanager.nim_slots:
+                       menu.append((x.friendly_full_description, x))
 
 
-               self["nimlist"] = MenuList(nimmanager.nimList())
+               self["nimlist"] = MenuList(menu)
 
                self["actions"] = ActionMap(["OkCancelActions"],
                {
 
                self["actions"] = ActionMap(["OkCancelActions"],
                {
@@ -196,7 +261,7 @@ class NimSelection(Screen):
                }, -2)
 
        def okbuttonClick(self):
                }, -2)
 
        def okbuttonClick(self):
-               selection = self["nimlist"].getCurrent()
-               if selection[1].nimType != -1:  #unknown/empty
-                       self.session.open(NimSetup, selection[1].slotid)
-       
+               nim = self["nimlist"].getCurrent()
+               nim = nim and nim[1]
+               if nim is not None and not nim.empty:
+                       self.session.open(NimSetup, nim.slot)