add "High bitrate support" choice in CI Setup (needs new drivers to work)
authorghost <andreas.monzner@multimedia-labs.de>
Sun, 15 Mar 2009 10:58:52 +0000 (11:58 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Sun, 15 Mar 2009 10:58:52 +0000 (11:58 +0100)
data/skin_default.xml
lib/dvb_ci/dvbci.cpp
lib/dvb_ci/dvbci.h
lib/dvb_ci/dvbci_ui.cpp
lib/dvb_ci/dvbci_ui.h
lib/python/Screens/Ci.py
po/de.po
po/enigma2.pot

index f99e1a76caecc3ccdaf06a8cfa436aecfe0d5053..ed3b8a23d80309f69c3842d21e7db36940a9be4f 100755 (executable)
@@ -172,9 +172,9 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count &gt; 7 and 2 or 3)
                <widget name="bottom" position="10,230" size="430,25" font="Regular;23" />
        </screen>
        <!-- Common interface - selection -->
                <widget name="bottom" position="10,230" size="430,25" font="Regular;23" />
        </screen>
        <!-- Common interface - selection -->
-       <screen name="CiSelection" position="140,226" size="440,160" title="Common Interface">
+       <screen name="CiSelection" position="140,226" size="440,185" title="Common Interface">
                <widget name="text" position="10,10" size="430,25" font="Regular;23" />
                <widget name="text" position="10,10" size="430,25" font="Regular;23" />
-               <widget name="entries" position="10,55" size="420,100" scrollbarMode="showOnDemand" />
+               <widget name="entries" position="10,55" size="420,125" scrollbarMode="showOnDemand" />
        </screen>
        <!-- Console -->
        <screen name="Console" position="90,95" size="560,430" title="Command execution...">
        </screen>
        <!-- Console -->
        <screen name="Console" position="90,95" size="560,430" title="Command execution...">
index 8fa1bca2203e69f0264fc3afb0b599bd49d9a09c..ce1f7d660e8d2d0a446ffb4dffcf5493c55b4c9a 100644 (file)
@@ -938,6 +938,14 @@ PyObject *eDVBCIInterfaces::readCICaIds(int slotid)
        return 0;
 }
 
        return 0;
 }
 
+int eDVBCIInterfaces::setCIClockRate(int slotid, int rate)
+{
+       eDVBCISlot *slot = getSlot(slotid);
+       if (slot)
+               return slot->setClockRate(rate);
+       return -1;
+}
+
 int eDVBCISlot::send(const unsigned char *data, size_t len)
 {
        int res=0;
 int eDVBCISlot::send(const unsigned char *data, size_t len)
 {
        int res=0;
@@ -1323,4 +1331,21 @@ int eDVBCISlot::setSource(data_source source)
        return 0;
 }
 
        return 0;
 }
 
+int eDVBCISlot::setClockRate(int rate)
+{
+       char buf[64];
+       snprintf(buf, 64, "/proc/stb/tsmux/ci%d_tsclk", slotid);
+       FILE *ci = fopen(buf, "wb");
+       if (ci)
+       {
+               if (rate)
+                       fprintf(ci, "high");
+               else
+                       fprintf(ci, "normal");
+               fclose(ci);
+               return 0;
+       }
+       return -1;
+}
+
 eAutoInitP0<eDVBCIInterfaces> init_eDVBCIInterfaces(eAutoInitNumbers::dvb, "CI Slots");
 eAutoInitP0<eDVBCIInterfaces> init_eDVBCIInterfaces(eAutoInitNumbers::dvb, "CI Slots");
index c11a1203311ab32fd828a29963252cedb55b5414..cdaaf904b5e61a5c954db227c56050159737d124 100644 (file)
@@ -94,6 +94,7 @@ public:
        void removeService(uint16_t program_number=0xFFFF);
        int getNumOfServices() { return running_services.size(); }
        int setSource(data_source source);
        void removeService(uint16_t program_number=0xFFFF);
        int getNumOfServices() { return running_services.size(); }
        int setSource(data_source source);
+       int setClockRate(int);
 };
 
 struct CIPmtHandler
 };
 
 struct CIPmtHandler
@@ -146,6 +147,7 @@ public:
        int getMMIState(int slot);
        int sendCAPMT(int slot);
        int setInputSource(int tunerno, data_source source);
        int getMMIState(int slot);
        int sendCAPMT(int slot);
        int setInputSource(int tunerno, data_source source);
+       int setCIClockRate(int slot, int rate);
 #ifdef SWIG
 public:
 #endif
 #ifdef SWIG
 public:
 #endif
index af613c432042ef8d67b3b27bfb4082056a21e7c2..b1bfdc25acc9ecb30c40536c1af19fcac289d998 100644 (file)
@@ -71,5 +71,10 @@ int eDVBCI_UI::getMMIState(int slot)
        return eDVBCIInterfaces::getInstance()->getMMIState(slot);
 }
 
        return eDVBCIInterfaces::getInstance()->getMMIState(slot);
 }
 
+int eDVBCI_UI::setClockRate(int slot, int rate)
+{
+       return eDVBCIInterfaces::getInstance()->setCIClockRate(slot, rate);
+}
+
 //FIXME: correct "run/startlevel"
 eAutoInitP0<eDVBCI_UI> init_dvbciui(eAutoInitNumbers::rc, "DVB-CI UI");
 //FIXME: correct "run/startlevel"
 eAutoInitP0<eDVBCI_UI> init_dvbciui(eAutoInitNumbers::rc, "DVB-CI UI");
