fix for canAllocateChannel
[enigma2.git] / lib / dvb_ci / dvbci_ui.cpp
index 3190bcf9a0d9d3c1374c1c1fd32ce4e1aa99d7de..191d6ca400727c147b6ec6528cb667116b5bd80b 100644 (file)
@@ -1,4 +1,5 @@
 #include <lib/dvb_ci/dvbci_ui.h>
+#include <lib/dvb_ci/dvbci.h>
 
 #include <unistd.h>
 #include <fcntl.h>
@@ -22,6 +23,7 @@ eDVBCI_UI::eDVBCI_UI()
 
        ASSERT(!instance);
        instance = this;
+       mmiScreenReady = 0;
 }
 
 eDVBCI_UI::~eDVBCI_UI()
@@ -41,6 +43,9 @@ int eDVBCI_UI::getState(int slot)
 void eDVBCI_UI::setState(int slot, int newState)
 {
        state[slot] = newState;
+       
+       if(newState == 2)               //enable TS
+               eDVBCIInterfaces::getInstance()->enableTS(slot, 1);
 }
 
 std::string eDVBCI_UI::getAppName(int slot)
@@ -50,9 +55,146 @@ std::string eDVBCI_UI::getAppName(int slot)
 
 void eDVBCI_UI::setAppName(int slot, const char *name)
 {
-       printf("set name to -%c-\n", name);
+       //printf("set name to -%c-\n", name);
        appName = name;
 }
 
+void eDVBCI_UI::setReset(int slot)
+{
+       eDVBCIInterfaces::getInstance()->reset(slot);
+}
+
+int eDVBCI_UI::startMMI(int slot)
+{
+       eDVBCIInterfaces::getInstance()->startMMI(slot);
+}
+
+int eDVBCI_UI::stopMMI(int slot)
+{
+       eDVBCIInterfaces::getInstance()->stopMMI(slot);
+}
+
+int eDVBCI_UI::initialize(int slot)
+{
+       eDVBCIInterfaces::getInstance()->initialize(slot);
+}
+
+int eDVBCI_UI::answerMenu(int slot, int answer)
+{
+       eDVBCIInterfaces::getInstance()->answerText(slot, answer);
+}
+
+int eDVBCI_UI::answerEnq(int slot, char *value)
+{
+       eDVBCIInterfaces::getInstance()->answerEnq(slot, value);
+}
+
+int eDVBCI_UI::cancelEnq(int slot)
+{
+       eDVBCIInterfaces::getInstance()->cancelEnq(slot);
+}
+
+int eDVBCI_UI::availableMMI(int slot)
+{
+       return mmiScreenReady;
+}
+
+int eDVBCI_UI::mmiScreenEnq(int slot, int blind, int answerLen, char *text)
+{
+       mmiScreenReady = 0;
+
+       mmiScreen = PyList_New(2);
+
+  PyObject *tuple = PyTuple_New(1);
+       PyTuple_SetItem(tuple, 0, PyString_FromString("ENQ"));
+  PyList_SetItem(mmiScreen, 0, tuple);
+
+  tuple = PyTuple_New(4);
+       
+       PyTuple_SetItem(tuple, 0, PyString_FromString("PIN"));
+  PyTuple_SetItem(tuple, 1, PyInt_FromLong(answerLen));
+       PyTuple_SetItem(tuple, 2, PyString_FromString(text));
+  PyTuple_SetItem(tuple, 3, PyInt_FromLong(blind));
+  PyList_SetItem(mmiScreen, 1, tuple);
+
+       mmiScreenReady = 1;
+
+       return 0;
+}
+
+int eDVBCI_UI::mmiScreenBegin(int slot, int listmenu)
+{
+       printf("eDVBCI_UI::mmiScreenBegin\n");
+
+       mmiScreenReady = 0;
+       
+       mmiScreen = PyList_New(1);
+
+  PyObject *tuple = PyTuple_New(1);
+       if(listmenu == 0)                               //menu
+               PyTuple_SetItem(tuple, 0, PyString_FromString("MENU"));
+       else    //list
+               PyTuple_SetItem(tuple, 0, PyString_FromString("LIST"));
+               
+  PyList_SetItem(mmiScreen, 0, tuple);
+       
+       mmiTuplePos = 1;
+       
+       return 0;
+}
+
+int eDVBCI_UI::mmiScreenAddText(int slot, int type, char *value)
+{
+       printf("eDVBCI_UI::mmiScreenAddText(%s)\n",value);
+
+  PyObject *tuple = PyTuple_New(3);
+       
+       if(type == 0)                                                   //title
+               PyTuple_SetItem(tuple, 0, PyString_FromString("TITLE"));
+       else if(type == 1)                              //subtitle
+               PyTuple_SetItem(tuple, 0, PyString_FromString("SUBTITLE"));
+       else if(type == 2)                              //bottom
+               PyTuple_SetItem(tuple, 0, PyString_FromString("BOTTOM"));
+       else
+               PyTuple_SetItem(tuple, 0, PyString_FromString("TEXT"));
+
+       printf("addText %s with id %d\n", value, type);
+
+       PyTuple_SetItem(tuple, 1, PyString_FromString(value));
+       
+       if(type > 2)
+         PyTuple_SetItem(tuple, 2, PyInt_FromLong(type-2));
+       else    
+         PyTuple_SetItem(tuple, 2, PyInt_FromLong(-1));
+       
+       PyList_Append(mmiScreen, tuple);
+       
+       return 0;
+}
+
+int eDVBCI_UI::mmiScreenFinish(int slot)
+{
+       printf("eDVBCI_UI::mmiScreenFinish\n");
+
+       mmiScreenReady = 1;
+
+       return 0;
+}
+
+int eDVBCI_UI::getMMIState(int slot)
+{
+       return eDVBCIInterfaces::getInstance()->getMMIState(slot);
+}
+
+PyObject *eDVBCI_UI::getMMIScreen(int slot)
+{
+       if(mmiScreenReady != 1)
+               return Py_None;
+               
+       mmiScreenReady = 0;
+
+       return mmiScreen;
+}
+
 //FIXME: correct "run/startlevel"
 eAutoInitP0<eDVBCI_UI> init_dvbciui(eAutoInitNumbers::rc, "DVB-CI UI");