add socket mmi plugin,
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 23 Nov 2007 18:00:18 +0000 (18:00 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 23 Nov 2007 18:00:18 +0000 (18:00 +0000)
fix some mmi bugs

configure.ac
data/skin_default.xml
lib/mmi/Makefile.am
lib/mmi/mmi_ui.cpp
lib/python/Plugins/Extensions/Makefile.am
lib/python/Screens/Ci.py
lib/python/Screens/InfoBar.py
lib/python/enigma_python.i
mytest.py

index 9d8478a..5838c3f 100644 (file)
@@ -101,6 +101,7 @@ lib/python/Plugins/Extensions/MediaPlayer/Makefile
 lib/python/Plugins/Extensions/PicturePlayer/Makefile
 lib/python/Plugins/Extensions/PicturePlayer/data/Makefile
 lib/python/Plugins/Extensions/GraphMultiEPG/Makefile
+lib/python/Plugins/Extensions/SocketMMI/Makefile
 lib/python/Tools/Makefile
 lib/service/Makefile
 lib/components/Makefile
index f6248b9..78c9d3f 100644 (file)
@@ -138,7 +138,7 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count &gt; 7 and 2 or 3)
                </applet>
        </screen>
        <!-- Common interface -->
-       <screen name="CiMmi" position="135,153" size="450,270" >
+       <screen name="MMIDialog" position="135,153" size="450,270" >
                <widget name="title" position="10,10" size="430,25" font="Regular;23" />
                <widget name="subtitle" position="10,35" size="430,25" font="Regular;23" />
                <widget name="entries" position="10,70" size="430,150" scrollbarMode="showOnDemand" />
@@ -149,10 +149,6 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count &gt; 7 and 2 or 3)
                <widget name="text" position="10,5" size="440,25" font="Regular;23" />
                <widget name="entries" position="10,45" size="420,100" scrollbarMode="showOnDemand" />
        </screen>
-       <!-- Common interface - wait -->
-       <screen name="CiWait" position="180,263" size="360,50" title="Common Interface" >
-               <widget name="message" position="20,10" size="320,25" font="Regular;23" />
-       </screen>
        <!-- Clock display -->
        <screen name="clockDisplay" position="300,100" size="300,300" >
                <widget name="okbutton" position="10,10" size="280,40" />
index 020c988..e6d6ebd 100644 (file)
@@ -3,4 +3,4 @@ INCLUDES = \
 
 noinst_LIBRARIES = libenigma_mmi.a
 