index b53ab02d4ba32d51c124e9bb3da840cd0e8423da..65b0f95d0ff645d51aea64eb472e53f8259d025e 100644 (file)
@@ -13,6 +13,7 @@ class eDVBCI_UI: public eMMI_UI
 #endif
        void stateChanged(int val) { ciStateChanged(val); }
 public:
 #endif
        void stateChanged(int val) { ciStateChanged(val); }
 public:
+       enum { rateNormal, rateHigh };
        PSignal1<void,int> ciStateChanged;
 #ifndef SWIG
        eDVBCI_UI();
        PSignal1<void,int> ciStateChanged;
 #ifndef SWIG
        eDVBCI_UI();
@@ -26,6 +27,7 @@ public:
        int answerMenu(int slot, int answer);
        int answerEnq(int slot, char *val);
        int cancelEnq(int slot);
        int answerMenu(int slot, int answer);
        int answerEnq(int slot, char *val);
        int cancelEnq(int slot);
+       int setClockRate(int slot, int rate);
 };
 
 #endif
 };
 
 #endif
index a997f7fe576987575f8584cbdfd74c59dec0d56a..19f4d921dc16358c8256bd9c04bbe91a6ed9a72c 100644 (file)
@@ -12,11 +12,21 @@ from enigma import eTimer, eDVBCI_UI, eDVBCIInterfaces
 
 MAX_NUM_CI = 4
 
 
 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)
+
 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")
 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)
 
 class MMIDialog(Screen):
        def __init__(self, session, slotid, action, handler = eDVBCI_UI.getInstance(), wait_text = _("wait for ci...") ):
 
 class MMIDialog(Screen):
        def __init__(self, session, slotid, action, handler = eDVBCI_UI.getInstance(), wait_text = _("wait for ci...") ):
@@ -226,7 +236,13 @@ class CiMessageHandler:
                self.ci = { }
                self.dlgs = { }
                eDVBCI_UI.getInstance().ciStateChanged.get().append(self.ciStateChanged)
                self.ci = { }
                self.dlgs = { }
                eDVBCI_UI.getInstance().ciStateChanged.get().append(self.ciStateChanged)
-               SystemInfo["CommonInterface"]= eDVBCIInterfaces.getInstance().getNumOfSlots() > 0
+               SystemInfo["CommonInterface"] = eDVBCIInterfaces.getInstance().getNumOfSlots() > 0
+               try:
+                       file = open("/proc/stb/tsmux/ci0_tsclk", "r")
+                       file.close()
+                       SystemInfo["CommonInterfaceSupportsHighBitrates"] = True
+               except:
+                       SystemInfo["CommonInterfaceSupportsHighBitrates"] = False
 
        def setSession(self, session):
                self.session = session
 
        def setSession(self, session):
                self.session = session
@@ -285,7 +301,7 @@ class CiSelection(Screen):
 
        def selectionChanged(self):
                cur_idx = self["entries"].getCurrentIndex()
 
        def selectionChanged(self):
                cur_idx = self["entries"].getCurrentIndex()
-               self["text"].setText(_("Slot %d")%((cur_idx / 4)+1))
+               self["text"].setText(_("Slot %d")%((cur_idx / 5)+1))
 
        def keyConfigEntry(self, key):
                try:
 
        def keyConfigEntry(self, key):
                try:
@@ -315,6 +331,7 @@ class CiSelection(Screen):
                        self.list.append( (appname, ConfigNothing(), 2, slot) )
 
                self.list.append(getConfigListEntry(_("Multiple service support"), config.ci[slot].canDescrambleMultipleServices))
                        self.list.append( (appname, ConfigNothing(), 2, slot) )
 
                self.list.append(getConfigListEntry(_("Multiple service support"), config.ci[slot].canDescrambleMultipleServices))
+               self.list.append(getConfigListEntry(_("High bitrate support"), config.ci[slot].canHandleHighBitrates))
 
        def updateState(self, slot):
                state = eDVBCI_UI.getInstance().getState(slot)
 
        def updateState(self, slot):
                state = eDVBCI_UI.getInstance().getState(slot)
index 6fc82571c621b69b3f8c1db81126322aa23cc919..acf7d8a8154df57322967c6f232b5b93ce116c92 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -1541,6 +1541,9 @@ msgstr "Hierarchieinformationen"
 msgid "Hierarchy mode"
 msgstr "Hierarchiemodus"
 
 msgid "Hierarchy mode"
 msgstr "Hierarchiemodus"
 
+msgid "High bitrate support"
+msgstr "Kann hohe Datenraten verarbeiten"
+
 msgid "Horizontal"
 msgstr ""
 
 msgid "Horizontal"
 msgstr ""
 
index 0e63744ee87ae59628cfc764eb9c2a61043ebce1..e8cc831417148f1f3aef2e5c9a19e170b940a2ae 100644 (file)
@@ -1828,6 +1828,10 @@ msgstr ""
 msgid "Hierarchy mode"
 msgstr ""
 
 msgid "Hierarchy mode"
 msgstr ""
 
+#: ../lib/python/Screens/Ci.py:334
+msgid "High bitrate support"
+msgstr ""
+
 #: ../lib/python/Tools/Transponder.py:31
 msgid "Horizontal"
 msgstr ""
 #: ../lib/python/Tools/Transponder.py:31
 msgid "Horizontal"
 msgstr ""