2 from Components.MenuList import MenuList
3 from Components.ActionMap import ActionMap
4 from Components.ActionMap import NumberActionMap
5 from Components.Header import Header
6 from Components.Button import Button
7 from Components.Label import Label
9 from Components.HTMLComponent import *
10 from Components.GUIComponent import *
11 from Components.config import *
12 from Components.ConfigList import ConfigList
14 from enigma import eTimer, eDVBCI_UI, eListboxPythonStringContent, eListboxPythonConfigContent
20 def __init__(self, session, slotid, action):
21 Screen.__init__(self, session)
23 print "ciMMI with action" + str(action)
28 self.Timer.timeout.get().append(self.TimerCheck)
29 self.Timer.start(1000)
32 self["title"] = Label("")
33 self["subtitle"] = Label("")
34 self["bottom"] = Label("")
35 self["entries"] = ConfigList([ ])
36 self.listtype = TYPE_CONFIG
38 self["actions"] = NumberActionMap(["SetupActions"],
40 "ok": self.okbuttonClick,
41 "cancel": self.keyCancel,
44 "right": self.keyRight,
45 "1": self.keyNumberGlobal,
46 "2": self.keyNumberGlobal,
47 "3": self.keyNumberGlobal,
48 "4": self.keyNumberGlobal,
49 "5": self.keyNumberGlobal,
50 "6": self.keyNumberGlobal,
51 "7": self.keyNumberGlobal,
52 "8": self.keyNumberGlobal,
53 "9": self.keyNumberGlobal,
54 "0": self.keyNumberGlobal
59 if action == 0: #reset
60 eDVBCI_UI.getInstance().setReset(self.slotid)
62 elif action == 1: #init
63 eDVBCI_UI.getInstance().setInit(self.slotid)
64 elif action == 2: #start MMI
65 eDVBCI_UI.getInstance().startMMI(self.slotid)
67 elif action == 3: #mmi already there (called from infobar)
70 def addEntry(self, list, entry):
71 if entry[0] == "TEXT": #handle every item (text / pin only?)
72 list.append( (entry[1], entry[2]) )
74 self.pinlength = entry[1]
77 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (self.pinlength, "*")))
80 x = configElement_nonSave("", configSequence, [1234], configsequencearg.get("PINCODE", (self.pinlength, "")))
81 self["subtitle"].setText(entry[2])
82 self.pin = getConfigListEntry("",x)
83 list.append( self.pin )
84 self["bottom"].setText(_("please press OK when ready"))
86 def okbuttonClick(self):
88 if self.tag == "WAIT":
89 print "do nothing - wait"
90 elif self.tag == "MENU":
92 cur = self["entries"].getCurrent()
94 eDVBCI_UI.getInstance().answerMenu(self.slotid, cur[1])
96 eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
98 elif self.tag == "LIST":
100 eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
102 elif self.tag == "ENQ":
103 answer = str(self.pin[1].parent.value[0])
105 while length < self.pinlength:
108 eDVBCI_UI.getInstance().answerEnq(self.slotid, answer)
117 if self.tag == "WAIT":
118 eDVBCI_UI.getInstance().stopMMI(self.slotid)
120 elif self.tag in [ "MENU", "LIST" ]:
122 eDVBCI_UI.getInstance().answerMenu(self.slotid, 0)
124 elif self.tag == "ENQ":
126 eDVBCI_UI.getInstance().cancelEnq(self.slotid)
129 print "give cancel action to ci"
131 def keyConfigEntry(self, key):
133 self["entries"].handleKey(key)
134 except AttributeError:
137 def keyNumberGlobal(self, number):
138 self.keyConfigEntry(config.key[str(number)])
141 self.keyConfigEntry(config.key["prevElement"])
144 self.keyConfigEntry(config.key["nextElement"])
146 def updateList(self, list):
147 List = self["entries"]
149 List.instance.moveSelectionTo(0)
154 if self.tag == "ENQ":
159 if type != self.listtype:
160 if type == TYPE_CONFIG:
161 List.l = eListboxPythonConfigContent()
163 List.l = eListboxPythonStringContent()
164 List.instance.setContent(List.l)
171 self["title"].setText("")
172 self["subtitle"].setText("")
173 self["bottom"].setText("")
175 list.append( ("wait for ci...", 0) )
176 self.updateList(list)
178 def showScreen(self):
179 screen = eDVBCI_UI.getInstance().getMMIScreen(self.slotid)
183 self.tag = screen[0][0]
186 if entry[0] == "PIN":
187 self.addEntry(list, entry)
189 if entry[0] == "TITLE":
190 self["title"].setText(entry[1])
191 elif entry[0] == "SUBTITLE":
192 self["subtitle"].setText(entry[1])
193 elif entry[0] == "BOTTOM":
194 self["bottom"].setText(entry[1])
195 elif entry[0] == "TEXT":
196 self.addEntry(list, entry)
197 self.updateList(list)
199 def TimerCheck(self):
200 if self.action == 0: #reset
202 if self.action == 1: #init
205 #module still there ?
206 if eDVBCI_UI.getInstance().getState(self.slotid) != 2:
209 #mmi session still active ?
210 if eDVBCI_UI.getInstance().getMMIState(self.slotid) != 1:
213 if eDVBCI_UI.getInstance().availableMMI(self.slotid) == 1:
216 #FIXME: check for mmi-session closed
218 class CiSelection(Screen):
219 def createMenu(self):
221 self.list.append( (_("Reset"), 0) )
222 self.list.append( (_("Init"), 1) )
224 self.state = eDVBCI_UI.getInstance().getState(0)
225 if self.state == 0: #no module
226 self.list.append( (_("no module found"), 2) )
227 elif self.state == 1: #module in init
228 self.list.append( (_("init module"), 2) )
229 elif self.state == 2: #module ready
231 appname = eDVBCI_UI.getInstance().getAppName(0)
232 self.list.append( (appname, 2) )
234 self["entries"].list = self.list
235 self["entries"].l.setList(self.list)
237 def TimerCheck(self):
238 state = eDVBCI_UI.getInstance().getState(0)
239 if self.state != state:
240 #print "something happens"
244 def okbuttonClick(self):
248 self.session.open(CiMmi, 0, self["entries"].getCurrent()[1])
250 #generate menu / list
252 #list.append( ("TEXT", "CA-Info") )
253 #list.append( ("TEXT", "Card Status") )
254 #list.append( ("PIN", 6, "Card Pin", 1) )
255 #self.session.open(CiMmi, 0, 0, "Wichtiges CI", "Mainmenu", "Footer", list)
261 def mmiAvail(self, slot):
262 print "mmi avail slot", slot
264 def __init__(self, session):
265 #FIXME support for one ci only
266 Screen.__init__(self, session)
268 self["actions"] = ActionMap(["OkCancelActions"],
270 "ok": self.okbuttonClick,
271 "cancel": self.cancel
275 self["entries"] = MenuList(list)
278 self.Timer = eTimer()
279 self.Timer.timeout.get().append(self.TimerCheck)
280 self.Timer.start(1000)
282 eDVBCI_UI.getInstance().mmiAvail.get().append(self.mmiAvail)