3 #include <lib/dvb_ci/dvbci_mmi.h>
4 #include <lib/dvb_ci/dvbci_ui.h>
5 #include <lib/base/estring.h>
8 PyObject *list = PyList_New(len);
9 for (i=0; i<len; ++i) {
10 PyObject *tuple = PyTuple_New(3); // 3 eintrge im tuple
11 PyTuple_SetItem(tuple, 0, PyString_FromString("eintrag 1"))
12 PyTuple_SetItem(tuple, 1, PyInt_FromLong(31337));
13 PyTuple_SetItem(tuple, 2, PyString_FromString("eintrag 3"))
14 PyList_SetItem(list, i, tuple);
19 eDVBCIMMISession::eDVBCIMMISession(eDVBCISlot *tslot)
22 slot->setMMIManager(this);
25 eDVBCIMMISession::~eDVBCIMMISession()
27 slot->setMMIManager(NULL);
30 int eDVBCIMMISession::receivedAPDU(const unsigned char *tag, const void *data, int len)
32 printf("SESSION(%d)/MMI %02x %02x %02x: ", session_nb, tag[0], tag[1],tag[2]);
33 for (int i=0; i<len; i++)
34 printf("%02x ", ((const unsigned char*)data)[i]);
37 if ((tag[0]==0x9f) && (tag[1]==0x88))
42 printf("MMI display control\n");
43 if (((unsigned char*)data)[0] != 1)
44 printf("kann ich nicht. aber das sag ich dem modul nicht.\n");
45 state=stateDisplayReply;
47 case 0x07: //Tmenu_enq
49 unsigned char *d=(unsigned char*)data;
50 unsigned char *max=((unsigned char*)d) + len;
51 int textlen = len - 2;
61 printf("%d bytes text\n", textlen);
62 if ((d+textlen) > max)
65 char str[textlen + 1];
66 memcpy(str, ((char*)d), textlen);
69 printf("enq-text: %s\n",str);
71 eDVBCI_UI::getInstance()->mmiScreenEnq(0, blind, alen, (char*)convertDVBUTF8(str).c_str());
75 case 0x09: //Tmenu_last
76 case 0x0c: //Tlist_last
78 unsigned char *d=(unsigned char*)data;
79 unsigned char *max=((unsigned char*)d) + len;
81 printf("Tmenu_last\n");
87 if(tag[2] == 0x09) //menu
88 eDVBCI_UI::getInstance()->mmiScreenBegin(0, 0);
90 eDVBCI_UI::getInstance()->mmiScreenBegin(0, 1);
96 printf("%d texts\n", n);
97 for (int i=0; i < (n+3); ++i)
102 printf("text tag: %02x %02x %02x\n", d[0], d[1], d[2]);
104 d+=parseLengthField(d, textlen);
105 printf("%d bytes text\n", textlen);
106 if ((d+textlen) > max)
109 char str[textlen + 1];
110 memcpy(str, ((char*)d), textlen);
113 eDVBCI_UI::getInstance()->mmiScreenAddText(0, pos++, (char*)convertDVBUTF8(str).c_str());
120 eDVBCI_UI::getInstance()->mmiScreenFinish(0);
124 printf("unknown APDU tag 9F 88 %02x\n", tag[2]);
131 int eDVBCIMMISession::doAction()
138 case stateDisplayReply:
140 unsigned char tag[]={0x9f, 0x88, 0x02};
141 unsigned char data[]={0x01, 0x01};
142 sendAPDU(tag, data, 2);
150 unsigned char tag[]={0x9f, 0x88, 0x0b};
151 unsigned char data[]={5};
152 sendAPDU(tag, data, 1);
164 int eDVBCIMMISession::stopMMI()
166 printf("eDVBCIMMISession::stopMMI()\n");
168 unsigned char tag[]={0x9f, 0x88, 0x00};
169 unsigned char data[]={0x00};
170 sendAPDU(tag, data, 1);
175 int eDVBCIMMISession::answerText(int answer)
177 printf("eDVBCIMMISession::answerText(%d)\n",answer);
179 unsigned char tag[]={0x9f, 0x88, 0x0B};
180 unsigned char data[]={0x00};
181 data[0] = answer & 0xff;
182 sendAPDU(tag, data, 1);
187 int eDVBCIMMISession::answerEnq(char *answer)
189 unsigned int len = strlen(answer);
190 printf("eDVBCIMMISession::answerEnq(%d bytes)\n", len);
192 unsigned char data[len+1];
193 data[0] = 0x01; // answer ok
194 memcpy(data+1, answer, len);
196 unsigned char tag[]={0x9f, 0x88, 0x08};
197 sendAPDU(tag, data, len+1);
202 int eDVBCIMMISession::cancelEnq()
204 printf("eDVBCIMMISession::cancelEnq()\n");
206 unsigned char tag[]={0x9f, 0x88, 0x08};
207 unsigned char data[]={0x00}; // canceled
208 sendAPDU(tag, data, 1);