Remove miscControl and move Ci Delay option to CI Setting.
authorhschang <chang@dev3>
Mon, 9 Apr 2018 10:11:27 +0000 (19:11 +0900)
committerhschang <chang@dev3>
Mon, 9 Apr 2018 10:11:52 +0000 (19:11 +0900)
15 files changed:
configure.ac
lib/python/Components/SystemInfo.py [changed mode: 0644->0755]
lib/python/Plugins/SystemPlugins/Makefile.am
lib/python/Plugins/SystemPlugins/Solo4kMiscControl/Makefile.am [deleted file]
lib/python/Plugins/SystemPlugins/Solo4kMiscControl/__init__.py [deleted file]
lib/python/Plugins/SystemPlugins/Solo4kMiscControl/meta/Makefile.am [deleted file]
lib/python/Plugins/SystemPlugins/Solo4kMiscControl/meta/plugin_solo4kmisccontrol.xml [deleted file]
lib/python/Plugins/SystemPlugins/Solo4kMiscControl/plugin.py [deleted file]
lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/Makefile.am [deleted file]
lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/__init__.py [deleted file]
lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/meta/Makefile.am [deleted file]
lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/meta/plugin_ultimo4kmisccontrol.xml [deleted file]
lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/plugin.py [deleted file]
lib/python/Screens/Ci.py
lib/python/Tools/Directories.py

index eba34a6..d6a1f6a 100644 (file)
@@ -305,12 +305,8 @@ lib/python/Plugins/SystemPlugins/AnimationSetup/Makefile
 lib/python/Plugins/SystemPlugins/AnimationSetup/meta/Makefile
 lib/python/Plugins/SystemPlugins/BoxModeConfig/Makefile
 lib/python/Plugins/SystemPlugins/BoxModeConfig/meta/Makefile
-lib/python/Plugins/SystemPlugins/Solo4kMiscControl/Makefile
-lib/python/Plugins/SystemPlugins/Solo4kMiscControl/meta/Makefile
 lib/python/Plugins/SystemPlugins/FastChannelChange/Makefile
 lib/python/Plugins/SystemPlugins/FastChannelChange/meta/Makefile
-lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/Makefile
-lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/meta/Makefile
 lib/python/Plugins/SystemPlugins/PvrDescrambleConvert/Makefile
 lib/python/Plugins/SystemPlugins/PvrDescrambleConvert/meta/Makefile
 lib/python/Plugins/Extensions/QuadPiP/Makefile
old mode 100644 (file)
new mode 100755 (executable)
index 5ee9510..4023198
@@ -1,5 +1,5 @@
-from enigma import eDVBResourceManager
-from Tools.Directories import fileExists
+from enigma import eDVBResourceManager, eDVBCIInterfaces
+from Tools.Directories import fileExists, fileCheck
 from Tools.HardwareInfo import HardwareInfo
 
 SystemInfo = { }
