diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-11-23 18:00:18 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-11-23 18:00:18 +0000 |
| commit | e7a4be1d20a33dbd97acfa021db2f8b82bf7a844 (patch) | |
| tree | a7820c159e3a78df508536c3e491fd8e0b07cbc6 | |
| parent | b3b1977dd9ef8a27d2b313d0c5934718ef682665 (diff) | |
| download | enigma2-e7a4be1d20a33dbd97acfa021db2f8b82bf7a844.tar.gz enigma2-e7a4be1d20a33dbd97acfa021db2f8b82bf7a844.zip | |
add socket mmi plugin,
fix some mmi bugs
| -rw-r--r-- | configure.ac | 1 | ||||
| -rw-r--r-- | data/skin_default.xml | 6 | ||||
| -rw-r--r-- | lib/mmi/Makefile.am | 2 | ||||
| -rw-r--r-- | lib/mmi/mmi_ui.cpp | 10 | ||||
| -rw-r--r-- | lib/python/Plugins/Extensions/Makefile.am | 2 | ||||
| -rw-r--r-- | lib/python/Screens/Ci.py | 65 | ||||
| -rw-r--r-- | lib/python/Screens/InfoBar.py | 3 | ||||
| -rw-r--r-- | lib/python/enigma_python.i | 3 | ||||
| -rw-r--r-- | mytest.py | 3 |
9 files changed, 51 insertions, 44 deletions
diff --git a/configure.ac b/configure.ac index 9d8478ab..5838c3fd 100644 --- a/configure.ac +++ b/configure.ac @@ -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 diff --git a/data/skin_default.xml b/data/skin_default.xml index f6248b98..78c9d3f9 100644 --- a/data/skin_default.xml +++ b/data/skin_default.xml @@ -138,7 +138,7 @@ self.instance.move(ePoint((720-wsizex)/2, (576-wsizey)/(count > 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 > 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" /> diff --git a/lib/mmi/Makefile.am b/lib/mmi/Makefile.am index 020c988e..e6d6ebd4 100644 --- a/lib/mmi/Makefile.am +++ b/lib/mmi/Makefile.am @@ -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 diff --git a/lib/mmi/mmi_ui.cpp b/lib/mmi/mmi_ui.cpp index 54b220cf..70124f33 100644 --- a/lib/mmi/mmi_ui.cpp +++ b/lib/mmi/mmi_ui.cpp @@ -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) diff --git a/lib/python/Plugins/Extensions/Makefile.am b/lib/python/Plugins/Extensions/Makefile.am index f44f3e19..e0a7f819 100644 --- a/lib/python/Plugins/Extensions/Makefile.am +++ b/lib/python/Plugins/Extensions/Makefile.am @@ -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 diff --git a/lib/python/Screens/Ci.py b/lib/python/Screens/Ci.py index 75bdd5bc..f349d63a 100644 --- a/lib/python/Screens/Ci.py +++ b/lib/python/Screens/Ci.py @@ -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): diff --git a/lib/python/Screens/InfoBar.py b/lib/python/Screens/InfoBar.py index 57e61055..1e8f761f 100644 --- a/lib/python/Screens/InfoBar.py +++ b/lib/python/Screens/InfoBar.py @@ -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...")), diff --git a/lib/python/enigma_python.i b/lib/python/enigma_python.i index 77d9496d..06d74355 100644 --- a/lib/python/enigma_python.i +++ b/lib/python/enigma_python.i @@ -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> @@ -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): |
