From d43e4676bd757d1de73b8dd669154ffd42192b10 Mon Sep 17 00:00:00 2001 From: Andreas Monzner Date: Mon, 22 May 2006 15:21:41 +0000 Subject: [PATCH] fix bluescreen in ci menu when no entries in a menulist an ok is pressed reset CI when opening CI Menu and ci is not initialized yet --- lib/dvb_ci/dvbci.cpp | 10 ++++++++++ lib/dvb_ci/dvbci.h | 1 + lib/dvb_ci/dvbci_ui.cpp | 4 ++++ lib/python/Screens/Ci.py | 6 +++++- 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/dvb_ci/dvbci.cpp b/lib/dvb_ci/dvbci.cpp index 6f532be..b182a36 100644 --- a/lib/dvb_ci/dvbci.cpp +++ b/lib/dvb_ci/dvbci.cpp @@ -66,6 +66,16 @@ eDVBCISlot *eDVBCIInterfaces::getSlot(int slotid) return 0; } +int eDVBCIInterfaces::getSlotState(int slotid) +{ + eDVBCISlot *slot; + + if( (slot = getSlot(slotid)) == 0 ) + return eDVBCISlot::stateInvalid; + + return slot->getState(); +} + int eDVBCIInterfaces::reset(int slotid) { eDVBCISlot *slot; diff --git a/lib/dvb_ci/dvbci.h b/lib/dvb_ci/dvbci.h index 2ef70b0..7605a6d 100644 --- a/lib/dvb_ci/dvbci.h +++ b/lib/dvb_ci/dvbci.h @@ -114,6 +114,7 @@ public: void recheckPMTHandlers(); void gotPMT(eDVBServicePMTHandler *pmthandler); void ciRemoved(eDVBCISlot *slot); + int getSlotState(int slot); static eDVBCIInterfaces *getInstance(); diff --git a/lib/dvb_ci/dvbci_ui.cpp b/lib/dvb_ci/dvbci_ui.cpp index ddb42fd..2391145 100644 --- a/lib/dvb_ci/dvbci_ui.cpp +++ b/lib/dvb_ci/dvbci_ui.cpp @@ -43,7 +43,11 @@ eDVBCI_UI *eDVBCI_UI::getInstance() int eDVBCI_UI::getState(int slot) { if (slot < MAX_SLOTS) + { + if (eDVBCIInterfaces::getInstance()->getSlotState(slot) == eDVBCISlot::stateInvalid) + eDVBCIInterfaces::getInstance()->reset(slot); return slotdata[slot].state; + } return 0; } diff --git a/lib/python/Screens/Ci.py b/lib/python/Screens/Ci.py index a32ce34..ecc5604 100644 --- a/lib/python/Screens/Ci.py +++ b/lib/python/Screens/Ci.py @@ -89,7 +89,11 @@ class CiMmi(Screen): print "do nothing - wait" elif self.tag == "MENU": print "answer MENU" - eDVBCI_UI.getInstance().answerMenu(self.slotid, self["entries"].getCurrent()[1]) + cur = self["entries"].getCurrent() + if cur: + eDVBCI_UI.getInstance().answerMenu(self.slotid, cur[1]) + else: + eDVBCI_UI.getInstance().answerMenu(self.slotid, 0) self.showWait() elif self.tag == "LIST": print "answer LIST" -- 2.7.4