@@ -38,3 +38,9 @@ SystemInfo["DisableUsbRecord"] = HardwareInfo().get_vu_device_name() in ("solo4k
 SystemInfo["DefaultAniSpeed"] = HardwareInfo().get_vu_device_name() in ("uno4k", "uno4kse", "zero4k") and 25 or 20
 SystemInfo["DefaultFullHDSkin"] = HardwareInfo().get_vu_device_name() in ("solo4k","ultimo4k","uno4k","uno4kse","zero4k")
 SystemInfo["PVRSupport"] = HardwareInfo().get_vu_device_name() not in ["solose", "zero", "uno4k"]
+
+SystemInfo["CommonInterface"] = eDVBCIInterfaces.getInstance().getNumOfSlots()
+SystemInfo["CommonInterfaceCIDelay"] = fileCheck("/proc/stb/tsmux/rmx_delay")
+for cislot in range (0, SystemInfo["CommonInterface"]):
+       SystemInfo["CI%dSupportsHighBitrates" % cislot] = fileCheck("/proc/stb/tsmux/ci%d_tsclk"  % cislot)
+       SystemInfo["CI%dRelevantPidsRoutingSupport" % cislot] = fileCheck("/proc/stb/tsmux/ci%d_relevant_pids_routing"  % cislot)
index 4cf41a6..9fb15f3 100755 (executable)
@@ -8,7 +8,7 @@ SUBDIRS = SoftwareManager FrontprocessorUpgrade PositionerSetup Satfinder \
        Blindscan RemoteControlCode UI3DSetup UIPositionSetup HDMICEC LEDBrightnessSetup \
        FirmwareUpgrade CrashReport 3GModemManager WirelessAccessPoint ZappingModeSelection \
        DeviceManager TransCodingSetup WOLSetup NetDrive AudioEffect AnimationSetup \
-       BoxModeConfig Solo4kMiscControl FastChannelChange Ultimo4kMiscControl PvrDescrambleConvert
+       BoxModeConfig FastChannelChange PvrDescrambleConvert
 
 install_PYTHON =       \
        __init__.py
diff --git a/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/Makefile.am b/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/Makefile.am
deleted file mode 100644 (file)
index 1d7f276..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-installdir = $(pkglibdir)/python/Plugins/SystemPlugins/Solo4kMiscControl
-
-SUBDIRS = meta
-
-install_PYTHON =  \
-       __init__.py \
-       plugin.py
diff --git a/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/__init__.py b/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/__init__.py
deleted file mode 100644 (file)
index 8d1c8b6..0000000
+++ /dev/null
@@ -1 +0,0 @@
diff --git a/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/meta/Makefile.am
deleted file mode 100644 (file)
index 990f998..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-installdir = $(datadir)/meta
-
-dist_install_DATA = plugin_solo4kmisccontrol.xml
diff --git a/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/meta/plugin_solo4kmisccontrol.xml b/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/meta/plugin_solo4kmisccontrol.xml
deleted file mode 100644 (file)
index d4bd7e2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<default>
-         <prerequisites>
-                    <tag type="System" />
-         </prerequisites>
-          <info>
-                    <author>hschang</author>
-                    <name>Solo4kMiscControl</name>
-                    <packagename>enigma2-plugin-systemplugins-solo4kmisccontrol</packagename>
-                    <shortdescription>set Solo4K LNB Power and etc..</shortdescription>
-                    <description>Control LNB Power and ToneBurst,CI delay for Solo4K.</description>
-          </info>
-
-         <files type="package"> <!-- without version, without .ipk -->
-               <file type="package" name="enigma2-plugin-systemplugins-solo4kmisccontrol" />
-       </files>
-</default>
diff --git a/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/plugin.py b/lib/python/Plugins/SystemPlugins/Solo4kMiscControl/plugin.py
deleted file mode 100644 (file)
index 26c3aa0..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-from Screens.Screen import Screen
-from Components.ConfigList import ConfigListScreen
-from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigSelection
-from Components.ActionMap import ActionMap
-from Screens.MessageBox import MessageBox
-from Components.Sources.StaticText import StaticText
-from Plugins.Plugin import PluginDescriptor
-from Tools.Directories import fileExists
-
-config.plugins.solo4kMiscControl = ConfigSubsection()
-config.plugins.solo4kMiscControl.forceLnbPower = ConfigSelection(default = "off", choices = [ ("on", _("Yes")), ("off", _("No"))] )
-config.plugins.solo4kMiscControl.forceToneBurst = ConfigSelection(default = "disable", choices = [ ("enable", _("Yes")), ("disable", _("No"))] )
-config.plugins.solo4kMiscControl.dvbCiDelay = ConfigSelection(default = "256", choices = [ ("16", _("16")), ("32", _("32")), ("64", _("64")), ("128", _("128")), ("256", _("256"))] )
-
-PROC_FORCE_LNBPOWER = "/proc/stb/frontend/fbc/force_lnbon"
-PROC_FORCE_TONEBURST = "/proc/stb/frontend/fbc/force_toneburst"
-PROC_DVB_CI_DELAY = "/proc/stb/tsmux/rmx_delay"
-
-def setProcValueOnOff(value, procPath):
-       try:
-               print "[Solo4kMiscControl] set %s : %s" % (procPath, value)
-               fd = open(procPath,'w')
-               fd.write(value)
-               fd.close()
-               return 0
-       except Exception, e:
-               print "[Solo4kMiscControl] proc write Error", e
-               return -1
-
-
-from enigma import eTimer
-class checkDriverSupport:
-       def __init__(self):
-               self.onLayoutFinish.append(self.procCheck)
-               self.dispErrorTimer = eTimer()
-               self.dispErrorTimer.callback.append(self.dispErrorMsg)
-
-       def procCheck(self):
-               if not (fileExists(PROC_FORCE_LNBPOWER) and fileExists(PROC_FORCE_TONEBURST) and fileExists(PROC_DVB_CI_DELAY)):
-                       self.dispErrorTimer.start(0, True)
-
-       def dispErrorMsg(self):
-               self.session.openWithCallback(self.close ,MessageBox, _("Driver is not supported."), MessageBox.TYPE_ERROR)
-
-class Solo4kMiscControl(Screen, ConfigListScreen, checkDriverSupport):
-       skin =  """
-               <screen position="center,center" size="400,250" title="Solo4K Misc. Control" >
-                       <ePixmap pixmap="skin_default/buttons/red.png" position="30,10" size="140,40" alphatest="on" />
-                       <ePixmap pixmap="skin_default/buttons/green.png" position="230,10" size="140,40" alphatest="on" />
-                       <widget source="key_red" render="Label" position="30,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
-                       <widget source="key_green" render="Label" position="230,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
-                       <widget name="config" zPosition="2" position="5,70" size="380,180" scrollbarMode="showOnDemand" transparent="1" />
-               </screen>
-               """
-
-       def __init__(self,session):
-               Screen.__init__(self,session)
-               self.session = session
-               self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
-               {
-                       "ok": self.keySave,
-                       "cancel": self.keyCancel,
-                       "red": self.keyCancel,
-                       "green": self.keySave,
-               }, -2)
-               self.list = []
-               ConfigListScreen.__init__(self, self.list,session = self.session)
-               self["key_red"] = StaticText(_("Cancel"))
-               self["key_green"] = StaticText(_("Ok"))
-               self.createSetup()
-
-               checkDriverSupport.__init__(self)
-
-       def createSetup(self):
-               self.list = []
-               self.lnbPowerEntry = getConfigListEntry(_("Force LNB Power"), config.plugins.solo4kMiscControl.forceLnbPower)
-               self.toneBurstEntry = getConfigListEntry(_("Force ToneBurst"), config.plugins.solo4kMiscControl.forceToneBurst)
-               self.ciDelayEntry = getConfigListEntry(_("DVB CI Delay"), config.plugins.solo4kMiscControl.dvbCiDelay)
-               self.list.append( self.lnbPowerEntry )
-               self.list.append( self.toneBurstEntry )
-               self.list.append( self.ciDelayEntry )
-               self["config"].list = self.list
-               self["config"].l.setList(self.list)
-
-       def keySave(self):
-               res = setProcValueOnOff(config.plugins.solo4kMiscControl.forceLnbPower.value, PROC_FORCE_LNBPOWER)
-               if res == 0:
-                       res = setProcValueOnOff(config.plugins.solo4kMiscControl.forceToneBurst.value, PROC_FORCE_TONEBURST)
-               if res == 0:
-                       res = setProcValueOnOff(config.plugins.solo4kMiscControl.dvbCiDelay.value, PROC_DVB_CI_DELAY)
-
-               if res == -1:
-                       self.resetConfig()
-                       self.session.openWithCallback(self.close, MessageBox, _("SET FAILED!\n"), MessageBox.TYPE_ERROR)
-               else:
-                       self.saveAll()
-                       self.close()
-
-       def resetConfig(self):
-               for x in self["config"].list:
-                       x[1].cancel()
-
-def main(session, **kwargs):
-       session.open(Solo4kMiscControl)
-
-def OnSessionStart(session, **kwargs):
-       setProcValueOnOff(config.plugins.solo4kMiscControl.forceLnbPower.value, PROC_FORCE_LNBPOWER)
-       setProcValueOnOff(config.plugins.solo4kMiscControl.forceToneBurst.value, PROC_FORCE_TONEBURST)
-       setProcValueOnOff(config.plugins.solo4kMiscControl.dvbCiDelay.value, PROC_DVB_CI_DELAY)
-
-def Plugins(**kwargs):
-       pList = []
-       pList.append( PluginDescriptor(where=PluginDescriptor.WHERE_SESSIONSTART, fnc=OnSessionStart) )
-       pList.append( PluginDescriptor(name=_("Solo4K Misc. Control"), description="set Solo4K LNB Power and etc..", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=main) )
-       return pList
-
diff --git a/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/Makefile.am b/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/Makefile.am
deleted file mode 100644 (file)
index c7cc202..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-installdir = $(pkglibdir)/python/Plugins/SystemPlugins/Ultimo4kMiscControl
-
-SUBDIRS = meta
-
-install_PYTHON =  \
-       __init__.py \
-       plugin.py
diff --git a/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/__init__.py b/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/__init__.py
deleted file mode 100644 (file)
index 8d1c8b6..0000000
+++ /dev/null
@@ -1 +0,0 @@
diff --git a/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/meta/Makefile.am b/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/meta/Makefile.am
deleted file mode 100644 (file)
index e23527e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-installdir = $(datadir)/meta
-
-dist_install_DATA = plugin_ultimo4kmisccontrol.xml
diff --git a/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/meta/plugin_ultimo4kmisccontrol.xml b/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/meta/plugin_ultimo4kmisccontrol.xml
deleted file mode 100644 (file)
index 7440ede..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<default>
-         <prerequisites>
-                    <tag type="System" />
-         </prerequisites>
-          <info>
-                    <author>hschang</author>
-                    <name>Ultimo4kMiscControl</name>
-                    <packagename>enigma2-plugin-systemplugins-ultimo4kmisccontrol</packagename>
-                    <shortdescription>set Ultimo4K LNB Power and etc..</shortdescription>
-                    <description>Control LNB Power and ToneBurst,CI delay for Ultimo4K.</description>
-          </info>
-
-         <files type="package"> <!-- without version, without .ipk -->
-               <file type="package" name="enigma2-plugin-systemplugins-ultimo4kmisccontrol" />
-       </files>
-</default>
diff --git a/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/plugin.py b/lib/python/Plugins/SystemPlugins/Ultimo4kMiscControl/plugin.py
deleted file mode 100644 (file)
index d9cd261..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-from Screens.Screen import Screen
-from Components.ConfigList import ConfigListScreen
-from Components.config import config, getConfigListEntry, ConfigSubsection, ConfigSelection
-from Components.ActionMap import ActionMap
-from Screens.MessageBox import MessageBox
-from Components.Sources.StaticText import StaticText
-from Plugins.Plugin import PluginDescriptor
-from Tools.Directories import fileExists
-
-config.plugins.ultimo4kMiscControl = ConfigSubsection()
-config.plugins.ultimo4kMiscControl.forceLnbPower = ConfigSelection(default = "off", choices = [ ("on", _("Yes")), ("off", _("No"))] )
-config.plugins.ultimo4kMiscControl.forceToneBurst = ConfigSelection(default = "disable", choices = [ ("enable", _("Yes")), ("disable", _("No"))] )
-config.plugins.ultimo4kMiscControl.dvbCiDelay = ConfigSelection(default = "256", choices = [ ("16", _("16")), ("32", _("32")), ("64", _("64")), ("128", _("128")), ("256", _("256"))] )
-
-PROC_FORCE_LNBPOWER = "/proc/stb/frontend/fbc/force_lnbon"
-PROC_FORCE_TONEBURST = "/proc/stb/frontend/fbc/force_toneburst"
-PROC_DVB_CI_DELAY = "/proc/stb/tsmux/rmx_delay"
-
-def setProcValueOnOff(value, procPath):
-       try:
-               print "[ultimo4kMiscControl] set %s : %s" % (procPath, value)
-               fd = open(procPath,'w')
-               fd.write(value)
-               fd.close()
-               return 0
-       except Exception, e:
-               print "[ultimo4kMiscControl] proc write Error", e
-               return -1
-
-
-from enigma import eTimer
-class checkDriverSupport:
-       def __init__(self):
-               self.onLayoutFinish.append(self.procCheck)
-               self.dispErrorTimer = eTimer()
-               self.dispErrorTimer.callback.append(self.dispErrorMsg)
-
-       def procCheck(self):
-               if not (fileExists(PROC_FORCE_LNBPOWER) and fileExists(PROC_FORCE_TONEBURST) and fileExists(PROC_DVB_CI_DELAY)):
-                       self.dispErrorTimer.start(0, True)
-
-       def dispErrorMsg(self):
-               self.session.openWithCallback(self.close ,MessageBox, _("Driver is not supported."), MessageBox.TYPE_ERROR)
-
-class ultimo4kMiscControl(Screen, ConfigListScreen, checkDriverSupport):
-       skin =  """
-               <screen position="center,center" size="400,250" title="Ultimo4K Misc. Control" >
-                       <ePixmap pixmap="skin_default/buttons/red.png" position="30,10" size="140,40" alphatest="on" />
-                       <ePixmap pixmap="skin_default/buttons/green.png" position="230,10" size="140,40" alphatest="on" />
-                       <widget source="key_red" render="Label" position="30,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
-                       <widget source="key_green" render="Label" position="230,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
-                       <widget name="config" zPosition="2" position="5,70" size="380,180" scrollbarMode="showOnDemand" transparent="1" />
-               </screen>
-               """
-
-       def __init__(self,session):
-               Screen.__init__(self,session)
-               self.session = session
-               self["shortcuts"] = ActionMap(["ShortcutActions", "SetupActions" ],
-               {
-                       "ok": self.keySave,
-                       "cancel": self.keyCancel,
-                       "red": self.keyCancel,
-                       "green": self.keySave,
-               }, -2)
-               self.list = []
-               ConfigListScreen.__init__(self, self.list,session = self.session)
-               self["key_red"] = StaticText(_("Cancel"))
-               self["key_green"] = StaticText(_("Ok"))
-               self.createSetup()
-
-               checkDriverSupport.__init__(self)
-
-       def createSetup(self):
-               self.list = []
-               self.lnbPowerEntry = getConfigListEntry(_("Force LNB Power"), config.plugins.ultimo4kMiscControl.forceLnbPower)
-               self.toneBurstEntry = getConfigListEntry(_("Force ToneBurst"), config.plugins.ultimo4kMiscControl.forceToneBurst)
-               self.ciDelayEntry = getConfigListEntry(_("DVB CI Delay"), config.plugins.ultimo4kMiscControl.dvbCiDelay)
-               self.list.append( self.lnbPowerEntry )
-               self.list.append( self.toneBurstEntry )
-               self.list.append( self.ciDelayEntry )
-               self["config"].list = self.list
-               self["config"].l.setList(self.list)
-
-       def keySave(self):
-               res = setProcValueOnOff(config.plugins.ultimo4kMiscControl.forceLnbPower.value, PROC_FORCE_LNBPOWER)
-               if res == 0:
-                       res = setProcValueOnOff(config.plugins.ultimo4kMiscControl.forceToneBurst.value, PROC_FORCE_TONEBURST)
-               if res == 0:
-                       res = setProcValueOnOff(config.plugins.ultimo4kMiscControl.dvbCiDelay.value, PROC_DVB_CI_DELAY)
-
-               if res == -1:
-                       self.resetConfig()
-                       self.session.openWithCallback(self.close, MessageBox, _("SET FAILED!\n"), MessageBox.TYPE_ERROR)
-               else:
-                       self.saveAll()
-                       self.close()
-
-       def resetConfig(self):
-               for x in self["config"].list:
-                       x[1].cancel()
-
-def main(session, **kwargs):
-       session.open(ultimo4kMiscControl)
-
-def OnSessionStart(session, **kwargs):
-       setProcValueOnOff(config.plugins.ultimo4kMiscControl.forceLnbPower.value, PROC_FORCE_LNBPOWER)
-       setProcValueOnOff(config.plugins.ultimo4kMiscControl.forceToneBurst.value, PROC_FORCE_TONEBURST)
-       setProcValueOnOff(config.plugins.ultimo4kMiscControl.dvbCiDelay.value, PROC_DVB_CI_DELAY)
-
-def Plugins(**kwargs):
-       pList = []
-       pList.append( PluginDescriptor(where=PluginDescriptor.WHERE_SESSIONSTART, fnc=OnSessionStart) )
-       pList.append( PluginDescriptor(name=_("Ultimo4K Misc. Control"), description="set Ultimo4K LNB Power and etc..", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart = False, fnc=main) )
-       return pList
-
index 666033b..f671dde 100644 (file)
@@ -3,7 +3,7 @@ from Components.ActionMap import ActionMap
 from Components.ActionMap import NumberActionMap
 from Components.Label import Label
 
-from Components.config import config, ConfigSubsection, ConfigSelection, ConfigSubList, getConfigListEntry, KEY_LEFT, KEY_RIGHT, KEY_0, ConfigNothing, ConfigPIN
+from Components.config import config, ConfigSubsection, ConfigSelection, ConfigSubList, getConfigListEntry, KEY_LEFT, KEY_RIGHT, KEY_0, ConfigNothing, ConfigPIN, ConfigYesNo
 from Components.ConfigList import ConfigList
 
 from Components.SystemInfo import SystemInfo
@@ -11,56 +11,37 @@ from Tools.Directories import fileExists
 
 from enigma import eTimer, eDVBCI_UI, eDVBCIInterfaces
 
-MAX_NUM_CI = 4
-
 def setCIBitrate(configElement):
-       if configElement.value == "no":
-               eDVBCI_UI.getInstance().setClockRate(configElement.slotid, eDVBCI_UI.rateNormal)
-       else:
-               eDVBCI_UI.getInstance().setClockRate(configElement.slotid, eDVBCI_UI.rateHigh)
+       eDVBCI_UI.getInstance().setClockRate(configElement.slotid, eDVBCI_UI.rateHigh if configElement.value else eDVBCI_UI.rateNormal)
 
 def setRelevantPidsRouting(configElement):
-       fileName = "/proc/stb/tsmux/ci%d_relevant_pids_routing" % (configElement.slotid)
-       if not fileExists(fileName, 'r'):
-               print "[CI] file not found : ", fileName
-       else:
-               data = configElement.value
-               if data in ("yes", "no"):
-                       fd = open(fileName, 'w')
-                       fd.write("%s" % data)
-                       fd.close()
-
-relevantPidsRoutingChoices = None
+       open(SystemInfo["CI%dRelevantPidsRoutingSupport" % configElement.slotid], "w").write("yes" if configElement.value else "no")
+
+def setdvbCiDelay(configElement):
+       open(SystemInfo["CommonInterfaceCIDelay"], "w").write(configElement.value)
+       configElement.save()
+
 def InitCiConfig():
        config.ci = ConfigSubList()
-       for slot in range(MAX_NUM_CI):
-               config.ci.append(ConfigSubsection())
-               config.ci[slot].canDescrambleMultipleServices = ConfigSelection(choices = [("auto", _("Auto")), ("no", _("No")), ("yes", _("Yes"))], default = "auto")
-               if SystemInfo["CommonInterfaceSupportsHighBitrates"]:
-                       config.ci[slot].canHandleHighBitrates = ConfigSelection(choices = [("no", _("No")), ("yes", _("Yes"))], default = "no")
-                       config.ci[slot].canHandleHighBitrates.slotid = slot
-                       config.ci[slot].canHandleHighBitrates.addNotifier(setCIBitrate)
-
-               if SystemInfo["RelevantPidsRoutingSupport"]:
-                       global relevantPidsRoutingChoices
-                       if not relevantPidsRoutingChoices:
-                               relevantPidsRoutingChoices = [("no", _("No")), ("yes", _("Yes"))]
-                               default = "no"
-                               fileName = "/proc/stb/tsmux/ci%d_relevant_pids_routing_choices"
-                               if fileExists(fileName, 'r'):
-                                       relevantPidsRoutingChoices = []
-                                       fd = open(fileName, 'r')
-                                       data = fd.read()
-                                       data = data.split()
-                                       for x in data:
-                                               relevantPidsRoutingChoices.append((x, _(x)))
-                                       if default not in data:
-                                               default = data[0]
-
-                       config.ci[slot].relevantPidsRouting = ConfigSelection(choices = relevantPidsRoutingChoices, default = default)
-                       config.ci[slot].relevantPidsRouting.slotid = slot
-                       config.ci[slot].relevantPidsRouting.addNotifier(setRelevantPidsRouting)
-
+       config.cimisc = ConfigSubsection()
+       if SystemInfo["CommonInterface"]:
+               for slot in range(SystemInfo["CommonInterface"]):
+                       config.ci.append(ConfigSubsection())
+                       config.ci[slot].canDescrambleMultipleServices = ConfigSelection(choices = [("auto", _("Auto")), ("no", _("No")), ("yes", _("Yes"))], default = "auto")
+                       if SystemInfo["CI%dSupportsHighBitrates" % slot]:
+                               config.ci[slot].canHandleHighBitrates = ConfigYesNo(default = False)
+                               config.ci[slot].canHandleHighBitrates.slotid = slot
+                               config.ci[slot].canHandleHighBitrates.addNotifier(setCIBitrate)
+
+                       if SystemInfo["CI%dRelevantPidsRoutingSupport" % slot]:
+                               config.ci[slot].relevantPidsRouting = ConfigYesNo(default = False)
+                               config.ci[slot].relevantPidsRouting.slotid = slot
+                               config.ci[slot].relevantPidsRouting.addNotifier(setRelevantPidsRouting)
+
+               if SystemInfo["CommonInterfaceCIDelay"]:
+                       config.cimisc.dvbCiDelay = ConfigSelection(default = "256", choices = [("16"), ("32"), ("64"), ("128"), ("256")])
+                       config.cimisc.dvbCiDelay.addNotifier(setdvbCiDelay)
+                       
 class MMIDialog(Screen):
        def __init__(self, session, slotid, action, handler = eDVBCI_UI.getInstance(), wait_text = _("wait for ci...") ):
                Screen.__init__(self, session)
@@ -269,20 +250,6 @@ class CiMessageHandler:
                self.ci = { }
                self.dlgs = { }
                eDVBCI_UI.getInstance().ciStateChanged.get().append(self.ciStateChanged)
-               SystemInfo["CommonInterface"] = eDVBCIInterfaces.getInstance().getNumOfSlots() > 0
-               try:
-                       file = open("/proc/stb/tsmux/ci0_tsclk", "r")
-                       file.close()
-                       SystemInfo["CommonInterfaceSupportsHighBitrates"] = True
-               except:
-                       SystemInfo["CommonInterfaceSupportsHighBitrates"] = False
-
-               try:
-                       file = open("/proc/stb/tsmux/ci0_relevant_pids_routing", "r")
-                       file.close()
-                       SystemInfo["RelevantPidsRoutingSupport"] = True
-               except:
-                       SystemInfo["RelevantPidsRoutingSupport"] = False
 
        def setSession(self, session):
                self.session = session
@@ -329,6 +296,7 @@ class CiSelection(Screen):
                self.RelevantPidsRoutingEntry = {}
 
                self.entryData = []
+               self.DVBCiDelayEntry = None
 
                self.list = [ ]
                self["entries"] = ConfigList(self.list)
@@ -338,7 +306,7 @@ class CiSelection(Screen):
                self.onLayoutFinish.append(self.initialUpdate)
 
        def initialUpdate(self):
-               for slot in range(MAX_NUM_CI):
+               for slot in range(SystemInfo["CommonInterface"]):
                        state = eDVBCI_UI.getInstance().getState(slot)
                        if state != -1:
                                self.slots.append(slot)
@@ -346,7 +314,10 @@ class CiSelection(Screen):
                                self.createEntries(slot)
                                CiHandler.registerCIMessageHandler(slot, self.ciStateChanged)
 
+               self.slots.sort()
                self.updateEntries()
+               if self.slots:
+                       self["text"].setText(_("Slot %d")% (int(self.slots[0])+1))
 
        def selectionChanged(self):
                entryData = self.entryData[self["entries"].getCurrentIndex()]
@@ -367,10 +338,12 @@ class CiSelection(Screen):
                self.keyConfigEntry(KEY_RIGHT)
 
        def createEntries(self, slot):
-               if SystemInfo["CommonInterfaceSupportsHighBitrates"]:
+               if SystemInfo["CI%dSupportsHighBitrates" % slot]:
                        self.HighBitrateEntry[slot] = getConfigListEntry(_("High bitrate support"), config.ci[slot].canHandleHighBitrates)
-               if SystemInfo["RelevantPidsRoutingSupport"]:
+               if SystemInfo["CI%dRelevantPidsRoutingSupport" % slot]:
                        self.RelevantPidsRoutingEntry[slot] = getConfigListEntry(_("Relevant PIDs Routing"), config.ci[slot].relevantPidsRouting)
