From a3825f28e9fd321640ecaf782b2983669fb5e743 Mon Sep 17 00:00:00 2001 From: Ronny Strutz Date: Fri, 18 Nov 2005 03:35:39 +0000 Subject: [PATCH] app-manager takes care of its own instancepointer in slot --- lib/dvb_ci/dvbci.cpp | 7 ++----- lib/dvb_ci/dvbci_appmgr.cpp | 11 +++++++++++ lib/dvb_ci/dvbci_appmgr.h | 5 +++++ lib/dvb_ci/dvbci_session.cpp | 2 +- 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 #include +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: -- 2.30.2