+from enigma import *
+
+#use this class to synchronize all ci to/from user communications
+class CiWait(Screen):
+ def cancel(self):
+ #stop pending requests
+ self.Timer.stop()
+
+ if self.lastQuery == 2:
+ eDVBCI_UI.getInstance().stopMMI(self.slot)
+
+ self.close()
+
+ def TimerCheck(self):
+ #special cases to prevent to fast resets/inits
+ if self.lastQuery == 0:
+ self.cancel()
+ elif self.lastQuery == 1:
+ self.cancel()
+ else:
+ if eDVBCI_UI.getInstance().getState(self.slot) != 2: #module removed
+ self.cancel()
+
+ def __init__(self, session, slot, query):
+ Screen.__init__(self, session)
+
+ self["message"] = Label(_("waiting for CI..."))
+
+ self["actions"] = ActionMap(["OkCancelActions"],
+ {
+ "cancel": self.cancel
+ })
+
+ self.lastQuery = query
+ self.slot = slot
+
+ self.Timer = eTimer()
+ self.Timer.timeout.get().append(self.TimerCheck)
+ self.Timer.start(1000) #check and block 1 second
+
+ if query == 0: #reset
+ print "reset"
+ eDVBCI_UI.getInstance().setReset(slot)
+ if query == 1: #init
+ print "init"
+ eDVBCI_UI.getInstance().initialize(slot)
+ if query == 2: #mmi-open
+ print "mmi open"
+ eDVBCI_UI.getInstance().startMMI(slot)
+ if query == 3: #mmi-answer
+ print "mmi answer"
+ eDVBCI_UI.getInstance().answerMMI(slot, 0, 0)
+