+               if SystemInfo["CommonInterfaceCIDelay"] and self.DVBCiDelayEntry is None:
+                       self.DVBCiDelayEntry = getConfigListEntry(_("DVB CI Delay"), config.cimisc.dvbCiDelay)
 
        def addToList(self, data, action, slotid):
                self.list.append(data)
@@ -379,6 +352,7 @@ class CiSelection(Screen):
        def updateEntries(self):
                self.list = []
                self.entryData = []
+
                for slot in self.slots:
                        self.addToList((_("Reset"), ConfigNothing()), 0, slot)
                        self.addToList((_("Init"), ConfigNothing()), 1, slot)
@@ -394,10 +368,12 @@ class CiSelection(Screen):
 
                        self.addToList(getConfigListEntry(_("Multiple service support"), config.ci[slot].canDescrambleMultipleServices), -1, slot)
 
-                       if SystemInfo["CommonInterfaceSupportsHighBitrates"]:
+                       if SystemInfo["CI%dSupportsHighBitrates" % slot]:
                                self.addToList(self.HighBitrateEntry[slot], -1, slot)
-                       if SystemInfo["RelevantPidsRoutingSupport"]:
+                       if SystemInfo["CI%dRelevantPidsRoutingSupport" % slot]:
                                self.addToList(self.RelevantPidsRoutingEntry[slot], -1, slot)
+                       if SystemInfo["CommonInterfaceCIDelay"]:
+                               self.addToList(self.DVBCiDelayEntry, -1, slot)
 
                self["entries"].list = self.list
                self["entries"].l.setList(self.list)
@@ -432,7 +408,7 @@ class CiSelection(Screen):
                                self.dlg = self.session.openWithCallback(self.dlgClosed, MMIDialog, slot, action)
 
        def cancel(self):
-               for slot in range(MAX_NUM_CI):
+               for slot in range(SystemInfo["CommonInterface"]):
                        state = eDVBCI_UI.getInstance().getState(slot)
                        if state != -1:
                                CiHandler.unregisterCIMessageHandler(slot)
index b886459..6aa5271 100755 (executable)
@@ -242,6 +242,9 @@ def fileExists(f, mode='r'):
                acc_mode = F_OK
        return access(f, acc_mode)
 
+def fileCheck(f, mode='r'):
+       return fileExists(f, mode) and f
+
 def getRecordingFilename(basename, dirname = None):
        if not dirname.endswith('/'):
                dirname += '/'