Merge branch 'vuplus_experimental' of /opt/repository/enigma2 into vuplus_experimental
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / WirelessLanSetup / plugin.py
1 from Screens.Screen import Screen
2 from Screens.MessageBox import MessageBox
3 from Screens.InputBox import InputBox
4 from Screens.Standby import *
5 from Screens.VirtualKeyBoard import VirtualKeyBoard
6 from Screens.HelpMenu import HelpableScreen
7 from Components.Network import iNetwork
8 from Screens.NetworkSetup import NameserverSetup
9 from Components.Sources.StaticText import StaticText
10 from Components.Sources.Boolean import Boolean
11 from Components.Sources.List import List
12 from Components.Label import Label,MultiColorLabel
13 from Components.Pixmap import Pixmap,MultiPixmap
14 from Components.MenuList import MenuList
15 from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigText, ConfigPassword, ConfigSelection, getConfigListEntry, ConfigNothing
16 from Components.config import ConfigInteger, ConfigSubsection
17 from Components.ConfigList import ConfigListScreen
18 from Components.PluginComponent import plugins
19 from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
20 from Components.ActionMap import ActionMap, NumberActionMap, HelpableActionMap
21 from Components.Console import Console
22 from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_SKIN
23 from Tools.LoadPixmap import LoadPixmap
24 from Plugins.Plugin import PluginDescriptor
25 from enigma import eTimer, ePoint, eSize, RT_HALIGN_LEFT, eListboxPythonMultiContent, gFont
26 from os import path as os_path, system as os_system, unlink,listdir
27 from re import compile as re_compile, search as re_search
28 from Tools.Directories import fileExists
29 import time
30
31 class WlanSelection(Screen,HelpableScreen):
32         skin = """
33         <screen name="WlanSelection" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">
34                 <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
35                 <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
36                 <eLabel text="Wireless Network Adapter Selection..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
37                 <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
38                 <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
39                         <convert type="ClockToText">Format:%H:%M</convert>
40                 </widget>
41                 <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
42                 <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
43                 <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
44                 <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
45                 <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
46                 <widget name="menulist" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
47                 <widget source="description" render="Label" position="500,140" size="280,360" font="Regular;19" halign="center" valign="center" backgroundColor="#c5c9cc" transparent="1"/>
48         </screen>"""
49         
50         def __init__(self, session):
51                 Screen.__init__(self,session)
52                 HelpableScreen.__init__(self)
53                 self.mainmenu = self.getWlandevice()
54                 self["menulist"] = MenuList(self.mainmenu)
55                 self["key_red"] = StaticText(_("Close"))
56                 self["key_green"] = StaticText(_("Select"))
57                 self["description"] = StaticText()
58                 self["description"].setText(_("Select Wireless Lan module. \n" ))
59                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
60                 {
61                         "ok": (self.ok, _("select interface")),
62                         "cancel": (self.close, _("exit network interface list")),
63                 })
64
65                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
66                 {
67                         "green": (self.ok, _("select interface")),
68                         "red": (self.close, _("exit network interface list")),
69                 })
70
71         def ok(self):
72 #               print len(self["menulist"].list)
73                 if len(self["menulist"].list) == 0:
74                         self.session.open(MessageBox, (_("Can not find any WirelessLan Module\n")),MessageBox.TYPE_ERROR,5 )
75                         return
76                 ifaces=self["menulist"].getCurrent()[1]
77                 if ifaces == None:
78                         pass
79                 else:
80                         self.session.open(WlanSetup,ifaces)
81
82         def getWlandevice(self):
83                 list = []
84                 for x in iNetwork.getAdapterList():
85                         if x.startswith('eth'):
86                                 continue
87                         list.append((self.getAdapterDescription(x) + " (%s)"%x,x))
88                 return list
89
90         def getAdapterDescription(self, iface):
91                 if iface == 'eth0':
92                         return _("Internal LAN adapter.")
93                 else:
94                         classdir = "/sys/class/net/" + iface + "/device/"
95                         driverdir = "/sys/class/net/" + iface + "/device/driver/"
96                         if os_path.exists(classdir):
97                                 files = listdir(classdir)
98                                 if 'driver' in files:
99                                         if os_path.realpath(driverdir).endswith('rtw_usb_drv'):
100                                                 return _("Realtak")+ " " + _("WLAN adapter.")
101                                         elif os_path.realpath(driverdir).endswith('ath_pci'):
102                                                 return _("Atheros")+ " " + _("WLAN adapter.")
103                                         elif os_path.realpath(driverdir).endswith('zd1211b'):
104                                                 return _("Zydas")+ " " + _("WLAN adapter.")
105                                         elif os_path.realpath(driverdir).endswith('rt73'):
106                                                 return _("Ralink")+ " " + _("WLAN adapter.")
107                                         elif os_path.realpath(driverdir).endswith('rt73usb'):
108                                                 return _("Ralink")+ " " + _("WLAN adapter.")
109                                         else:
110                                                 return str(os_path.basename(os_path.realpath(driverdir))) + " " + _("WLAN adapter")
111                                 else:
112                                         return _("Unknown network adapter.")
113
114 class WlanSetup(Screen,HelpableScreen):
115         skin = """
116         <screen name="WlanSetup" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">   
117                 <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
118                 <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
119                 <eLabel text="Wireless Network Setup Menu..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
120                 <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
121                 <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
122                         <convert type="ClockToText">Format:%H:%M</convert>
123                 </widget>
124                 <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
125                 <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
126                 <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
127                 <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
128                 <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
129                 <widget name="menulist" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
130                 <widget source="description" render="Label" position="500,140" size="280,360" font="Regular;19" halign="center" valign="center" backgroundColor="#c5c9cc" transparent="1"/>
131         </screen>"""
132         def __init__(self, session, ifaces):
133                 Screen.__init__(self, session)
134                 HelpableScreen.__init__(self)
135                 self.session = session
136                 self.iface = ifaces
137                 self.restartLanRef = None
138                 self.LinkState = None
139                 self.mainmenu = self.MakeMenu()
140                 self["menulist"] = MenuList(self.mainmenu)
141                 self["key_red"] = StaticText(_("Close"))
142                 self["key_green"] = StaticText(_("Select"))
143                 self["description"] = StaticText()
144                 self["IFtext"] = StaticText()
145                 self["IF"] = StaticText()
146                 self["Statustext"] = StaticText()
147                 self["statuspic"] = MultiPixmap()
148                 self["statuspic"].hide()
149                 self.onLayoutFinish.append(self.loadDescription)
150                 
151                 self.oktext = _("Press OK on your remote control to continue.")
152                 
153                 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
154                         {
155                         "up": (self.up, _("move up to previous entry")),
156                         "down": (self.down, _("move down to next entry")),
157                         "left": (self.left, _("move up to first entry")),
158                         "right": (self.right, _("move down to last entry")),
159                         })
160                 
161                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
162                         {
163                         "cancel": (self.close, _("exit networkadapter setup menu")),
164                         "ok": (self.ok, _("select menu entry")),
165                         })
166
167                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
168                         {
169                         "red": (self.close, _("exit networkadapter setup menu")),
170                         "green": (self.ok, _("select menu entry")),
171                         })
172
173                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
174                 {
175                         "ok": self.ok,
176                         "back": self.close,
177                         "up": self.up,
178                         "down": self.down,
179                         "red": self.close,
180                         "left": self.left,
181                         "right": self.right,
182                 }, -2)
183
184         def loadDescription(self):
185                 if self["menulist"].getCurrent()[1] == 'setting':
186                         self["description"].setText(_("Edit the network configuration of your STB.\n" ) + self.oktext )
187                 if self["menulist"].getCurrent()[1] == 'scanap':
188                         self["description"].setText(_("Scan your network for wireless access points and connect to them using your selected wireless device.\n" ) + self.oktext )
189                 if self["menulist"].getCurrent()[1] == 'dns':
190                         self["description"].setText(_("Edit the Nameserver configuration of your STB.\n" ) + self.oktext )
191                 if self["menulist"].getCurrent()[1] == 'status':
192                         self["description"].setText(_("Shows the state of your wireless LAN connection.\n" ) + self.oktext )
193                 if self["menulist"].getCurrent()[1] == 'test':
194                         self["description"].setText(_("Test the network configuration of your STB.\n" ) + self.oktext )
195                 if self["menulist"].getCurrent()[1] == 'restart':
196                         self["description"].setText(_("Restart your network connection and interfaces.\n" ) + self.oktext )
197
198         def up(self):
199                 self["menulist"].up()
200                 self.loadDescription()
201
202         def down(self):
203                 self["menulist"].down()
204                 self.loadDescription()
205
206         def left(self):
207                 self["menulist"].pageUp()
208                 self.loadDescription()
209
210         def right(self):
211                 self["menulist"].pageDown()
212                 self.loadDescription()
213
214         def ok(self):
215                 if self["menulist"].getCurrent()[1] == 'setting':
216                         self.session.openWithCallback(self.checklist, WlanConfig, self.iface)
217                 elif self["menulist"].getCurrent()[1] == 'scanap':
218                         self.session.open(WlanScanAp, self.iface)
219                 elif self["menulist"].getCurrent()[1] == 'dns':
220                         self.session.open(NameserverSetup)
221                 elif self["menulist"].getCurrent()[1] == 'status':
222                         self.session.open(Wlanstatus, self.iface)
223                 elif self["menulist"].getCurrent()[1] == 'test':
224                         self.session.openWithCallback(self.checklist,NetworkAdapterTest,self.iface)
225                 elif self["menulist"].getCurrent()[1] == 'restart':
226                         self.session.openWithCallback(self.restartLan, MessageBox, (_("Are you sure you want to restart your network interfaces?\n\n") + self.oktext ) )
227
228         def checklist(self):
229                 self["menulist"].setList(self.MakeMenu())
230
231         def MakeMenu(self):
232                 menu = []
233                 menu.append((_("Adapter settings"), "setting"))
234                 menu.append((_("Scan Wireless AP"), "scanap"))
235                 menu.append((_("Nameserver settings"), "dns"))
236                 if iNetwork.getAdapterAttribute(self.iface, "up"):
237                         menu.append((_("Show WLAN Status"), "status"))
238                 menu.append((_("Network test"), "test"))
239                 menu.append((_("Restart network"), "restart"))
240
241                 return menu
242
243         def restartLan(self, ret = False):
244                 if (ret == True):
245                         iNetwork.restartNetwork(self.restartLanDataAvail)
246                         self.restartLanRef = self.session.openWithCallback(self.restartfinishedCB, MessageBox, _("Please wait while your network is restarting..."), type = MessageBox.TYPE_INFO, enable_input = False)
247
248         def restartLanDataAvail(self, data):
249                 if data is True:
250                         iNetwork.getInterfaces(self.getInterfacesDataAvail)
251
252         def getInterfacesDataAvail(self, data):
253                 if data is True:
254                         self.restartLanRef.close(True)
255
256         def restartfinishedCB(self,data):
257                 if data is True:
258                         self.session.open(MessageBox, _("Finished restarting your network"), type = MessageBox.TYPE_INFO, timeout = 5, default = False)
259
260 wlanconfig = ConfigSubsection()
261 wlanconfig.usedevice = ConfigSelection(default = "off", choices = [
262         ("off", _("off")), ("on", _("on"))])
263 wlanconfig.usedhcp = ConfigSelection(default = "off", choices = [
264         ("off", _("no")), ("on", _("yes"))])
265 wlanconfig.essid = ConfigSelection(default = "none", choices = ["none"])
266 wlanconfig.encrypt = ConfigSelection(default = "off", choices = [
267         ("off", _("no")), ("on", _("yes"))])
268 wlanconfig.method = ConfigSelection(default = "wep", choices = [
269         ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
270 wlanconfig.keytype = ConfigSelection(default = "ascii", choices = [
271         ("ascii", _("ASCII")), ("hex", _("HEX"))])
272 wlanconfig.key = ConfigText(default = "XXXXXXXX", visible_width = 50, fixed_size = False)
273 wlanconfig.usegateway = ConfigSelection(default = "off", choices = [
274         ("off", _("no")), ("on", _("yes"))])
275 wlanconfig.ip    = ConfigIP([0,0,0,0])
276 wlanconfig.netmask = ConfigIP([0,0,0,0])
277 wlanconfig.gateway = ConfigIP([0,0,0,0])
278
279 selectap = None 
280 class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
281         skin = """
282         <screen name="WlanConfig" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">  
283                 <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
284                 <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
285                 <eLabel text="Wireless Network Configuration..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
286                 <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
287                 <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
288                         <convert type="ClockToText">Format:%H:%M</convert>
289                 </widget>
290                 <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
291                 <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
292                 <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
293                 <widget source="key_grean" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
294                 <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
295                 <widget name="config" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
296                 <eLabel text="IP Address : " position="500,160" size="200,26" font="Semiboldit;22" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />             
297                 <widget source="ipaddress" render="Label" position="530,190" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />             
298                 <eLabel text="NetMask : " position="500,220" size="200,26" font="Semiboldit;22" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />                
299                 <widget source="netmask" render="Label" position="530,250" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />               
300                 <eLabel text="Gateway : " position="500,280" size="200,26" font="Semiboldit;22" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />                
301                 <widget source="gateway" render="Label" position="530,310" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />               
302         </screen>"""
303
304         def __init__(self, session, iface):
305                 Screen.__init__(self,session)
306                 self.session = session
307                 self["key_red"] = StaticText(_("Close"))
308                 self["key_grean"] = StaticText(_("Ok"))
309                 self["ipaddress"] = StaticText(_("[ N/A ]"))
310                 self["netmask"] = StaticText(_("[ N/A ]"))              
311                 self["gateway"] = StaticText(_("[ N/A ]"))
312                 self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ],
313                 {
314                         "ok": self.saveWlanConfig,
315                         "green": self.saveWlanConfig,
316                         "cancel": self.keyCancel,
317                         "red": self.keyCancel,
318                 }, -2)
319                 self.iface = iface
320                 self.ssid = None
321                 self.ap_scan = None
322                 self.scan_ssid = None
323                 self.key_mgmt = None
324                 self.proto = None
325                 self.key_type = None
326                 self.encryption_key = None
327                 self.wlanscanap = None
328 #               self.scanAPcount =5
329                 self.scanAPcount =1
330                 self.list = []
331                 ConfigListScreen.__init__(self, self.list,session = self.session)
332                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
333                 self.readWpaSupplicantConf()
334 #               iNetwork.getInterfaces(self.readWlanSettings)
335                 self.readWlanSettings()
336                 self.scanAPFailedTimer = eTimer()
337                 self.scanAPFailedTimer.callback.append(self.scanAPFailed)
338                 self.scanAplistTimer = eTimer()
339                 self.scanAplistTimer.callback.append(self.scanApList)
340                 self.Console = Console()
341                 self.scanAplistTimer.start(100,True)
342
343         def readWlanSettings(self,ret=None):
344                 if ret is not True:
345                         print "getAddrInet Fail... "
346                 if iNetwork.getAdapterAttribute(self.iface, "up") == True:
347                         default_tmp = "on"
348                 else:
349                         default_tmp = "off"
350                 wlanconfig.usedevice = ConfigSelection(default=default_tmp, choices = [("off", _("off")), ("on", _("on"))])
351
352                 if iNetwork.getAdapterAttribute(self.iface, "dhcp"):
353                         default_tmp = "on"
354                 else:
355                         default_tmp = "off"
356                 wlanconfig.usedhcp = ConfigSelection(default=default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
357
358                 wlanconfig.ip = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "ip")) or [0,0,0,0]
359
360                 wlanconfig.netmask = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "netmask") or [255,0,0,0])
361                 if iNetwork.getAdapterAttribute(self.iface, "gateway"):
362                         default_tmp = "on"
363                 else:
364                         default_tmp = "off"
365                 wlanconfig.usegateway = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
366
367                 wlanconfig.gateway = ConfigIP(default=iNetwork.getAdapterAttribute(self.iface, "gateway") or [0,0,0,0])
368
369                 self["ipaddress"] = StaticText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "ip"))))
370                 self["netmask"] = StaticText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "netmask"))))
371                 self["gateway"] = StaticText(_(self.formatip(iNetwork.getAdapterAttribute(self.iface, "gateway"))))
372
373                 if self.encryption_key is not None:
374                         default_tmp = "on"
375                 else:
376                         default_tmp = "off"
377                 wlanconfig.encrypt = ConfigSelection(default = default_tmp, choices = [("off", _("no")), ("on", _("yes"))])
378
379                 if self.key_mgmt=="NONE":
380                         default_tmp = "wep"
381                 elif self.key_mgmt == "WPA-PSK":
382                         if self.proto == "WPA":
383                                 default_tmp = "wpa"
384                         elif self.proto == "RSN":
385                                 default_tmp = "wpa2"
386                         elif self.proto in ( "WPA RSN", "WPA WPA2"):
387                                 default_tmp = "wpa/wpa2"
388                         else:
389                                 default_tmp = "wpa"
390                 else:
391                         default_tmp = "wep"
392
393                 wlanconfig.method = ConfigSelection(default = default_tmp, choices = [
394                         ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
395
396                 if self.key_type == 0:
397                         default_tmp = "hex"
398                 else:
399                         default_tmp = "ascii"
400                 wlanconfig.keytype = ConfigSelection(default = default_tmp, choices = [
401                         ("ascii", _("ASCII")), ("hex", _("HEX"))])
402                 default_tmp = self.encryption_key or "XXXXXXXX"
403                 wlanconfig.key = ConfigText(default = default_tmp, visible_width = 50, fixed_size = False)
404
405         def readWpaSupplicantConf(self):
406                 try:
407                         if fileExists("/etc/wpa_supplicant.conf"):
408                                 wpafd = open("/etc/wpa_supplicant.conf","r")
409                                 if wpafd >0:
410                                         data = wpafd.readline()
411                                         while len(data) > 0:
412 #                                               print "####readWpaSupplicantConf, data : ",data
413                                                 data = data.lstrip()
414                                                 if len(data) == 0:
415                                                         data = wpafd.readline()
416                                                         continue
417                                                 if data.startswith('ssid=') and len(data) > 6:
418                                                         self.ssid = data[6:-2]
419                                                 elif data.startswith('ap_scan=') :
420                                                         self.ap_scan = data[8:]
421 #                                                       print "####readWpaSupplicantConf, ap_scan : ",self.ap_scan
422                                                 elif data.startswith('scan_ssid=') and len(data) > 10:
423                                                         self.scan_ssid = data[10:-1]
424                                                 elif data.startswith('key_mgmt=') and len(data) > 9:
425                                                         self.key_mgmt = data[9:-1]
426                                                 elif data.startswith('proto=') and len(data) > 6:
427                                                         self.proto = data[6:-1]
428                                                 elif data.startswith('wep_key0="') and len(data) > 11:
429                                                         self.key_type = 1 # ascii
430                                                         self.encryption_key = data[10:-2]
431                                                 elif data.startswith('wep_key0=') and len(data) > 9:
432                                                         self.key_type = 0 # hex
433                                                         self.encryption_key = data[9:-1]
434                                                 elif data.startswith('psk="') and len(data) > 6:
435                                                         self.key_type = 1 # ascii
436                                                         self.encryption_key = data[5:-2]
437                                                 elif data.startswith('psk=') and len(data) > 4:
438                                                         self.key_type = 0 # hex
439                                                         self.encryption_key = data[4:-1]
440                                                 data = wpafd.readline()
441                                         print self.ssid,self.scan_ssid,self.key_mgmt,self.proto,self.key_type,self.encryption_key
442                                         wpafd.close()
443                                 else:
444                                         print 'read error'
445                         else:
446                                 pass
447                 except:
448                         print 'failed loading wpasupplicant.conf'
449
450         def createConfig(self):
451                 self.configList=[]
452                 self.usedeviceEntry = getConfigListEntry(_("Use Device"), wlanconfig.usedevice)
453                 self.usedhcpEntry = getConfigListEntry(_("Use DHCP"), wlanconfig.usedhcp)
454                 self.essidEntry = getConfigListEntry(_("ESSID"), wlanconfig.essid)
455                 self.hiddenessidEntry = getConfigListEntry(_("Input Hidden ESSID"), wlanconfig.hiddenessid)
456                 self.encryptEntry = getConfigListEntry(_("Encrypt"), wlanconfig.encrypt)
457                 self.methodEntry = getConfigListEntry(_("Method"), wlanconfig.method)
458                 self.keytypeEntry = getConfigListEntry(_("Key Type"), wlanconfig.keytype)
459                 self.keyEntry = getConfigListEntry(_("KEY"), wlanconfig.key)
460
461                 self.ipEntry = getConfigListEntry(_("IP"), wlanconfig.ip)
462                 self.netmaskEntry = getConfigListEntry(_("NetMask"), wlanconfig.netmask)
463
464                 self.usegatewayEntry = getConfigListEntry(_("Use Gateway"), wlanconfig.usegateway)
465                 self.gatewayEntry = getConfigListEntry(_("Gateway"), wlanconfig.gateway)
466
467                 self.configList.append( self.usedeviceEntry )
468                 if wlanconfig.usedevice.value is "on":
469                         self.configList.append( self.usedhcpEntry )
470                         if wlanconfig.usedhcp.value is "off":
471                                 self.configList.append(self.ipEntry)
472                                 self.configList.append(self.netmaskEntry)
473                                 self.configList.append(self.usegatewayEntry)
474                                 if wlanconfig.usegateway.value is "on":
475                                         self.configList.append(self.gatewayEntry)
476                         self.configList.append( self.essidEntry )
477 #                       print "#### wlanconfig.essid.value : ",wlanconfig.essid.value
478                         if wlanconfig.essid.value == 'Input hidden ESSID':
479                                 self.configList.append( self.hiddenessidEntry )
480                         self.configList.append( self.encryptEntry )
481                         if wlanconfig.encrypt.value is "on" :
482                                 self.configList.append( self.methodEntry )
483                                 self.configList.append( self.keytypeEntry )
484                                 self.configList.append( self.keyEntry )
485
486                 self["config"].list = self.configList
487                 self["config"].l.setList(self.configList)
488 #               if not self.selectionChanged in self["config"].onSelectionChanged:
489 #                       self["config"].onSelectionChanged.append(self.selectionChanged)
490
491         def scanApList(self):
492                 self.apList = []
493                 self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
494                 cmd = "ifconfig "+self.iface+" up"
495                 print 'cmd ',cmd
496                 os_system(cmd)
497                 self.wlanscanap = Console()
498                 cmd = "iwlist "+self.iface+" scan"
499                 print 'cmd ',cmd
500                 self.wlanscanap.ePopen(cmd, self.apListFinnished,self.apListParse)
501
502         def apListFinnished(self, result, retval,extra_args):
503                 (callback) = extra_args
504                 if self.wlanscanap is not None:
505                         if retval == 0:
506                                 self.wlanscanap = None
507                                 content = result.splitlines()
508                                 first = content[0].split()
509                                 completed = False
510                                 for x in first:
511                                         if x == 'completed':
512                                                 completed = True
513                                 if completed == True:
514                                         callback(result)
515                                 else:
516                                         callback(0)
517                         else:
518                                 callback(0)
519
520         def apListParse(self,data):
521                 global selectap
522                 if data == 0:
523                         if self.scanAPcount >0:
524                                 self.scanAPcount -=1
525                                 self.configurationmsg.close(True)
526                                 time.sleep(3)
527                                 self.scanAplistTimer.start(500,True)
528                                 return
529                         else:
530                                 self.configurationmsg.close(True)
531                                 self.scanAPFailedTimer.start(500,True)
532                                 return
533                 else:
534                         self.apList = []
535 #                       self.scanAPcount =5
536                         self.scanAPcount =0
537                         list = data.splitlines()
538                         for x in list:
539                                 xx = x.lstrip()
540                                 if xx.startswith('ESSID:') and len(xx)>8 and xx[7:-1]not in self.apList:
541                                         self.apList.append(xx[7:-1])
542                         self.apList.append('Input hidden ESSID')
543 #                       print "###### selectap : ",selectap
544                         if selectap is not None and selectap in self.apList:
545                                 wlanconfig.essid = ConfigSelection(default=selectap,choices = self.apList)
546                         elif self.ap_scan is not None and self.ap_scan.strip() == '2':
547                                 wlanconfig.essid = ConfigSelection(default='Input hidden ESSID',choices = self.apList)
548                         elif self.ssid is not None and self.ssid in self.apList:
549                                 wlanconfig.essid = ConfigSelection(default=self.ssid,choices = self.apList)
550                         else:
551                                 wlanconfig.essid = ConfigSelection(choices = self.apList)
552                         if self.ssid is not None:
553                                 wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False)
554                         else:
555                                 wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
556                 self.configurationmsg.close(True)
557                 self.createConfig()
558
559         def scanAPFailed(self):
560                 self.session.openWithCallback(self.keyCancel ,MessageBox, _("Scan AP Failed"), MessageBox.TYPE_ERROR,10)
561
562         def keyLeft(self):
563                 ConfigListScreen.keyLeft(self)
564                 self.newConfig()
565
566         def keyRight(self):
567                 ConfigListScreen.keyRight(self)
568                 self.newConfig()
569
570         def newConfig(self):
571                 if self["config"].getCurrent() == self.usedeviceEntry or self["config"].getCurrent() == self.encryptEntry \
572                         or self["config"].getCurrent() == self.usedhcpEntry or self["config"].getCurrent() == self.usegatewayEntry \
573                         or self["config"].getCurrent() == self.essidEntry:
574                         self.createConfig()
575
576         def saveWlanConfig(self):
577                 if self["config"].isChanged():
578                         self.session.openWithCallback(self.checkNetworkShares, MessageBox, (_("Are you sure you want to restart your network interfaces?\n") ) )
579                 else:
580                         self.session.openWithCallback(self.checkNetworkShares, MessageBox, (_("Network configuration is not changed....\n\nAre you sure you want to restart your network interfaces?\n") ) )
581
582         def checkNetworkShares(self,ret = False):
583                 if ret == False:
584                         return
585                 if not self.Console:
586                         self.Console = Console()
587                 cmd = "cat /proc/mounts"
588                 self.Console.ePopen(cmd, self.checkSharesFinished, self.confirmAnotherIfaces)
589
590         def checkSharesFinished(self, result, retval, extra_args):
591                 callback = extra_args
592                 print "checkMountsFinished : result : \n",result
593                 networks = ['nfs','smbfs','ncp','coda']
594                 for line in result.splitlines():
595                         split = line.strip().split(' ',3)
596                         if split[2] in networks:
597                                 self.session.open(MessageBox, ("NOT deconfiguring network interfaces :\n network shares still mounted\n"), type = MessageBox.TYPE_ERROR, timeout = 10)
598                                 callback(False)
599                                 return
600                 callback(True)
601
602         def confirmAnotherIfaces(self, ret = False):
603                 if ret == False:
604                         return
605                 else:
606                         num_configured_if = len(iNetwork.getConfiguredAdapters())
607                         if num_configured_if >= 1:
608                                 if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters():
609                                         self.writeWlanConfig(False)
610                                 else:
611                                         self.session.openWithCallback(self.writeWlanConfig, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True)
612                         else:
613                                 self.writeWlanConfig(False)
614
615         def writeWlanConfig(self,ret = False):
616                 if ret == True:
617                         configuredInterfaces = iNetwork.getConfiguredAdapters()
618                         for interface in configuredInterfaces:
619                                 if interface == self.iface:
620                                         continue
621                                 iNetwork.setAdapterAttribute(interface, "up", False)
622                                 iNetwork.deactivateInterface(interface)
623                 ret=self.writeWpasupplicantConf()
624                 if ret == -1:
625                         self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
626                         return
627                 elif ret == -2:
628                         self.session.open(MessageBox, _("hidden ESSID empty"), type = MessageBox.TYPE_ERROR, timeout = 10)
629                         return
630
631                 if wlanconfig.usedevice.value=="on":
632                         iNetwork.setAdapterAttribute(self.iface, "up", True)
633                         if wlanconfig.usedhcp.value =="on":
634                                 iNetwork.setAdapterAttribute(self.iface, "dhcp", True)
635                         else:
636                                 iNetwork.setAdapterAttribute(self.iface, "dhcp", False)
637                                 iNetwork.setAdapterAttribute(self.iface, "ip", wlanconfig.ip.value)
638                                 iNetwork.setAdapterAttribute(self.iface, "netmask", wlanconfig.netmask.value)
639                                 if wlanconfig.usegateway.value == "on":
640                                         iNetwork.setAdapterAttribute(self.iface, "gateway", wlanconfig.gateway.value)
641                 else:
642                         iNetwork.setAdapterAttribute(self.iface, "up", False)
643                         iNetwork.deactivateInterface(self.iface)
644                 contents = "\tpre-up wpa_supplicant -i"+self.iface+" -c/etc/wpa_supplicant.conf -B -D"+iNetwork.detectWlanModule(self.iface)+"\n"
645                 contents += "\tpost-down wpa_cli terminate\n\n"
646                 iNetwork.setAdapterAttribute(self.iface, "configStrings", contents)
647                 iNetwork.writeNetworkConfig()
648                 iNetwork.restartNetwork(self.updateCurrentInterfaces)
649                 self.configurationmsg = None
650                 self.configurationmsg = self.session.openWithCallback(self.configFinished, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
651
652         def writeWpasupplicantConf(self):
653                 wpafd = open("/etc/wpa_supplicant.conf","w")
654                 if wpafd > 0:
655                         contents = "#WPA Supplicant Configuration by STB\n"
656                         contents += "ctrl_interface=/var/run/wpa_supplicant\n"
657                         contents += "eapol_version=1\n"
658                         contents += "fast_reauth=1\n"
659
660                         if wlanconfig.essid.value == 'Input hidden ESSID':
661                                 contents += "ap_scan=2\n"
662                         else :
663                                 contents += "ap_scan=1\n"
664                         contents += "network={\n"
665                         if wlanconfig.essid.value == 'Input hidden ESSID':
666                                 if len(wlanconfig.hiddenessid.value) == 0:
667                                         wpafd.close()
668                                         return -2
669                                 contents += "\tssid=\""+wlanconfig.hiddenessid.value+"\"\n"
670                         else :
671                                 contents += "\tssid=\""+wlanconfig.essid.value+"\"\n"
672                         contents += "\tscan_ssid=0\n"
673                         if wlanconfig.encrypt.value == "on":
674                                 if wlanconfig.method.value =="wep":
675                                         contents += "\tkey_mgmt=NONE\n"
676                                         contents += "\twep_key0="
677                                 elif wlanconfig.method.value == "wpa":
678                                         contents += "\tkey_mgmt=WPA-PSK\n"
679                                         contents += "\tproto=WPA\n"
680                                         contents += "\tpairwise=CCMP TKIP\n"
681                                         contents += "\tgroup=CCMP TKIP\n"
682                                         contents += "\tpsk="
683                                 elif wlanconfig.method.value == "wpa2":
684                                         contents += "\tkey_mgmt=WPA-PSK\n"
685                                         contents += "\tproto=RSN\n"
686                                         contents += "\tpairwise=CCMP TKIP\n"
687                                         contents += "\tgroup=CCMP TKIP\n"
688                                         contents += "\tpsk="
689                                 else:
690                                         contents += "\tkey_mgmt=WPA-PSK\n"
691                                         contents += "\tproto=WPA RSN\n"
692                                         contents += "\tpairwise=CCMP TKIP\n"
693                                         contents += "\tgroup=CCMP TKIP\n"
694                                         contents += "\tpsk="
695                                 if wlanconfig.keytype.value == "ascii":
696                                         contents += "\""+wlanconfig.key.value+"\"\n"
697                                 else:
698                                         contents += wlanconfig.key.value+"\n"
699                         else:
700                                 contents += "\tkey_mgmt=NONE\n"
701                         contents += "}\n"
702                         print "content = \n"+contents
703                         wpafd.write(contents)
704                         wpafd.close()
705                         return 0
706                 else :
707                         self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
708                         return -1
709         def updateCurrentInterfaces(self,ret):
710                 if ret is True:
711                         iNetwork.getInterfaces(self.configurationMsgClose)
712
713         def configurationMsgClose(self,ret):
714                 if ret is True and self.configurationmsg is not None:
715                         self.configurationmsg.close(True)
716
717         def configFinished(self,data):
718                 global selectap
719                 if data is True:
720                         self.session.openWithCallback(self.configFinishedCB, MessageBox, _("Your network configuration has been activated."), type = MessageBox.TYPE_INFO, timeout = 10)
721                         selectap = wlanconfig.essid.value
722
723         def configFinishedCB(self,data):
724                 if data is not None:
725                         if data is True:
726                                 self.close()
727         
728         def formatip(self, iplist):
729                 list = []
730                 list = iplist
731 #               print "iplist : ",iplist
732                 try:
733                         if len(iplist) == 4:
734                                 result = str(iplist[0])+"."+str(iplist[1])+"."+str(iplist[2])+"."+str(iplist[3])
735                         else:
736                                 result ="0.0.0.0"
737 #                       print "result : ",result
738                         return result
739                 except:
740                         return "[N/A]"
741                         
742         def keyCancelConfirm(self, result):
743                 if not result:
744                         return
745                 if self.oldInterfaceState is False:
746                         iNetwork.setAdapterAttribute(self.iface, "up", False)
747                         iNetwork.deactivateInterface(self.iface,self.keyCancelCB)
748                 else:
749                         self.close()
750
751         def keyCancel(self,yesno = True):
752                 if self["config"].isChanged():
753                         self.session.openWithCallback(self.keyCancelConfirm, MessageBox, _("Really close without saving settings?"))
754                 else:
755                         self.keyCancelConfirm(True)
756
757         def keyCancelCB(self,data):
758                 if data is not None:
759                         if data is True:
760                                 self.close()
761
762 #       def selectionChanged(self):
763 #               current = self["config"].getCurrent()
764 #               print current
765
766 class WlanScanAp(Screen,HelpableScreen):
767         skin = """
768         <screen name="WlanScanAp" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">
769                 <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
770                 <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
771                 <eLabel text="Wireless Network AP Scan..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
772                 <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
773                 <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
774                         <convert type="ClockToText">Format:%H:%M</convert>
775                 </widget>
776                 <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
777                 <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
778                 <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
779                 <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
780                 <widget source="key_green" render="Label" position="268,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
781                 <widget source="key_blue" render="Label" position="665,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
782                 <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
783                 <widget name="menulist" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
784                 <widget source="Address" render="Label" position="490,220" zPosition="1" size="300,30" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />               
785                 <widget source="ESSID" render="Label" position="490,250" zPosition="1" size="300,30" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />
786                 <widget source="Protocol" render="Label" position="490,280" zPosition="1" size="300,30" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />      
787                 <widget source="Frequency" render="Label" position="490,310" zPosition="1" size="300,30" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />     
788                 <widget source="Encryption key" render="Label" position="490,340" zPosition="1" size="300,30" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />        
789                 <widget source="BitRate" render="Label" position="490,370" zPosition="1" size="300,60" font="Regular;20" halign="center" valign="center" backgroundColor="#27b5b9bd" foregroundColor="#1c1c1c" transparent="1" />
790         </screen>"""
791
792         def __init__(self, session, iface):
793                 Screen.__init__(self,session)
794                 HelpableScreen.__init__(self)
795                 self.session = session
796                 self.iface = iface
797                 self.wlanscanap = None
798 #               self.scanAPcount = 5
799                 self.scanAPcount = 1
800                 self.apList = {}
801                 self.SetApList = []
802
803                 self["WizardActions"] = HelpableActionMap(self, "WizardActions",
804                 {
805                         "up": (self.up, _("move up to previous entry")),
806                         "down": (self.down, _("move down to next entry")),
807                         "left": (self.left, _("move up to first entry")),
808                         "right": (self.right, _("move down to last entry")),
809                 })
810
811                 self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
812                 {
813                         "cancel": (self.close, _("exit")),
814                         "ok": (self.ok, "select AP"),
815                 })
816
817                 self["ColorActions"] = HelpableActionMap(self, "ColorActions",
818                 {
819                         "red": (self.close, _("exit")),
820                         "green": (self.ok, "select AP"),
821                         "blue": (self.startWlanConfig, "Edit Wireless settings"),
822                 })
823
824                 self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
825                 {
826                         "ok": self.ok,
827                         "back": self.close,
828                         "up": self.up,
829                         "down": self.down,
830                         "red": self.close,
831                         "left": self.left,
832                         "right": self.right,
833                 }, -2)
834
835                 self["menulist"] = MenuList(self.SetApList)
836                 self["key_red"] = StaticText(_("Close"))
837                 self["key_green"] = StaticText(_("Select"))
838                 self["key_blue"] = StaticText(_("EditSetting"))
839                 self["Address"] = StaticText(_("Scanning AP List.."))
840                 self["ESSID"] = StaticText(_("Wait a moment"))
841                 self["Protocol"] = StaticText(" ")
842                 self["Frequency"] = StaticText(" ")
843                 self["Encryption key"] = StaticText(" ")
844                 self["BitRate"] = StaticText(" ")
845                 self.scanAPFailedTimer = eTimer()
846                 self.scanAPFailedTimer.callback.append(self.scanAPFailed)
847                 self.scanAplistTimer = eTimer()
848                 self.scanAplistTimer.callback.append(self.scanApList)
849                 self.scanAplistTimer.start(100,True)
850                 
851         def left(self):
852                 self["menulist"].pageUp()
853                 self.displayApInfo()
854         
855         def right(self):
856                 self["menulist"].pageDown()
857                 self.displayApInfo()
858
859         def up(self):
860                 self["menulist"].up()
861                 self.displayApInfo()
862                 
863         def down(self):
864                 self["menulist"].down()
865                 self.displayApInfo()
866
867         def ok(self):
868                 global selectap
869                 selectAp=self["menulist"].getCurrent()[0]
870                 selectap = selectAp
871                 self.close()
872
873         def startWlanConfig(self):
874                 global selectap
875                 selectAp=self["menulist"].getCurrent()[0]
876                 selectap = selectAp
877                 self.session.open(WlanConfig,self.iface)
878 #               self.close()
879
880         def scanApList(self):
881         #       print "self.scanAPcount : ",self.scanAPcount
882                 self.apList = {}
883                 self.SetApList = []
884                 self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
885                 os_system('ifconfig '+self.iface+" up")
886                 self.wlanscanap = Console()
887                 cmd = "iwlist "+self.iface+" scan"
888                 print cmd
889                 self.wlanscanap.ePopen(cmd, self.iwlistfinnished,self.APListParse)
890
891         def iwlistfinnished(self, result, retval,extra_args):
892 #               print "iwlistfinnished"
893                 (statecallback) = extra_args
894                 if self.wlanscanap is not None:
895 #                       print "retval = ",retval
896                         if retval == 0:
897                                 self.wlanscanap = None
898                                 content = result.splitlines()
899                                 first = content[0].split()
900                                 completed = False
901                                 for x in first:
902                                         if x == 'completed':
903                                                 completed = True
904                                 if completed == True:
905                                         statecallback(result)
906                                 else:
907                                         statecallback(0)
908                         else:
909                                 statecallback(0)
910
911         def APListParse(self,data):
912                 if data == 0:
913                         if self.scanAPcount >0:
914                                 self.scanAPcount -=1
915                                 self.configurationmsg.close(True)
916                                 time.sleep(3)
917                                 self.scanAplistTimer.start(500,True)
918                                 return
919                         else:
920                                 self.configurationmsg.close(True)
921                                 self.scanAPFailedTimer.start(500,True)
922                                 return
923                 else:
924 #                       print data
925                         self.apList = {}
926 #                       self.scanAPcount =5
927                         self.scanAPcount =0
928                         list = data.splitlines()
929                         for line in list:
930 #                               print "line : ",line
931                                 if line.strip().startswith("Cell"): #  Cell 01 - Address: 00:26:66:5C:EF:24
932                                         parts = line.strip().split(" ")
933                                         current_ap_id = int(parts[1])
934                                         self.apList[current_ap_id]={}
935                                         self.apList[current_ap_id]["Address"]=parts[4]
936                                 elif line.strip().startswith("ESSID"):
937                                         self.apList[current_ap_id]["ESSID"]=line.strip()[6:].strip('"')
938                                         self.SetApList.append( (self.apList[current_ap_id]["ESSID"],current_ap_id) )
939                                 elif line.strip().startswith("Protocol"):
940                                         self.apList[current_ap_id]["Protocol"]=line.strip()[9:]
941                                 elif line.strip().startswith("Frequency"):
942                                         self.apList[current_ap_id]["Frequency"]=line.strip()[10:]
943                                 elif line.strip().startswith("Encryption key"):
944                                         self.apList[current_ap_id]["Encryption key"]=line.strip()[15:]
945                                 elif line.strip().startswith("Bit Rates"):
946                                         self.apList[current_ap_id]["BitRate"]=line.strip()[10:]
947                         print self.apList
948                         print len(self.apList)
949                 self.configurationmsg.close(True)
950                 self.displayApInfo()
951
952         def scanAPFailed(self):
953                 self.session.openWithCallback(self.ScanAPclose,MessageBox, _("Scan AP Failed"), MessageBox.TYPE_ERROR,10)
954
955         def displayApInfo(self):
956                 if len(self.apList) >0:
957                         self["menulist"].setList(self.SetApList)
958                         index = self["menulist"].getCurrent()[1]
959                         for key in ["Address", "ESSID", "Protocol", "Frequency", "Encryption key", "BitRate"]:
960                                 if self.apList[index].has_key(key):
961                                         self[key].setText((key+":  "+self.apList[index][key]))
962                                 else:
963                                         self[key].setText(("None"))
964                 else:
965                         self.session.openWithCallback(self.ScanAPclose, MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
966
967         def ScanAPclose(self,data):
968                 self.close()
969
970 class NetworkAdapterTest(Screen):
971         def __init__(self, session,iface):
972                 Screen.__init__(self, session)
973                 self.iface = iface
974                 self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
975                 self.setLabels()
976                 self.onClose.append(self.cleanup)
977                 self.onHide.append(self.cleanup)
978                 
979                 self["updown_actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
980                 {
981                         "ok": self.KeyOK,
982                         "blue": self.KeyOK,
983                         "up": lambda: self.updownhandler('up'),
984                         "down": lambda: self.updownhandler('down'),
985                 
986                 }, -2)
987                 
988                 self["shortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
989                 {
990                         "red": self.cancel,
991                         "back": self.cancel,
992                 }, -2)
993                 self["infoshortcuts"] = ActionMap(["ShortcutActions","WizardActions"],
994                 {
995                         "red": self.closeInfo,
996                         "back": self.closeInfo,
997                 }, -2)
998                 self["shortcutsgreen"] = ActionMap(["ShortcutActions"],
999                 {
1000                         "green": self.KeyGreen,
1001                 }, -2)
1002                 self["shortcutsgreen_restart"] = ActionMap(["ShortcutActions"],
1003                 {
1004                         "green": self.KeyGreenRestart,
1005                 }, -2)
1006                 self["shortcutsyellow"] = ActionMap(["ShortcutActions"],
1007                 {
1008                         "yellow": self.KeyYellow,
1009                 }, -2)
1010                 
1011                 self["shortcutsgreen_restart"].setEnabled(False)
1012                 self["updown_actions"].setEnabled(False)
1013                 self["infoshortcuts"].setEnabled(False)
1014                 self.onClose.append(self.delTimer)      
1015                 self.onLayoutFinish.append(self.layoutFinished)
1016                 self.steptimer = False
1017                 self.nextstep = 0
1018                 self.activebutton = 0
1019                 self.nextStepTimer = eTimer()
1020                 self.nextStepTimer.callback.append(self.nextStepTimerFire)
1021
1022         def cancel(self):
1023                 if self.oldInterfaceState is False:
1024                         iNetwork.setAdapterAttribute(self.iface, "up", self.oldInterfaceState)
1025                         iNetwork.deactivateInterface(self.iface)
1026                 self.close()
1027
1028         def closeInfo(self):
1029                 self["shortcuts"].setEnabled(True)              
1030                 self["infoshortcuts"].setEnabled(False)
1031                 self["InfoText"].hide()
1032                 self["InfoTextBorder"].hide()
1033                 self["key_red"].setText(_("Close"))
1034
1035         def delTimer(self):
1036                 del self.steptimer
1037                 del self.nextStepTimer
1038
1039         def nextStepTimerFire(self):
1040                 self.nextStepTimer.stop()
1041                 self.steptimer = False
1042                 self.runTest()
1043
1044         def updownhandler(self,direction):
1045                 if direction == 'up':
1046                         if self.activebutton >=2:
1047                                 self.activebutton -= 1
1048                         else:
1049                                 self.activebutton = 6
1050                         self.setActiveButton(self.activebutton)
1051                 if direction == 'down':
1052                         if self.activebutton <=5:
1053                                 self.activebutton += 1
1054                         else:
1055                                 self.activebutton = 1
1056                         self.setActiveButton(self.activebutton)
1057
1058         def setActiveButton(self,button):
1059                 if button == 1:
1060                         self["EditSettingsButton"].setPixmapNum(0)
1061                         self["EditSettings_Text"].setForegroundColorNum(0)
1062                         self["NetworkInfo"].setPixmapNum(0)
1063                         self["NetworkInfo_Text"].setForegroundColorNum(1)
1064                         self["AdapterInfo"].setPixmapNum(1)               # active
1065                         self["AdapterInfo_Text"].setForegroundColorNum(2) # active
1066                 if button == 2:
1067                         self["AdapterInfo_Text"].setForegroundColorNum(1)
1068                         self["AdapterInfo"].setPixmapNum(0)
1069                         self["DhcpInfo"].setPixmapNum(0)
1070                         self["DhcpInfo_Text"].setForegroundColorNum(1)
1071                         self["NetworkInfo"].setPixmapNum(1)               # active
1072                         self["NetworkInfo_Text"].setForegroundColorNum(2) # active
1073                 if button == 3:
1074                         self["NetworkInfo"].setPixmapNum(0)
1075                         self["NetworkInfo_Text"].setForegroundColorNum(1)
1076                         self["IPInfo"].setPixmapNum(0)
1077                         self["IPInfo_Text"].setForegroundColorNum(1)
1078                         self["DhcpInfo"].setPixmapNum(1)                  # active
1079                         self["DhcpInfo_Text"].setForegroundColorNum(2)    # active
1080                 if button == 4:
1081                         self["DhcpInfo"].setPixmapNum(0)
1082                         self["DhcpInfo_Text"].setForegroundColorNum(1)
1083                         self["DNSInfo"].setPixmapNum(0)
1084                         self["DNSInfo_Text"].setForegroundColorNum(1)
1085                         self["IPInfo"].setPixmapNum(1)                  # active
1086                         self["IPInfo_Text"].setForegroundColorNum(2)    # active                
1087                 if button == 5:
1088                         self["IPInfo"].setPixmapNum(0)
1089                         self["IPInfo_Text"].setForegroundColorNum(1)
1090                         self["EditSettingsButton"].setPixmapNum(0)
1091                         self["EditSettings_Text"].setForegroundColorNum(0)
1092                         self["DNSInfo"].setPixmapNum(1)                 # active
1093                         self["DNSInfo_Text"].setForegroundColorNum(2)   # active
1094                 if button == 6:
1095                         self["DNSInfo"].setPixmapNum(0)
1096                         self["DNSInfo_Text"].setForegroundColorNum(1)
1097                         self["EditSettingsButton"].setPixmapNum(1)         # active
1098                         self["EditSettings_Text"].setForegroundColorNum(2) # active
1099                         self["AdapterInfo"].setPixmapNum(0)
1100                         self["AdapterInfo_Text"].setForegroundColorNum(1)
1101                         
1102         def runTest(self):
1103                 next = self.nextstep
1104                 if next == 0:
1105                         self.doStep1()
1106                 elif next == 1:
1107                         self.doStep2()
1108                 elif next == 2:
1109                         self.doStep3()
1110                 elif next == 3:
1111                         self.doStep4()
1112                 elif next == 4:
1113                         self.doStep5()
1114                 elif next == 5:
1115                         self.doStep6()
1116                 self.nextstep += 1
1117
1118         def doStep1(self):
1119                 self.steptimer = True
1120                 self.nextStepTimer.start(3000)
1121                 self["key_yellow"].setText(_("Stop test"))
1122
1123         def doStep2(self):
1124                 self["Adapter"].setText(iNetwork.getFriendlyAdapterName(self.iface))
1125                 self["Adapter"].setForegroundColorNum(2)
1126                 self["Adaptertext"].setForegroundColorNum(1)
1127                 self["AdapterInfo_Text"].setForegroundColorNum(1)
1128                 self["AdapterInfo_OK"].show()
1129                 self.steptimer = True
1130                 self.nextStepTimer.start(3000)
1131
1132         def doStep3(self):
1133                 self["Networktext"].setForegroundColorNum(1)
1134                 self["Network"].setText(_("Please wait..."))
1135                 self.AccessPointInfo(self.iface)
1136                 self["NetworkInfo_Text"].setForegroundColorNum(1)
1137                 self.steptimer = True
1138                 self.nextStepTimer.start(3000)
1139
1140         def doStep4(self):
1141                 self["Dhcptext"].setForegroundColorNum(1)
1142                 if iNetwork.getAdapterAttribute(self.iface, 'dhcp') is True:
1143                         self["Dhcp"].setForegroundColorNum(2)
1144                         self["Dhcp"].setText(_("enabled"))
1145                         self["DhcpInfo_Check"].setPixmapNum(0)
1146                 else:
1147                         self["Dhcp"].setForegroundColorNum(1)
1148                         self["Dhcp"].setText(_("disabled"))
1149                         self["DhcpInfo_Check"].setPixmapNum(1)
1150                 self["DhcpInfo_Check"].show()
1151                 self["DhcpInfo_Text"].setForegroundColorNum(1)
1152                 self.steptimer = True
1153                 self.nextStepTimer.start(3000)
1154
1155         def doStep5(self):
1156                 self["IPtext"].setForegroundColorNum(1)
1157                 self["IP"].setText(_("Please wait..."))
1158                 iNetwork.checkNetworkState(self.NetworkStatedataAvail)
1159
1160         def doStep6(self):
1161                 self.steptimer = False
1162                 self.nextStepTimer.stop()
1163                 self["DNStext"].setForegroundColorNum(1)
1164                 self["DNS"].setText(_("Please wait..."))
1165                 iNetwork.checkDNSLookup(self.DNSLookupdataAvail)
1166
1167         def KeyGreen(self):
1168                 self["shortcutsgreen"].setEnabled(False)
1169                 self["shortcutsyellow"].setEnabled(True)
1170                 self["updown_actions"].setEnabled(False)
1171                 self["key_yellow"].setText("")
1172                 self["key_green"].setText("")
1173                 self.steptimer = True
1174                 self.nextStepTimer.start(1000)
1175
1176         def KeyGreenRestart(self):
1177                 self.nextstep = 0
1178                 self.layoutFinished()
1179                 self["Adapter"].setText((""))
1180                 self["Network"].setText((""))
1181                 self["Dhcp"].setText((""))
1182                 self["IP"].setText((""))
1183                 self["DNS"].setText((""))
1184                 self["AdapterInfo_Text"].setForegroundColorNum(0)
1185                 self["NetworkInfo_Text"].setForegroundColorNum(0)
1186                 self["DhcpInfo_Text"].setForegroundColorNum(0)
1187                 self["IPInfo_Text"].setForegroundColorNum(0)
1188                 self["DNSInfo_Text"].setForegroundColorNum(0)
1189                 self["shortcutsgreen_restart"].setEnabled(False)
1190                 self["shortcutsgreen"].setEnabled(False)
1191                 self["shortcutsyellow"].setEnabled(True)
1192                 self["updown_actions"].setEnabled(False)
1193                 self["key_yellow"].setText("")
1194                 self["key_green"].setText("")
1195                 self.steptimer = True
1196                 self.nextStepTimer.start(1000)
1197
1198         def KeyOK(self):
1199                 self["infoshortcuts"].setEnabled(True)
1200                 self["shortcuts"].setEnabled(False)
1201                 if self.activebutton == 1: # Adapter Check
1202                         self["InfoText"].setText(_("This test detects your configured Wireless LAN-Adapter."))
1203                         self["InfoTextBorder"].show()
1204                         self["InfoText"].show()
1205                         self["key_red"].setText(_("Back"))
1206                 if self.activebutton == 2: #LAN Check
1207                         self["InfoText"].setText(_("This test checks whether a network cable is connected to your Wireless LAN-Adapter."))
1208                         self["InfoTextBorder"].show()
1209                         self["InfoText"].show()
1210                         self["key_red"].setText(_("Back"))
1211                 if self.activebutton == 3: #DHCP Check
1212                         self["InfoText"].setText(_("This test checks whether your Wireless LAN Adapter is set up for automatic IP Address configuration with DHCP.\nIf you get a \"disabled\" message:\n - then your Wireless LAN Adapter is configured for manual IP Setup\n- verify thay you have entered correct IP informations in the AdapterSetup dialog.\nIf you get an \"enabeld\" message:\n-verify that you have a configured and working DHCP Server in your network."))
1213                         self["InfoTextBorder"].show()
1214                         self["InfoText"].show()
1215                         self["key_red"].setText(_("Back"))
1216                 if self.activebutton == 4: # IP Check
1217                         self["InfoText"].setText(_("This test checks whether a valid IP Address is found for your LAN Adapter.\nIf you get a \"unconfirmed\" message:\n- no valid IP Address was found\n- please check your DHCP, cabling and adapter setup"))
1218                         self["InfoTextBorder"].show()
1219                         self["InfoText"].show()
1220                         self["key_red"].setText(_("Back"))
1221                 if self.activebutton == 5: # DNS Check
1222                         self["InfoText"].setText(_("This test checks for configured Nameservers.\nIf you get a \"unconfirmed\" message:\n- please check your DHCP, cabling and Adapter setup\n- if you configured your Nameservers manually please verify your entries in the \"Nameserver\" Configuration"))
1223                         self["InfoTextBorder"].show()
1224                         self["InfoText"].show()
1225                         self["key_red"].setText(_("Back"))
1226                 if self.activebutton == 6: # Edit Settings
1227                         self.session.open(WlanConfig,self.iface)
1228                         self["shortcuts"].setEnabled(True)              
1229                         self["infoshortcuts"].setEnabled(False)
1230
1231         def KeyYellow(self):
1232                 self.nextstep = 0
1233                 self["shortcutsgreen_restart"].setEnabled(True)
1234                 self["shortcutsgreen"].setEnabled(False)
1235                 self["shortcutsyellow"].setEnabled(False)
1236                 self["key_green"].setText(_("Restart test"))
1237                 self["key_yellow"].setText("")
1238                 self.steptimer = False
1239                 self.nextStepTimer.stop()
1240
1241         def layoutFinished(self):
1242                 self.setTitle(_("Network test: ") + iNetwork.getFriendlyAdapterName(self.iface) )
1243                 self["shortcutsyellow"].setEnabled(False)
1244                 self["AdapterInfo_OK"].hide()
1245                 self["NetworkInfo_Check"].hide()
1246                 self["DhcpInfo_Check"].hide()
1247                 self["IPInfo_Check"].hide()
1248                 self["DNSInfo_Check"].hide()
1249                 self["EditSettings_Text"].hide()
1250                 self["EditSettingsButton"].hide()
1251                 self["InfoText"].hide()
1252                 self["InfoTextBorder"].hide()
1253                 self["key_yellow"].setText("")
1254
1255         def setLabels(self):
1256                 self["Adaptertext"] = MultiColorLabel(_("LAN Adapter"))
1257                 self["Adapter"] = MultiColorLabel()
1258                 self["AdapterInfo"] = MultiPixmap()
1259                 self["AdapterInfo_Text"] = MultiColorLabel(_("Show Info"))
1260                 self["AdapterInfo_OK"] = Pixmap()
1261                 
1262                 if self.iface in iNetwork.wlan_interfaces:
1263                         self["Networktext"] = MultiColorLabel(_("Wireless Network"))
1264                 else:
1265                         self["Networktext"] = MultiColorLabel(_("Local Network"))
1266                 
1267                 self["Network"] = MultiColorLabel()
1268                 self["NetworkInfo"] = MultiPixmap()
1269                 self["NetworkInfo_Text"] = MultiColorLabel(_("Show Info"))
1270                 self["NetworkInfo_Check"] = MultiPixmap()
1271                 
1272                 self["Dhcptext"] = MultiColorLabel(_("DHCP"))
1273                 self["Dhcp"] = MultiColorLabel()
1274                 self["DhcpInfo"] = MultiPixmap()
1275                 self["DhcpInfo_Text"] = MultiColorLabel(_("Show Info"))
1276                 self["DhcpInfo_Check"] = MultiPixmap()
1277                 
1278                 self["IPtext"] = MultiColorLabel(_("IP Address"))
1279                 self["IP"] = MultiColorLabel()
1280                 self["IPInfo"] = MultiPixmap()
1281                 self["IPInfo_Text"] = MultiColorLabel(_("Show Info"))
1282                 self["IPInfo_Check"] = MultiPixmap()
1283                 
1284                 self["DNStext"] = MultiColorLabel(_("Nameserver"))
1285                 self["DNS"] = MultiColorLabel()
1286                 self["DNSInfo"] = MultiPixmap()
1287                 self["DNSInfo_Text"] = MultiColorLabel(_("Show Info"))
1288                 self["DNSInfo_Check"] = MultiPixmap()
1289                 
1290                 self["EditSettings_Text"] = MultiColorLabel(_("Edit settings"))
1291                 self["EditSettingsButton"] = MultiPixmap()
1292                 
1293                 self["key_red"] = StaticText(_("Close"))
1294                 self["key_green"] = StaticText(_("Start test"))
1295                 self["key_yellow"] = StaticText(_("Stop test"))
1296                 
1297                 self["InfoTextBorder"] = Pixmap()
1298                 self["InfoText"] = Label()
1299
1300         def NetworkStatedataAvail(self,data):
1301                 if data <= 2:
1302                         self["IP"].setForegroundColorNum(2)
1303                         self["IP"].setText(_("confirmed"))
1304                         self["IPInfo_Check"].setPixmapNum(0)
1305                 else:
1306                         self["IP"].setForegroundColorNum(1)
1307                         self["IP"].setText(_("unconfirmed"))
1308                         self["IPInfo_Check"].setPixmapNum(1)
1309                 self["IPInfo_Check"].show()
1310                 self["IPInfo_Text"].setForegroundColorNum(1)            
1311                 self.steptimer = True
1312                 self.nextStepTimer.start(3000)          
1313                 
1314         def DNSLookupdataAvail(self,data):
1315                 if data <= 2:
1316                         self["DNS"].setForegroundColorNum(2)
1317                         self["DNS"].setText(_("confirmed"))
1318                         self["DNSInfo_Check"].setPixmapNum(0)
1319                 else:
1320                         self["DNS"].setForegroundColorNum(1)
1321                         self["DNS"].setText(_("unconfirmed"))
1322                         self["DNSInfo_Check"].setPixmapNum(1)
1323                 self["DNSInfo_Check"].show()
1324                 self["DNSInfo_Text"].setForegroundColorNum(1)
1325                 self["EditSettings_Text"].show()
1326                 self["EditSettingsButton"].setPixmapNum(1)
1327                 self["EditSettings_Text"].setForegroundColorNum(2) # active
1328                 self["EditSettingsButton"].show()
1329                 self["key_yellow"].setText("")
1330                 self["key_green"].setText(_("Restart test"))
1331                 self["shortcutsgreen"].setEnabled(False)
1332                 self["shortcutsgreen_restart"].setEnabled(True)
1333                 self["shortcutsyellow"].setEnabled(False)
1334                 self["updown_actions"].setEnabled(True)
1335                 self.activebutton = 6
1336
1337         def getInfoCB(self,status):
1338                 if status is not None:
1339                         if status.startswith("No Connection") or status.startswith("Not-Associated") or status == False:
1340                                 self["Network"].setForegroundColorNum(1)
1341                                 self["Network"].setText(_("disconnected"))
1342                                 self["NetworkInfo_Check"].setPixmapNum(1)
1343                                 self["NetworkInfo_Check"].show()
1344                         else:
1345                                 self["Network"].setForegroundColorNum(2)
1346                                 self["Network"].setText(_("connected"))
1347                                 self["NetworkInfo_Check"].setPixmapNum(0)
1348                                 self["NetworkInfo_Check"].show()
1349                                                 
1350         def cleanup(self):
1351                 iNetwork.stopLinkStateConsole()
1352                 iNetwork.stopDNSConsole()
1353
1354         def AccessPointInfo(self,iface):
1355                 cmd = "iwconfig %s"%iface
1356                 self.iwconfigConsole = Console()
1357                 self.iwconfigConsole.ePopen(cmd,self.readAP,self.getInfoCB)
1358
1359         def readAP(self,result,retval,extra_args):
1360                 (callback) = extra_args
1361                 self.apState = False
1362                 if self.iwconfigConsole is not None:
1363                         if retval == 0:
1364                                 self.iwconfigConsole = None
1365                                 for content in result.splitlines():
1366                                         if 'Access Point' in content:
1367                                                 self.apState = content.strip().split('Access Point: ')[1]
1368                                                 callback(self.apState)
1369                                                 return
1370                 callback(self.apState)
1371                 
1372 class Wlanstatus(Screen):
1373         skin = """
1374         <screen name="Wlanstatus" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">
1375                 <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
1376                 <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
1377                 <eLabel text="Wireless Network Status..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
1378                 <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
1379                 <widget source="global.CurrentTime" render="Label" position="770,57" zPosition="1" size="50,20" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" halign="right" transparent="1">
1380                         <convert type="ClockToText">Format:%H:%M</convert>
1381                 </widget>
1382                 <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
1383                 <widget source="key_red" render="Label" position="66,97" zPosition="1" size="150,25" font="Regular;20" halign="center" valign="center" backgroundColor="darkgrey" foregroundColor="#1c1c1c" transparent="1" />
1384                 <widget source="status" render="Label" position="110,200" size="650,400" transparent="1" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" zPosition="1" />
1385         </screen>"""
1386         def __init__(self, session,iface):
1387                 Screen.__init__(self,session)
1388                 self.session = session
1389                 self.iface = iface
1390                 self["status"] = StaticText(_("Wait a moment..."))
1391                 self["key_red"] = StaticText(_("Close"))
1392                 self["OkCancelActions"] = ActionMap(["ShortcutActions", "SetupActions" ],
1393                 {
1394                         "ok": self.ok,
1395                         "cancel": self.close,
1396                         "red": self.close,
1397                 }, -2)
1398                 self.readstatus()
1399
1400         def readstatus(self):
1401                 self.wlanstatus = Console()
1402                 cmd1 = "iwconfig "+self.iface
1403                 self.wlanstatus.ePopen(cmd1, self.iwconfigfinnished,self.statusdisplay)
1404
1405         def iwconfigfinnished(self, result, retval,extra_args):
1406                 try:
1407                         (statecallback) = extra_args
1408                         if self.wlanstatus is not None:
1409                                 if retval == 0:
1410                                         statecallback(result)
1411                                 else:
1412                                         statecallback(0)
1413                 except:
1414                         self.close()
1415
1416
1417         def statusdisplay(self,data):
1418                 if data == 0:
1419                         self["status"].setText(_("No information..."))
1420                 else:
1421                         self["status"].setText(data)
1422
1423         def ok(self):
1424                 pass
1425
1426 def openconfig(session, **kwargs):
1427         session.open(WlanSelection)
1428
1429 def selSetup(menuid, **kwargs):
1430         list=[]
1431         if menuid != "system":
1432                 return [ ]
1433         else:
1434                 for x in iNetwork.getAdapterList():
1435                         if x.startswith('eth'):
1436                                 continue
1437                         list.append(x)
1438                 if len(list):
1439                         return [(_("Wireless LAN Setup"), openconfig, "wlansetup_config", 80)]
1440                 else:
1441                         return [ ]
1442         return [ ]
1443
1444 def Plugins(**kwargs):
1445         return  PluginDescriptor(name=_("Wireless LAN Setup"), description="Wireless LAN Setup", where = PluginDescriptor.WHERE_MENU, fnc=selSetup)