-libenigma_mmi_a_SOURCES = mmi_ui.cpp
+libenigma_mmi_a_SOURCES = mmi_ui.cpp socket_mmi.cpp
index 54b220c..70124f3 100644 (file)
@@ -40,17 +40,17 @@ int eMMI_UI::processMMIData(int slot_id, const unsigned char *tag, const void *d
        {
                unsigned char *d=(unsigned char*)data;
                int timeout=0;
-               if (d[3] == 1)
+               if (d[0] == 1)
                {
-                       if (len > 4)
-                               timeout = d[4];
+                       if (len > 1)
+                               timeout = d[1];
                        else
                        {
                                eDebug("mmi close tag incorrect.. no timeout given.. assume 5 seconds");
                                timeout = 5;
                        }
                }
-               else if (d[3] > 1)
+               else if (d[0] > 1)
                        eDebug("mmi close tag incorrect.. byte 4 should be 0 or 1");
                mmiScreenClose(slot_id, timeout);
                break;
@@ -295,7 +295,7 @@ int eMMI_UI::mmiScreenFinish(int slot)
 
 void eMMI_UI::mmiSessionDestroyed(int slot)
 {
-       stateChanged(slot);
+       mmiScreenClose(slot, 0);
 }
 
 PyObject *eMMI_UI::getMMIScreen(int slot)
index f44f3e1..e0a7f81 100644 (file)
@@ -1,2 +1,2 @@
-SUBDIRS = TuxboxPlugins FileManager CutListEditor PicturePlayer MediaScanner MediaPlayer IpkgInstaller GraphMultiEPG
+SUBDIRS = TuxboxPlugins FileManager CutListEditor PicturePlayer MediaScanner MediaPlayer IpkgInstaller GraphMultiEPG SocketMMI
 # SimpleRSS is still not finished
index 75bdd5b..f349d63 100644 (file)
@@ -16,11 +16,11 @@ def InitCiConfig():
                config.ci.append(ConfigSubsection())
                config.ci[slot].canDescrambleMultipleServices = ConfigSelection(choices = [("auto", _("Auto")), ("no", _("No")), ("yes", _("Yes"))], default = "auto")
 
-class CiMmi(Screen):
-       def __init__(self, session, slotid, action):
+class MMIDialog(Screen):
+       def __init__(self, session, slotid, action, handler = eDVBCI_UI.getInstance(), wait_text = _("wait for ci...") ):
                Screen.__init__(self, session)
 
-               print "ciMMI with action" + str(action)
+               print "MMIDialog with action" + str(action)
 
                self.tag = None
                self.slotid = slotid
@@ -55,8 +55,11 @@ class CiMmi(Screen):
 
                self.action = action
 
+               self.handler = handler
+               self.wait_text = wait_text
+
                if action == 2:         #start MMI
-                       eDVBCI_UI.getInstance().startMMI(self.slotid)
+                       handler.startMMI(self.slotid)
                        self.showWait()
                elif action == 3:               #mmi already there (called from infobar)
                        self.showScreen()
@@ -86,14 +89,14 @@ class CiMmi(Screen):
                        print "answer MENU"
                        cur = self["entries"].getCurrent()
                        if cur:
-                               eDVBCI_UI.getInstance().answerMenu(self.slotid, cur[2])
+                               self.handler.answerMenu(self.slotid, cur[2])
                        else:
-                               eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
-                       self.showWait() 
+                               self.handler.answerMenu(self.slotid, 0)
+                       self.showWait()
                elif self.tag == "LIST":
                        print "answer LIST"
-                       eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
-                       self.showWait() 
+                       self.handler.answerMenu(self.slotid, 0)
+                       self.showWait()
                elif self.tag == "ENQ":
                        cur = self["entries"].getCurrent()
                        answer = str(cur[1].value)
@@ -101,7 +104,7 @@ class CiMmi(Screen):
                        while length < cur[1].getLength():
                                answer = '0'+answer
                                length+=1
-                       eDVBCI_UI.getInstance().answerEnq(self.slotid, answer)
+                       self.handler.answerEnq(self.slotid, answer)
                        self.showWait()
 
        def closeMmi(self):
@@ -111,20 +114,21 @@ class CiMmi(Screen):
        def keyCancel(self):
                self.timer.stop()
                if not self.tag:
+                       self.closeMmi()
                        return
                if self.tag == "WAIT":
-                       eDVBCI_UI.getInstance().stopMMI(self.slotid)
+                       self.handler.stopMMI(self.slotid)
                        self.closeMmi()
                elif self.tag in [ "MENU", "LIST" ]:
                        print "cancel list"
-                       eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
+                       self.handler.answerMenu(self.slotid, 0)
                        self.showWait()
                elif self.tag == "ENQ":
                        print "cancel enq"
-                       eDVBCI_UI.getInstance().cancelEnq(self.slotid)
+                       self.handler.cancelEnq(self.slotid)
                        self.showWait()
                else:
-                       print "give cancel action to ci"        
+                       print "give cancel action to ci"
 
        def keyConfigEntry(self, key):
                self.timer.stop()
@@ -159,12 +163,12 @@ class CiMmi(Screen):
                self["subtitle"].setText("")
                self["bottom"].setText("")
                list = [ ]
-               list.append( (_("wait for ci..."), ConfigNothing()) )
+               list.append( (self.wait_text, ConfigNothing()) )
                self.updateList(list)
 
        def showScreen(self):
-               screen = eDVBCI_UI.getInstance().getMMIScreen(self.slotid)
-       
+               screen = self.handler.getMMIScreen(self.slotid)
+
                list = [ ]
 
                self.timer.stop()
@@ -191,23 +195,26 @@ class CiMmi(Screen):
                        self.updateList(list)
 
        def ciStateChanged(self):
+               do_close = False
                if self.action == 0:                    #reset
-                       self.closeMmi()
+                       do_close = True
                if self.action == 1:                    #init
-                       self.closeMmi()
+                       do_close = True
 
-               #module still there ?                   
-               if eDVBCI_UI.getInstance().getState(self.slotid) != 2:
-                       self.closeMmi()
+               #module still there ?
+               if self.handler.getState(self.slotid) != 2:
+                       do_close = True
 
-               #mmi session still active ?                     
-               if eDVBCI_UI.getInstance().getMMIState(self.slotid) != 1:
-                       self.closeMmi()
+               #mmi session still active ?
+               if self.handler.getMMIState(self.slotid) != 1:
+                       do_close = True
 
-               if self.action > 1 and eDVBCI_UI.getInstance().availableMMI(self.slotid) == 1:
+               if do_close:
+                       self.closeMmi()
+               elif self.action > 1 and self.handler.availableMMI(self.slotid) == 1:
                        self.showScreen()
 
-               #FIXME: check for mmi-session closed    
+               #FIXME: check for mmi-session closed
 
 class CiMessageHandler:
        def __init__(self):
@@ -227,7 +234,7 @@ class CiMessageHandler:
                                self.dlgs[slot].ciStateChanged()
                        elif eDVBCI_UI.getInstance().availableMMI(slot) == 1:
                                if self.session:
-                                       self.dlgs[slot] = self.session.openWithCallback(self.dlgClosed, CiMmi, slot, 3)
+                                       self.dlgs[slot] = self.session.openWithCallback(self.dlgClosed, MMIDialog, slot, 3)
 
        def dlgClosed(self, slot):
                if slot in self.dlgs:
@@ -351,7 +358,7 @@ class CiSelection(Screen):
                        elif action == 1:               #init
                                eDVBCI_UI.getInstance().setInit(slot)
                        elif self.state[slot] == 2:
-                               self.dlg = self.session.openWithCallback(self.dlgClosed, CiMmi, slot, action)
+                               self.dlg = self.session.openWithCallback(self.dlgClosed, MMIDialog, slot, action)
 
        def cancel(self):
                for slot in range(MAX_NUM_CI):
index 57e6105..1e8f761 100644 (file)
@@ -3,7 +3,6 @@ from Screen import Screen
 from Screens.MovieSelection import MovieSelection
 from Screens.ChannelSelection import ChannelSelectionRadio
 from Screens.ChoiceBox import ChoiceBox
-from Screens.Ci import CiHandler
 
 from Components.Sources.Source import ObsoleteSource
 from Components.ActionMap import HelpableActionMap
@@ -37,8 +36,6 @@ class InfoBar(InfoBarShowHide,
        def __init__(self, session):
                Screen.__init__(self, session)
 
-               CiHandler.setSession(session)
-
                self["actions"] = HelpableActionMap(self, "InfobarActions",
                        {
                                "showMovies": (self.showMovies, _("Play recorded movies...")),
index 77d9496..06d7435 100644 (file)
@@ -93,6 +93,7 @@ is usually caused by not marking PSignals as immutable.
 #include <lib/driver/etimezone.h>
 #include <lib/gdi/lcd.h>
 #include <lib/mmi/mmi_ui.h>
+#include <lib/mmi/socket_mmi.h>
 #include <lib/dvb_ci/dvbci.h>
 #include <lib/dvb_ci/dvbci_ui.h>
 #include <lib/python/python.h>
@@ -154,6 +155,7 @@ typedef long time_t;
 %immutable pNavigation::m_record_event;
 %immutable eListbox::selectionChanged;
 %immutable eDVBCI_UI::ciStateChanged;
+%immutable eSocket_UI::socketStateChanged;
 %immutable eDVBResourceManager::frontendUseMaskChanged;
 %immutable eAVSwitch::vcr_sb_notifier;
 %immutable ePythonMessagePump::recv_msg;
@@ -209,6 +211,7 @@ typedef long time_t;
 %include <lib/driver/etimezone.h>
 %include <lib/gdi/lcd.h>
 %include <lib/mmi/mmi_ui.h>
+%include <lib/mmi/socket_mmi.h>
 %include <lib/dvb_ci/dvbci.h>
 %include <lib/dvb_ci/dvbci_ui.h>
 %include <lib/dvb/db.h>
index 38e18d6..99aecb1 100644 (file)
--- a/mytest.py
+++ b/mytest.py
@@ -476,12 +476,15 @@ class AutoScartControl:
                                self.scartDialog.switchToTV()
 
 from enigma import eDVBCIInterfaces
+from Screens.Ci import CiHandler
 
 def runScreenTest():
        plugins.readPluginList(resolveFilename(SCOPE_PLUGINS))
 
        session = Session(desktop = getDesktop(0), summary_desktop = getDesktop(1), navigation = Navigation())
 
+       CiHandler.setSession(session)
+
        screensToRun = [ ]
 
        for p in plugins.getPlugins(PluginDescriptor.WHERE_WIZARD):