lib/dvb_ci/Makefile
lib/gdi/Makefile
lib/gui/Makefile
+lib/mmi/Makefile
lib/nav/Makefile
lib/python/Makefile
lib/python/Components/Makefile
#include <lib/dvb_ci/dvbci_mmi.h>
#include <lib/dvb_ci/dvbci_ui.h>
-#include <lib/base/estring.h>
+
+#include <string>
/*
PyObject *list = PyList_New(len);
eDebug("");
if ((tag[0]==0x9f) && (tag[1]==0x88))
- {
- switch (tag[2])
- {
- case 0x00: //Tmmi_close
+ if (eDVBCI_UI::getInstance()->processMMIData(slot->getSlotID(), tag, data, len) == 1)
{
- unsigned char *d=(unsigned char*)data;
- int timeout=0;
- if (d[3] == 1)
- {
- if (len > 4)
- timeout = d[4];
- else
- {
- eDebug("mmi close tag incorrect.. no timeout given.. assume 5 seconds");
- timeout = 5;
- }
- }
- else if (d[3] > 1)
- eDebug("mmi close tag incorrect.. byte 4 should be 0 or 1");
- eDVBCI_UI::getInstance()->mmiScreenClose(slot->getSlotID(), timeout);
- break;
- }
- case 0x01:
- eDebug("MMI display control");
- if (((unsigned char*)data)[0] != 1)
- eDebug("kann ich nicht. aber das sag ich dem modul nicht.");
state=stateDisplayReply;
return 1;
- case 0x07: //Tmenu_enq
- {
- unsigned char *d=(unsigned char*)data;
- unsigned char *max=((unsigned char*)d) + len;
- int textlen = len - 2;
-
- eDebug("in enq");
-
- if ((d+2) > max)
- break;
-
- int blind = *d++ & 1;
- int alen = *d++;
-
- eDebug("%d bytes text", textlen);
- if ((d+textlen) > max)
- break;
-
- char str[textlen + 1];
- memcpy(str, ((char*)d), textlen);
- str[textlen] = '\0';
-
- eDebug("enq-text: %s",str);
-
- eDVBCI_UI::getInstance()->mmiScreenEnq(slot->getSlotID(), blind, alen, (char*)convertDVBUTF8(str).c_str());
-
- break;
}
- case 0x09: //Tmenu_last
- case 0x0c: //Tlist_last
- {
- unsigned char *d=(unsigned char*)data;
- unsigned char *max=((unsigned char*)d) + len;
- int pos = 0;
- eDebug("Tmenu_last");
- if (d > max)
- break;
- int n=*d++;
-
- if(tag[2] == 0x09) //menu
- eDVBCI_UI::getInstance()->mmiScreenBegin(slot->getSlotID(), 0);
- else //list
- eDVBCI_UI::getInstance()->mmiScreenBegin(slot->getSlotID(), 1);
-
- if (n == 0xFF)
- n=0;
- else
- n++;
- eDebug("%d texts", n);
- for (int i=0; i < (n+3); ++i)
- {
- int textlen;
- if ((d+3) > max)
- break;
- eDebug("text tag: %02x %02x %02x", d[0], d[1], d[2]);
- d+=3;
- d+=parseLengthField(d, textlen);
- eDebug("%d bytes text", textlen);
- if ((d+textlen) > max)
- break;
-
- char str[textlen + 1];
- memcpy(str, ((char*)d), textlen);
- str[textlen] = '\0';
-
- eDVBCI_UI::getInstance()->mmiScreenAddText(slot->getSlotID(), pos++, (char*)convertDVBUTF8(str).c_str());
-
- while (textlen--)
- eDebugNoNewLine("%c", *d++);
- eDebug("");
- }
- eDVBCI_UI::getInstance()->mmiScreenFinish(slot->getSlotID());
- break;
- }
- default:
- eDebug("unknown APDU tag 9F 88 %02x", tag[2]);
- break;
- }
- }
+
return 0;
}
#include <fcntl.h>
#include <sys/ioctl.h>
-#include <string>
-
#include <lib/base/init.h>
#include <lib/base/init_num.h>
#include <lib/base/eerror.h>
+#include <lib/base/estring.h>
+
+#define MAX_SLOTS 4
eDVBCI_UI *eDVBCI_UI::instance;
eDVBCI_UI::eDVBCI_UI()
+ :eMMI_UI(MAX_SLOTS)
{
ASSERT(!instance);
instance = this;
- for(int i=0;i<MAX_SLOTS;++i)
- {
- slotdata[i].mmiScreenReady=0;
- slotdata[i].mmiTuplePos=0;
- slotdata[i].state=-1;
- }
-}
-
-eDVBCI_UI::~eDVBCI_UI()
-{
- for(int i=0;i<MAX_SLOTS;++i)
- {
- if (slotdata[i].mmiScreen)
- Py_DECREF(slotdata[i].mmiScreen);
- }
}
eDVBCI_UI *eDVBCI_UI::getInstance()
return instance;
}
-int eDVBCI_UI::getState(int slot)
-{
- if (slot < MAX_SLOTS)
- return slotdata[slot].state;
- return 0;
-}
-
-void eDVBCI_UI::setState(int slot, int newState)
-{
- if (slot < MAX_SLOTS)
- {
- slotdata[slot].state = newState;
- /*emit*/ ciStateChanged(slot);
- }
-}
-
-std::string eDVBCI_UI::getAppName(int slot)
-{
- if (slot < MAX_SLOTS)
- return slotdata[slot].appName;
- return "";
-}
-
-void eDVBCI_UI::setAppName(int slot, const char *name)
-{
- if (slot < MAX_SLOTS)
- slotdata[slot].appName = name;
-}
-
void eDVBCI_UI::setInit(int slot)
{
eDVBCIInterfaces::getInstance()->initialize(slot);
return 0;
}
-int eDVBCI_UI::availableMMI(int slot)
-{
- if (slot < MAX_SLOTS)
- return slotdata[slot].mmiScreenReady;
- return false;
-}
-
-int eDVBCI_UI::mmiScreenClose(int slot, int timeout)
-{
- if (slot >= MAX_SLOTS)
- return 0;
-
- slot_ui_data &data = slotdata[slot];
-
- data.mmiScreenReady = 0;
-
- if (data.mmiScreen)
- Py_DECREF(data.mmiScreen);
- data.mmiScreen = PyList_New(1);
-
- ePyObject tuple = PyTuple_New(2);
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("CLOSE"));
- PyTuple_SET_ITEM(tuple, 1, PyLong_FromLong(timeout));
- PyList_SET_ITEM(data.mmiScreen, 0, tuple);
- data.mmiScreenReady = 1;
- /*emit*/ ciStateChanged(slot);
- return 0;
-}
-
-int eDVBCI_UI::mmiScreenEnq(int slot, int blind, int answerLen, char *text)
-{
- if (slot >= MAX_SLOTS)
- return 0;
-
- slot_ui_data &data = slotdata[slot];
-
- data.mmiScreenReady = 0;
-
- if (data.mmiScreen)
- Py_DECREF(data.mmiScreen);
- data.mmiScreen = PyList_New(2);
-
- ePyObject tuple = PyTuple_New(1);
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("ENQ"));
- PyList_SET_ITEM(data.mmiScreen, 0, tuple);
-
- tuple = PyTuple_New(4);
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("PIN"));
- PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(answerLen));
- PyTuple_SET_ITEM(tuple, 2, PyString_FromString(text));
- PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(blind));
-
- PyList_SET_ITEM(data.mmiScreen, 1, tuple);
-
- data.mmiScreenReady = 1;
-
- /*emit*/ ciStateChanged(slot);
-
- return 0;
-}
-
-int eDVBCI_UI::mmiScreenBegin(int slot, int listmenu)
-{
- if (slot >= MAX_SLOTS)
- return 0;
-
- eDebug("eDVBCI_UI::mmiScreenBegin");
-
- slot_ui_data &data = slotdata[slot];
-
- data.mmiScreenReady = 0;
-
- if (data.mmiScreen)
- Py_DECREF(data.mmiScreen);
-
- data.mmiScreen = PyList_New(1);
-
- ePyObject tuple = PyTuple_New(1);
- if (listmenu == 0) //menu
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("MENU"));
- else //list
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("LIST"));
-
- PyList_SET_ITEM(data.mmiScreen, 0, tuple);
-
- data.mmiTuplePos = 1;
-
- return 0;
-}
-
-int eDVBCI_UI::mmiScreenAddText(int slot, int type, char *value)
-{
- if (slot >= MAX_SLOTS)
- return 0;
-
- eDebug("eDVBCI_UI::mmiScreenAddText(%s)",value ? value : "");
-
- slot_ui_data &data = slotdata[slot];
-
- ePyObject tuple = PyTuple_New(3);
-
- if (type == 0) //title
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("TITLE"));
- else if (type == 1) //subtitle
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("SUBTITLE"));
- else if (type == 2) //bottom
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("BOTTOM"));
- else
- PyTuple_SET_ITEM(tuple, 0, PyString_FromString("TEXT"));
-
- eDebug("addText %s with id %d", value, type);
-
- PyTuple_SET_ITEM(tuple, 1, PyString_FromString(value));
-
- if (type > 2)
- PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(type-2));
- else
- PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(-1));
-
- PyList_Append(data.mmiScreen, tuple);
- Py_DECREF(tuple);
-
- return 0;
-}
-
-int eDVBCI_UI::mmiScreenFinish(int slot)
-{
- if (slot < MAX_SLOTS)
- {
- eDebug("eDVBCI_UI::mmiScreenFinish");
- slotdata[slot].mmiScreenReady = 1;
- /*emit*/ ciStateChanged(slot);
- }
- return 0;
-}
-
-void eDVBCI_UI::mmiSessionDestroyed(int slot)
-{
- /*emit*/ ciStateChanged(slot);
-}
-
int eDVBCI_UI::getMMIState(int slot)
{
return eDVBCIInterfaces::getInstance()->getMMIState(slot);
}
-PyObject *eDVBCI_UI::getMMIScreen(int slot)
-{
- if (slot < MAX_SLOTS)
- {
- slot_ui_data &data = slotdata[slot];
- if (data.mmiScreenReady)
- {
- data.mmiScreenReady = 0;
- Py_INCREF(data.mmiScreen);
- return data.mmiScreen;
- }
- }
- Py_RETURN_NONE;
-}
-
//FIXME: correct "run/startlevel"
eAutoInitP0<eDVBCI_UI> init_dvbciui(eAutoInitNumbers::rc, "DVB-CI UI");
#define __dvbci_ui_h
#include <string>
- /* avoid warnigs :) */
-#undef _POSIX_C_SOURCE
-#define _POSIX_C_SOURCE 200112L
-#include <lib/python/python.h>
+#include <lib/mmi/mmi_ui.h>
#include <lib/python/connections.h>
-#define MAX_SLOTS 4
-
-#ifndef SWIG
-struct slot_ui_data
-{
- std::string appName;
- int state;
- ePyObject mmiScreen;
- int mmiTuplePos;
- int mmiScreenReady;
-};
-#endif
-
-class eDVBCI_UI
+class eDVBCI_UI: public eMMI_UI
{
static eDVBCI_UI *instance;
-#ifndef SWIG
- slot_ui_data slotdata[MAX_SLOTS];
-#else
+#ifdef SWIG
eDVBCI_UI();
- ~eDVBCI_UI();
#endif
+ void stateChanged(int val) { ciStateChanged(val); }
public:
PSignal1<void,int> ciStateChanged;
#ifndef SWIG
eDVBCI_UI();
- ~eDVBCI_UI();
#endif
static eDVBCI_UI *getInstance();
-
- int getState(int slot);
- void setState(int slot, int state);
- std::string getAppName(int slot);
- void setAppName(int slot, const char *name);
void setInit(int slot);
void setReset(int slot);
int startMMI(int slot);
int stopMMI(int slot);
- int availableMMI(int slot);
int getMMIState(int slot);
int answerMenu(int slot, int answer);
int answerEnq(int slot, char *val);
int cancelEnq(int slot);
-
- PyObject *getMMIScreen(int slot);
-#ifndef SWIG
- int mmiScreenClose(int slot, int timeout);
- int mmiScreenEnq(int slot, int blind, int answerLen, char *text);
- int mmiScreenBegin(int slot, int listmenu);
- int mmiScreenAddText(int slot, int type, char *value);
- int mmiScreenFinish(int slot);
- void mmiSessionDestroyed(int slot);
-#endif
};
#endif
--- /dev/null
+INCLUDES = \
+ -I$(top_srcdir)/include
+
+noinst_LIBRARIES = libenigma_mmi.a
+
+libenigma_mmi_a_SOURCES = mmi_ui.cpp
--- /dev/null
+#include <lib/mmi/mmi_ui.h>
+#include <lib/dvb_ci/dvbci_session.h> // for parseLengthField
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#include <lib/base/init.h>
+#include <lib/base/init_num.h>
+#include <lib/base/eerror.h>
+#include <lib/base/estring.h>
+
+eMMI_UI::eMMI_UI(int max_slots)
+ :m_max_slots(max_slots)
+{
+ slotdata = new slot_ui_data[m_max_slots];
+ for(int i=0;i<m_max_slots;++i)
+ {
+ slotdata[i].mmiScreenReady=0;
+ slotdata[i].mmiTuplePos=0;
+ slotdata[i].state=-1;
+ }
+}
+
+eMMI_UI::~eMMI_UI()
+{
+ for(int i=0;i<m_max_slots;++i)
+ {
+ if (slotdata[i].mmiScreen)
+ Py_DECREF(slotdata[i].mmiScreen);
+ }
+ delete [] slotdata;
+}
+
+int eMMI_UI::processMMIData(int slot_id, const unsigned char *tag, const void *data, int len)
+{
+ switch (tag[2])
+ {
+ case 0x00: //Tmmi_close
+ {
+ unsigned char *d=(unsigned char*)data;
+ int timeout=0;
+ if (d[3] == 1)
+ {
+ if (len > 4)
+ timeout = d[4];
+ else
+ {
+ eDebug("mmi close tag incorrect.. no timeout given.. assume 5 seconds");
+ timeout = 5;
+ }
+ }
+ else if (d[3] > 1)
+ eDebug("mmi close tag incorrect.. byte 4 should be 0 or 1");
+ mmiScreenClose(slot_id, timeout);
+ break;
+ }
+ case 0x01:
+ eDebug("MMI display control");
+ if (((unsigned char*)data)[0] != 1)
+ eDebug("kann ich nicht. aber das sag ich dem modul nicht.");
+ return 1;
+ case 0x07: //Tmenu_enq
+ {
+ unsigned char *d=(unsigned char*)data;
+ unsigned char *max=((unsigned char*)d) + len;
+ int textlen = len - 2;
+ eDebug("in enq");
+ if ((d+2) > max)
+ break;
+ int blind = *d++ & 1;
+ int alen = *d++;
+ eDebug("%d bytes text", textlen);
+ if ((d+textlen) > max)
+ break;
+ char str[textlen + 1];
+ memcpy(str, ((char*)d), textlen);
+ str[textlen] = '\0';
+ eDebug("enq-text: %s",str);
+ mmiScreenEnq(slot_id, blind, alen, (char*)convertDVBUTF8(str).c_str());
+ break;
+ }
+ case 0x09: //Tmenu_last
+ case 0x0c: //Tlist_last
+ {
+ unsigned char *d=(unsigned char*)data;
+ unsigned char *max=((unsigned char*)d) + len;
+ int pos = 0;
+ eDebug("Tmenu_last");
+ if (d > max)
+ break;
+ int n=*d++;
+ if(tag[2] == 0x09) //menu
+ mmiScreenBegin(slot_id, 0);
+ else //list
+ mmiScreenBegin(slot_id, 1);
+ if (n == 0xFF)
+ n=0;
+ else
+ n++;
+ eDebug("%d texts", n);
+ for (int i=0; i < (n+3); ++i)
+ {
+ int textlen;
+ if ((d+3) > max)
+ break;
+ eDebug("text tag: %02x %02x %02x", d[0], d[1], d[2]);
+ d+=3;
+ d+=eDVBCISession::parseLengthField(d, textlen);
+ eDebug("%d bytes text", textlen);
+ if ((d+textlen) > max)
+ break;
+ char str[textlen + 1];
+ memcpy(str, ((char*)d), textlen);
+ str[textlen] = '\0';
+ mmiScreenAddText(slot_id, pos++, (char*)convertDVBUTF8(str).c_str());
+ while (textlen--)
+ eDebugNoNewLine("%c", *d++);
+ eDebug("");
+ }
+ mmiScreenFinish(slot_id);
+ break;
+ }
+ default:
+ eDebug("unknown APDU tag 9F 88 %02x", tag[2]);
+ break;
+ }
+ return 0;
+}
+
+int eMMI_UI::getState(int slot)
+{
+ if (slot < m_max_slots)
+ return slotdata[slot].state;
+ return 0;
+}
+
+void eMMI_UI::setState(int slot, int newState)
+{
+ if (slot < m_max_slots)
+ {
+ slotdata[slot].state = newState;
+ stateChanged(slot);
+ }
+}
+
+std::string eMMI_UI::getAppName(int slot)
+{
+ if (slot < m_max_slots)
+ return slotdata[slot].appName;
+ return "";
+}
+
+void eMMI_UI::setAppName(int slot, const char *name)
+{
+ if (slot < m_max_slots)
+ slotdata[slot].appName = name;
+}
+
+int eMMI_UI::availableMMI(int slot)
+{
+ if (slot < m_max_slots)
+ return slotdata[slot].mmiScreenReady;
+ return false;
+}
+
+int eMMI_UI::mmiScreenClose(int slot, int timeout)
+{
+ if (slot >= m_max_slots)
+ return 0;
+
+ slot_ui_data &data = slotdata[slot];
+
+ data.mmiScreenReady = 0;
+
+ if (data.mmiScreen)
+ Py_DECREF(data.mmiScreen);
+ data.mmiScreen = PyList_New(1);
+
+ ePyObject tuple = PyTuple_New(2);
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("CLOSE"));
+ PyTuple_SET_ITEM(tuple, 1, PyLong_FromLong(timeout));
+ PyList_SET_ITEM(data.mmiScreen, 0, tuple);
+ data.mmiScreenReady = 1;
+ stateChanged(slot);
+ return 0;
+}
+
+int eMMI_UI::mmiScreenEnq(int slot, int blind, int answerLen, char *text)
+{
+ if (slot >= m_max_slots)
+ return 0;
+
+ slot_ui_data &data = slotdata[slot];
+
+ data.mmiScreenReady = 0;
+
+ if (data.mmiScreen)
+ Py_DECREF(data.mmiScreen);
+ data.mmiScreen = PyList_New(2);
+
+ ePyObject tuple = PyTuple_New(1);
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("ENQ"));
+ PyList_SET_ITEM(data.mmiScreen, 0, tuple);
+
+ tuple = PyTuple_New(4);
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("PIN"));
+ PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(answerLen));
+ PyTuple_SET_ITEM(tuple, 2, PyString_FromString(text));
+ PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(blind));
+
+ PyList_SET_ITEM(data.mmiScreen, 1, tuple);
+
+ data.mmiScreenReady = 1;
+
+ stateChanged(slot);
+
+ return 0;
+}
+
+int eMMI_UI::mmiScreenBegin(int slot, int listmenu)
+{
+ if (slot >= m_max_slots)
+ return 0;
+
+ eDebug("eMMI_UI::mmiScreenBegin");
+
+ slot_ui_data &data = slotdata[slot];
+
+ data.mmiScreenReady = 0;
+
+ if (data.mmiScreen)
+ Py_DECREF(data.mmiScreen);
+
+ data.mmiScreen = PyList_New(1);
+
+ ePyObject tuple = PyTuple_New(1);
+ if (listmenu == 0) //menu
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("MENU"));
+ else //list
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("LIST"));
+
+ PyList_SET_ITEM(data.mmiScreen, 0, tuple);
+
+ data.mmiTuplePos = 1;
+
+ return 0;
+}
+
+int eMMI_UI::mmiScreenAddText(int slot, int type, char *value)
+{
+ if (slot >= m_max_slots)
+ return 0;
+
+ eDebug("eMMI_UI::mmiScreenAddText(%s)",value ? value : "");
+
+ slot_ui_data &data = slotdata[slot];
+
+ ePyObject tuple = PyTuple_New(3);
+
+ if (type == 0) //title
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("TITLE"));
+ else if (type == 1) //subtitle
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("SUBTITLE"));
+ else if (type == 2) //bottom
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("BOTTOM"));
+ else
+ PyTuple_SET_ITEM(tuple, 0, PyString_FromString("TEXT"));
+
+ eDebug("addText %s with id %d", value, type);
+
+ PyTuple_SET_ITEM(tuple, 1, PyString_FromString(value));
+
+ if (type > 2)
+ PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(type-2));
+ else
+ PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(-1));
+
+ PyList_Append(data.mmiScreen, tuple);
+ Py_DECREF(tuple);
+
+ return 0;
+}
+
+int eMMI_UI::mmiScreenFinish(int slot)
+{
+ if (slot < m_max_slots)
+ {
+ eDebug("eMMI_UI::mmiScreenFinish");
+ slotdata[slot].mmiScreenReady = 1;
+ stateChanged(slot);
+ }
+ return 0;
+}
+
+void eMMI_UI::mmiSessionDestroyed(int slot)
+{
+ stateChanged(slot);
+}
+
+PyObject *eMMI_UI::getMMIScreen(int slot)
+{
+ if (slot < m_max_slots)
+ {
+ slot_ui_data &data = slotdata[slot];
+ if (data.mmiScreenReady)
+ {
+ data.mmiScreenReady = 0;
+ Py_INCREF(data.mmiScreen);
+ return data.mmiScreen;
+ }
+ }
+ Py_RETURN_NONE;
+}
--- /dev/null
+#ifndef __mmi_ui_h
+#define __mmi_ui_h
+
+#include <string>
+ /* avoid warnigs :) */
+#undef _POSIX_C_SOURCE
+#define _POSIX_C_SOURCE 200112L
+#include <lib/python/python.h>
+
+#ifndef SWIG
+struct slot_ui_data
+{
+ std::string appName;
+ int state;
+ ePyObject mmiScreen;
+ int mmiTuplePos;
+ int mmiScreenReady;
+};
+#endif
+
+class eMMI_UI: public Object
+{
+ int m_max_slots;
+ virtual void stateChanged(int)=0;
+protected:
+ slot_ui_data *slotdata;
+ eMMI_UI(int max_slots);
+ virtual ~eMMI_UI();
+public:
+ int getState(int slot);
+ void setState(int slot, int state);
+ std::string getAppName(int slot);
+ void setAppName(int slot, const char *name);
+#ifndef SWIG
+ virtual void setInit(int slot)=0;
+ virtual void setReset(int slot)=0;
+ virtual int startMMI(int slot)=0;
+ virtual int stopMMI(int slot)=0;
+ virtual int answerMenu(int slot, int answer)=0;
+ virtual int answerEnq(int slot, char *val)=0;
+ virtual int cancelEnq(int slot)=0;
+ virtual int getMMIState(int slot)=0;
+#endif
+ int availableMMI(int slot);
+ PyObject *getMMIScreen(int slot);
+#ifndef SWIG
+ int processMMIData(int slot, const unsigned char *tag, const void *data, int len);
+ int mmiScreenClose(int slot, int timeout);
+ int mmiScreenEnq(int slot, int blind, int answerLen, char *text);
+ int mmiScreenBegin(int slot, int listmenu);
+ int mmiScreenAddText(int slot, int type, char *value);
+ int mmiScreenFinish(int slot);
+ void mmiSessionDestroyed(int slot);
+#endif
+};
+
+#endif
#include <lib/driver/misc_options.h>
#include <lib/driver/etimezone.h>
#include <lib/gdi/lcd.h>
+#include <lib/mmi/mmi_ui.h>
#include <lib/dvb_ci/dvbci.h>
#include <lib/dvb_ci/dvbci_ui.h>
#include <lib/python/python.h>
%include <lib/driver/misc_options.h>
%include <lib/driver/etimezone.h>
%include <lib/gdi/lcd.h>
+%include <lib/mmi/mmi_ui.h>
%include <lib/dvb_ci/dvbci.h>
%include <lib/dvb_ci/dvbci_ui.h>
%include <lib/dvb/db.h>
$(top_builddir)/lib/base/libenigma_base.a \
$(top_builddir)/lib/components/libenigma_components.a \
$(top_builddir)/lib/driver/libenigma_driver.a \
+ $(top_builddir)/lib/mmi/libenigma_mmi.a \
$(top_builddir)/lib/dvb/libenigma_dvb.a \
$(top_builddir)/lib/dvb_ci/libenigma_dvb_ci.a \
$(top_builddir)/lib/gdi/libenigma_gdi.a \