aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRonny Strutz <ronny.strutz@multimedia-labs.de>2005-11-18 03:35:39 +0000
committerRonny Strutz <ronny.strutz@multimedia-labs.de>2005-11-18 03:35:39 +0000
commita3825f28e9fd321640ecaf782b2983669fb5e743 (patch)
tree143e0c81b221d403dfd5d45ce8144ba28a0cc004 /lib
parent5cdabb1038ec3f628001f26f5d587eb95ca6465d (diff)
downloadenigma2-a3825f28e9fd321640ecaf782b2983669fb5e743.tar.gz
enigma2-a3825f28e9fd321640ecaf782b2983669fb5e743.zip
app-manager takes care of its own instancepointer in slot
Diffstat (limited to 'lib')
-rw-r--r--lib/dvb_ci/dvbci.cpp7
-rw-r--r--lib/dvb_ci/dvbci_appmgr.cpp11
-rw-r--r--lib/dvb_ci/dvbci_appmgr.h5
-rw-r--r--lib/dvb_ci/dvbci_session.cpp2
4 files changed, 19 insertions, 6 deletions
diff --git a/lib/dvb_ci/dvbci.cpp b/lib/dvb_ci/dvbci.cpp
index 71994538..4e5b6e68 100644
--- a/lib/dvb_ci/dvbci.cpp
+++ b/lib/dvb_ci/dvbci.cpp
@@ -140,9 +140,6 @@ void eDVBCISlot::data(int what)
notifier->setRequested(eSocketNotifier::Read);
//HACK
eDVBCI_UI::getInstance()->setState(0,0);
- //FIXME; do in deconstructor of the appmgr class
- application_manager = 0;
- mmi_session = 0;
}
return;
}
@@ -185,10 +182,10 @@ DEFINE_REF(eDVBCISlot);
eDVBCISlot::eDVBCISlot(eMainloop *context, int nr)
{
char filename[128];
-
+
application_manager = 0;
mmi_session = 0;
-
+
slotid = nr;
sprintf(filename, "/dev/ci%d", nr);
diff --git a/lib/dvb_ci/dvbci_appmgr.cpp b/lib/dvb_ci/dvbci_appmgr.cpp
index f07ea999..7843554d 100644
--- a/lib/dvb_ci/dvbci_appmgr.cpp
+++ b/lib/dvb_ci/dvbci_appmgr.cpp
@@ -3,6 +3,17 @@
#include <lib/dvb_ci/dvbci_appmgr.h>
#include <lib/dvb_ci/dvbci_ui.h>
+eDVBCIApplicationManagerSession::eDVBCIApplicationManagerSession(eDVBCISlot *tslot)
+{
+ slot = tslot;
+ slot->application_manager = this;
+}
+
+eDVBCIApplicationManagerSession::~eDVBCIApplicationManagerSession()
+{
+ slot = 0;
+}
+
int eDVBCIApplicationManagerSession::receivedAPDU(const unsigned char *tag,const void *data, int len)
{
printf("SESSION(%d)/APP %02x %02x %02x: ", session_nb, tag[0], tag[1], tag[2]);
diff --git a/lib/dvb_ci/dvbci_appmgr.h b/lib/dvb_ci/dvbci_appmgr.h
index 1d6e7b15..7a94bafc 100644
--- a/lib/dvb_ci/dvbci_appmgr.h
+++ b/lib/dvb_ci/dvbci_appmgr.h
@@ -8,10 +8,15 @@ class eDVBCIApplicationManagerSession: public eDVBCISession
enum {
stateFinal=statePrivate,
};
+
+ eDVBCISlot *slot;
+
int wantmenu;
int receivedAPDU(const unsigned char *tag, const void *data, int len);
int doAction();
public:
+ eDVBCIApplicationManagerSession(eDVBCISlot *tslot);
+ ~eDVBCIApplicationManagerSession();
int enterMenu();
int startMMI();
};
diff --git a/lib/dvb_ci/dvbci_session.cpp b/lib/dvb_ci/dvbci_session.cpp
index a0171a3d..bb8ba869 100644
--- a/lib/dvb_ci/dvbci_session.cpp
+++ b/lib/dvb_ci/dvbci_session.cpp
@@ -136,7 +136,7 @@ eDVBCISession *eDVBCISession::createSession(eDVBCISlot *slot, const unsigned cha
printf("session: %p\n",session);
break;
case 0x00020041:
- session=slot->application_manager = new eDVBCIApplicationManagerSession;
+ session=slot->application_manager = new eDVBCIApplicationManagerSession(slot);
printf("APPLICATION MANAGER\n");
break;
case 0x00030041: