WirelessLanSetup : block wireless module setup in master mode.
[vuplus_dvbapp] / lib / python / Plugins / SystemPlugins / WirelessLanSetup / plugin.py
index 49f90e0..3207bb8 100755 (executable)
@@ -27,26 +27,25 @@ from os import path as os_path, system as os_system, unlink,listdir
 from re import compile as re_compile, search as re_search
 from Tools.Directories import fileExists
 import time
+from pythonwifi.iwlibs import Wireless
+import pythonwifi.flags
 
 class WlanSelection(Screen,HelpableScreen):
-       skin = """
-       <screen name="WlanSelection" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">
-               <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
-               <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
-               <eLabel text="Wireless Network Adapter Selection..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
-               <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
-               <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">
-                       <convert type="ClockToText">Format:%H:%M</convert>
-               </widget>
-               <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
-               <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
-               <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" />
-               <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" />
-               <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
-               <widget name="menulist" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
-               <widget source="description" render="Label" position="500,140" size="280,360" font="Regular;19" halign="center" valign="center" backgroundColor="#c5c9cc" transparent="1"/>
-       </screen>"""
-       
+       skin =  """
+               <screen position="center,center" size="510,400" title="Wireless Network Adapter Selection..." >
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
+                       <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
+
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
+
+                       <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+                       <widget source="key_green" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+
+                       <widget name="menulist" position="20,20" size="230,260" transparent="1" backgroundColor="#371e1c1a" zPosition="10" scrollbarMode="showOnDemand" />
+                       <widget source="description" render="Label" position="305,10" size="195,300" font="Regular;19" halign="center" valign="center" />
+               </screen>
+               """
        def __init__(self, session):
                Screen.__init__(self,session)
                HelpableScreen.__init__(self)
@@ -75,21 +74,38 @@ class WlanSelection(Screen,HelpableScreen):
                iNetwork.msgPlugins()
                iNetwork.getInterfaces()
 
+       def checkIfaceMode(self, iface = None):
+               try:
+                       obj = Wireless(iface)
+                       if obj.getMode() == 'Master':
+                               return -1
+                       else:
+                               return 0
+               except:
+                       return -2
+
        def ok(self):
 #              print len(self["menulist"].list)
                if len(self["menulist"].list) == 0:
                        self.session.open(MessageBox, (_("Can not find any WirelessLan Module\n")),MessageBox.TYPE_ERROR,5 )
                        return
-               ifaces=self["menulist"].getCurrent()[1]
-               if ifaces == None:
-                       pass
+               iface=self["menulist"].getCurrent()[1]
+               if iface == None:
+                       return
                else:
-                       self.session.open(WlanSetup,ifaces)
+                       ret = self.checkIfaceMode(iface)
+                       if ret == -2:
+                               self.session.open(MessageBox, (_("Invalid WirelessLan Module.\n")),MessageBox.TYPE_ERROR,5 )
+                               return
+                       elif ret == -1:
+                               self.session.open(MessageBox, (_("Can not setup WirelessLan Module in 'AP Mode'\n")),MessageBox.TYPE_ERROR,5 )
+                               return
+               self.session.open(WlanSetup, iface)
 
        def getWlandevice(self):
                list = []
                for x in iNetwork.getInstalledAdapters():
-                       if x.startswith('eth'):
+                       if x.startswith('eth') or x.startswith('br') or x.startswith('mon'):
                                continue
                        description=self.getAdapterDescription(x)
                        if description == "Unknown network adapter":
@@ -105,7 +121,7 @@ class WlanSelection(Screen,HelpableScreen):
                        files = listdir(classdir)
                        if 'driver' in files:
                                if os_path.realpath(driverdir).endswith('rtw_usb_drv'):
-                                       return _("Realtak")+ " " + _("WLAN adapter.")
+                                       return _("Realtek")+ " " + _("WLAN adapter.")
                                elif os_path.realpath(driverdir).endswith('ath_pci'):
                                        return _("Atheros")+ " " + _("WLAN adapter.")
                                elif os_path.realpath(driverdir).endswith('zd1211b'):
@@ -125,23 +141,21 @@ class WlanSelection(Screen,HelpableScreen):
                iNetwork.stopGetInterfacesConsole()
 
 class WlanSetup(Screen,HelpableScreen):
-       skin = """
-       <screen name="WlanSetup" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">   
-               <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
-               <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
-               <eLabel text="Wireless Network Setup Menu..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
-               <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
-               <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">
-                       <convert type="ClockToText">Format:%H:%M</convert>
-               </widget>
-               <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
-               <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
-               <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" />
-               <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" />
-               <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
-               <widget name="menulist" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
-               <widget source="description" render="Label" position="500,140" size="280,360" font="Regular;19" halign="center" valign="center" backgroundColor="#c5c9cc" transparent="1"/>
-       </screen>"""
+       skin =  """
+               <screen position="center,center" size="510,400" title="Wireless Network Setup Menu..." >
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
+                       <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
+
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
+
+                       <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+                       <widget source="key_green" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+
+                       <widget name="menulist" position="20,20" size="230,260" transparent="1" backgroundColor="#371e1c1a" zPosition="10" scrollbarMode="showOnDemand" />
+                       <widget source="description" render="Label" position="305,10" size="195,300" font="Regular;19" halign="center" valign="center" />
+               </screen>
+               """
        def __init__(self, session, ifaces):
                Screen.__init__(self, session)
                HelpableScreen.__init__(self)
@@ -230,7 +244,7 @@ class WlanSetup(Screen,HelpableScreen):
                if self["menulist"].getCurrent()[1] == 'setting':
                        self.session.openWithCallback(self.checklist, WlanConfig, self.iface)
                elif self["menulist"].getCurrent()[1] == 'scanap':
-                       self.session.open(WlanScanAp, self.iface)
+                       self.session.openWithCallback(self.WlanScanApCallback, WlanScanAp, self.iface)
                elif self["menulist"].getCurrent()[1] == 'dns':
                        self.session.open(NameserverSetup)
                elif self["menulist"].getCurrent()[1] == 'status':
@@ -255,6 +269,10 @@ class WlanSetup(Screen,HelpableScreen):
 
                return menu
 
+       def WlanScanApCallback(self, essid = None):
+               if essid is not None:
+                       self.session.openWithCallback(self.checklist, WlanConfig, self.iface, essid)
+
        def restartLan(self, ret = False):
                if (ret == True):
                        iNetwork.restartNetwork(self.restartLanDataAvail)
@@ -288,7 +306,7 @@ wlanconfig.method = ConfigSelection(default = "wep", choices = [
        ("wep", _("WEP")), ("wpa", _("WPA")), ("wpa2", _("WPA2")),("wpa/wpa2", _("WPA/WPA2"))])
 wlanconfig.keytype = ConfigSelection(default = "ascii", choices = [
        ("ascii", _("ASCII")), ("hex", _("HEX"))])
-wlanconfig.key = ConfigText(default = "XXXXXXXX", visible_width = 50, fixed_size = False)
+wlanconfig.key = ConfigPassword(default = "XXXXXXXX", visible_width = 50, fixed_size = False)
 wlanconfig.usegateway = ConfigSelection(default = "off", choices = [
        ("off", _("no")), ("on", _("yes"))])
 wlanconfig.ip   = ConfigIP([0,0,0,0])
@@ -297,34 +315,31 @@ wlanconfig.gateway = ConfigIP([0,0,0,0])
 
 selectap = None        
 class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
-       skin = """
-       <screen name="WlanConfig" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">  
-               <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
-               <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
-               <eLabel text="Wireless Network Configuration..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
-               <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
-               <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">
-                       <convert type="ClockToText">Format:%H:%M</convert>
-               </widget>
-               <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
-               <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
-               <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" />
-               <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" />
-               <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
-               <widget name="config" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
-               <eLabel text="IP Address : " position="500,160" size="200,26" font="Semiboldit;22" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />             
-               <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" />             
-               <eLabel text="NetMask : " position="500,220" size="200,26" font="Semiboldit;22" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />                
-               <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" />               
-               <eLabel text="Gateway : " position="500,280" size="200,26" font="Semiboldit;22" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />                
-               <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" />               
-       </screen>"""
-
-       def __init__(self, session, iface):
+       skin =  """
+               <screen position="center,center" size="510,400" title="Wireless Network Configuration..." >
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="360,360" size="140,40" alphatest="on" />
+
+                       <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+                       <widget source="key_green" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+
+                       <widget name="config" position="10,10" backgroundColor="#371e1c1a" transparent="1" size="480,210" scrollbarMode="showOnDemand" />
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,225" zPosition="1" size="550,2" />
+                       <eLabel text="IP Address : " position="100,250" size="190,21" font="Regular;19" />
+                       <widget source="ipaddress" render="Label" position="300,250" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" />
+                       <eLabel text="NetMask : " position="100,275" size="190,21" font="Regular;19" />
+                       <widget source="netmask" render="Label" position="300,275" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" />     
+                       <eLabel text="Gateway : " position="100,300" size="190,21" font="Regular;19" />
+                       <widget source="gateway" render="Label" position="300,300" zPosition="1" size="150,26" font="Regular;20" halign="center" valign="center" />
+                       <widget name="VKeyIcon" pixmap="skin_default/buttons/key_text.png" position="460,230" zPosition="10" size="35,25" transparent="1" alphatest="on" />
+                       <widget name="HelpWindow" pixmap="skin_default/buttons/key_text.png" position="383,420" zPosition="1" size="1,1" transparent="1" alphatest="on" />
+               </screen>
+               """
+       def __init__(self, session, iface, essidSelected = None):
                Screen.__init__(self,session)
                self.session = session
                self["key_red"] = StaticText(_("Close"))
-               self["key_grean"] = StaticText(_("Ok"))
+               self["key_green"] = StaticText(_("Ok"))
                self["ipaddress"] = StaticText(_("[ N/A ]"))
                self["netmask"] = StaticText(_("[ N/A ]"))              
                self["gateway"] = StaticText(_("[ N/A ]"))
@@ -335,7 +350,12 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                        "cancel": self.keyCancel,
                        "red": self.keyCancel,
                }, -2)
+               self["HelpWindow"] = Pixmap()
+               self["HelpWindow"].hide()
+               self["VKeyIcon"] = Pixmap()
+               self["VKeyIcon"].hide()
                self.iface = iface
+               self.essidSelected = essidSelected
                self.ssid = None
                self.ap_scan = None
                self.scan_ssid = None
@@ -344,18 +364,16 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                self.key_type = None
                self.encryption_key = None
                self.wlanscanap = None
-#              self.scanAPcount =5
-               self.scanAPcount =1
+               self.wpaphraseconsole = None
                self.list = []
                ConfigListScreen.__init__(self, self.list,session = self.session)
                self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
                self.readWpaSupplicantConf()
-               self.scanAPFailedTimer = eTimer()
-               self.scanAPFailedTimer.callback.append(self.scanAPFailed)
                self.scanAplistTimer = eTimer()
                self.scanAplistTimer.callback.append(self.scanApList)
+               self.emptyListMsgTimer = eTimer()
+               self.emptyListMsgTimer.callback.append(self.emptyListMsg)
                self.Console = Console()
-#              self.scanAplistTimer.start(100,True)
                self.updateInterfaces(self.readWlanSettings)
                self.onClose.append(self.cleanup)
 
@@ -424,8 +442,8 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                wlanconfig.keytype = ConfigSelection(default = default_tmp, choices = [
                        ("ascii", _("ASCII")), ("hex", _("HEX"))])
                default_tmp = self.encryption_key or "XXXXXXXX"
-               wlanconfig.key = ConfigText(default = default_tmp, visible_width = 50, fixed_size = False)
-               self.scanAplistTimer.start(100,True)
+               wlanconfig.key = ConfigPassword(default = default_tmp, visible_width = 50, fixed_size = False)
+               self.getApList()
 
        def readWpaSupplicantConf(self):
                try:
@@ -459,11 +477,14 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                                                elif data.startswith('psk="') and len(data) > 6:
                                                        self.key_type = 1 # ascii
                                                        self.encryption_key = data[5:-2]
-                                               elif data.startswith('psk=') and len(data) > 4:
+                                               elif data.startswith('#psk="') and len(data) > 6:
+                                                       self.key_type = 0 # hex
+                                                       self.encryption_key = data[6:-2]
+                                               elif not self.encryption_key and data.startswith('psk=') and len(data) > 4:
                                                        self.key_type = 0 # hex
                                                        self.encryption_key = data[4:-1]
                                                data = wpafd.readline()
-                                       print self.ssid,self.scan_ssid,self.key_mgmt,self.proto,self.key_type,self.encryption_key
+#                                      print self.ssid,self.scan_ssid,self.key_mgmt,self.proto,self.key_type,self.encryption_key
                                        wpafd.close()
                                else:
                                        print 'read error'
@@ -499,90 +520,78 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                                if wlanconfig.usegateway.value is "on":
                                        self.configList.append(self.gatewayEntry)
                        self.configList.append( self.essidEntry )
-#                      print "#### wlanconfig.essid.value : ",wlanconfig.essid.value
                        if wlanconfig.essid.value == 'Input hidden ESSID':
                                self.configList.append( self.hiddenessidEntry )
                        self.configList.append( self.encryptEntry )
                        if wlanconfig.encrypt.value is "on" :
                                self.configList.append( self.methodEntry )
-                               self.configList.append( self.keytypeEntry )
+                               if wlanconfig.method.value =="wep":
+                                       self.configList.append( self.keytypeEntry )
                                self.configList.append( self.keyEntry )
 
                self["config"].list = self.configList
                self["config"].l.setList(self.configList)
-#              if not self.selectionChanged in self["config"].onSelectionChanged:
-#                      self["config"].onSelectionChanged.append(self.selectionChanged)
+               if not self.showTextIcon in self["config"].onSelectionChanged:
+                       self["config"].onSelectionChanged.append(self.showTextIcon)
 
-       def scanApList(self):
-               self.apList = []
-               self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
-               cmd = "ifconfig "+self.iface+" up"
-               print 'cmd ',cmd
-               os_system(cmd)
-               self.wlanscanap = Console()
-               cmd = "iwlist "+self.iface+" scan"
-               print 'cmd ',cmd
-               self.wlanscanap.ePopen(cmd, self.apListFinnished,self.apListParse)
-
-       def apListFinnished(self, result, retval,extra_args):
-               (callback) = extra_args
-               if self.wlanscanap is not None:
-                       if retval == 0:
-                               self.wlanscanap = None
-                               content = result.splitlines()
-                               first = content[0].split()
-                               completed = False
-                               for x in first:
-                                       if x == 'completed':
-                                               completed = True
-                               if completed == True:
-                                       callback(result)
-                               else:
-                                       callback(0)
-                       else:
-                               callback(0)
-
-       def apListParse(self,data):
-               global selectap
-               if data == 0:
-                       if self.scanAPcount >0:
-                               self.scanAPcount -=1
-                               self.configurationmsg.close(True)
-                               time.sleep(3)
-                               self.scanAplistTimer.start(500,True)
-                               return
-                       else:
-                               self.configurationmsg.close(True)
-                               self.scanAPFailedTimer.start(500,True)
-                               return
+       def showTextIcon(self):
+               if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
+                       self["VKeyIcon"].show()
                else:
+                       self["VKeyIcon"].hide()
+
+       def getApList(self):
+               if self.essidSelected is None:
                        self.apList = []
-#                      self.scanAPcount =5
-                       self.scanAPcount =0
-                       list = data.splitlines()
-                       for x in list:
-                               xx = x.lstrip()
-                               if xx.startswith('ESSID:') and len(xx)>8 and xx[7:-1]not in self.apList:
-                                       self.apList.append(xx[7:-1])
-                       self.apList.append('Input hidden ESSID')
-#                      print "###### selectap : ",selectap
-                       if selectap is not None and selectap in self.apList:
-                               wlanconfig.essid = ConfigSelection(default=selectap,choices = self.apList)
-                       elif self.ap_scan is not None and self.ap_scan.strip() == '2':
-                               wlanconfig.essid = ConfigSelection(default='Input hidden ESSID',choices = self.apList)
-                       elif self.ssid is not None and self.ssid in self.apList:
-                               wlanconfig.essid = ConfigSelection(default=self.ssid,choices = self.apList)
-                       else:
-                               wlanconfig.essid = ConfigSelection(choices = self.apList)
+                       self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
+                       self.scanAplistTimer.start(100,True)
+               else:
+                       self.apList = [self.essidSelected]
+                       wlanconfig.essid = ConfigSelection(choices = self.apList)
                        if self.ssid is not None:
                                wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False)
                        else:
                                wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
+                       self.createConfig()
+
+       def scanApList(self):
+               if self.oldInterfaceState is not True:
+                       os_system("ifconfig "+self.iface+" up")
+                       iNetwork.setAdapterAttribute(self.iface, "up", True)
+               Iwscanresult  = None
+               wirelessObj = Wireless(self.iface)
+               try:
+                       Iwscanresult  = wirelessObj.scan()
+               except IOError:
+                       print "%s Interface doesn't support scanning.."%self.iface
+#                      self.session.open(MessageBox, "%s Interface doesn't support scanning.."%self.iface, MessageBox.TYPE_ERROR,10)
                self.configurationmsg.close(True)
+               if Iwscanresult is None:
+                       self.emptyListMsgTimer.start(100,True)
+               else:
+                       for ap in Iwscanresult:
+                               if ap.essid not in self.apList and len(ap.essid) > 0:
+                                       self.apList.append(ap.essid)
+               self.apList.append('Input hidden ESSID')
+               if selectap is not None and selectap in self.apList:
+                       wlanconfig.essid = ConfigSelection(default=selectap,choices = self.apList)
+               elif self.scan_ssid is not None and self.scan_ssid.strip() == '1':
+                       wlanconfig.essid = ConfigSelection(default='Input hidden ESSID',choices = self.apList)
+               elif self.ssid is not None and self.ssid in self.apList:
+                       wlanconfig.essid = ConfigSelection(default=self.ssid, choices = self.apList)
+               else:
+                       try:
+                               wlanconfig.essid = ConfigSelection(defalut = self.apList[0], choices = self.apList)
+                       except:
+                               wlanconfig.essid = ConfigSelection(choices = self.apList)
+               if self.ssid is not None:
+                       wlanconfig.hiddenessid = ConfigText(default = self.ssid, visible_width = 50, fixed_size = False)
+               else:
+                       wlanconfig.hiddenessid = ConfigText(default = "<Input ESSID>", visible_width = 50, fixed_size = False)
                self.createConfig()
 
-       def scanAPFailed(self):
-               self.session.openWithCallback(self.keyCancel ,MessageBox, _("Scan AP Failed"), MessageBox.TYPE_ERROR,10)
+       def emptyListMsg(self):
+               self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
 
        def keyLeft(self):
                ConfigListScreen.keyLeft(self)
@@ -595,22 +604,35 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
        def newConfig(self):
                if self["config"].getCurrent() == self.usedeviceEntry or self["config"].getCurrent() == self.encryptEntry \
                        or self["config"].getCurrent() == self.usedhcpEntry or self["config"].getCurrent() == self.usegatewayEntry \
-                       or self["config"].getCurrent() == self.essidEntry:
+                       or self["config"].getCurrent() == self.essidEntry or self["config"].getCurrent() == self.methodEntry:
                        self.createConfig()
 
        def saveWlanConfig(self):
-               if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
-                       self["config"].getCurrent()[1].onDeselect(self.session)
-               if self["config"].isChanged():
-                       self.session.openWithCallback(self.checkNetworkShares, MessageBox, (_("Are you sure you want to restart your network interfaces?\n") ) )
-               else:
-                       self.session.openWithCallback(self.checkNetworkShares, MessageBox, (_("Network configuration is not changed....\n\nAre you sure you want to restart your network interfaces?\n") ) )
+               try:
+                       if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
+                               self["config"].getCurrent()[1].onDeselect(self.session)
+                       if self["config"].isChanged():
+                               self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Are you sure you want to restart your network interfaces?\n") ) )
+                       else:
+                               self.session.openWithCallback(self.checkNetworkConfig, MessageBox, (_("Network configuration is not changed....\n\nAre you sure you want to restart your network interfaces?\n") ) )
+               except:
+                       pass
 
-       def checkNetworkShares(self,ret = False):
+       def checkNetworkConfig(self, ret = False):
                if ret == False:
                        if self["config"].getCurrent() == self.keyEntry or self["config"].getCurrent() == self.hiddenessidEntry :
                                self["config"].getCurrent()[1].onSelect(self.session)
                        return
+               if wlanconfig.essid.value == 'Input hidden ESSID':
+                       if len(wlanconfig.hiddenessid.value) == 0:
+                               self.session.open(MessageBox, ("PLEASE INPUT HIDDEN ESSID"), type = MessageBox.TYPE_ERROR, timeout = 10)
+                               return
+               if len(wlanconfig.key.value) == 0:
+                       self.session.open(MessageBox, ("PLEASE INPUT NETWORK KEY"), type = MessageBox.TYPE_ERROR, timeout = 10)
+                       return
+               self.checkNetworkShares()
+
+       def checkNetworkShares(self):
                if not self.Console:
                        self.Console = Console()
                cmd = "cat /proc/mounts"
@@ -618,7 +640,7 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
 
        def checkSharesFinished(self, result, retval, extra_args):
                callback = extra_args
-               print "checkMountsFinished : result : \n",result
+#              print "checkMountsFinished : result : \n",result
                networks = ['nfs','smbfs','ncp','coda']
                for line in result.splitlines():
                        split = line.strip().split(' ',3)
@@ -637,13 +659,13 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                        num_configured_if = len(iNetwork.getConfiguredAdapters())
                        if num_configured_if >= 1:
                                if num_configured_if == 1 and self.iface in iNetwork.getConfiguredAdapters():
-                                       self.writeWlanConfig(False)
+                                       self.getWpaPhrase(False)
                                else:
-                                       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)
+                                       self.session.openWithCallback(self.getWpaPhrase, MessageBox, _("A second configured interface has been found.\n\nDo you want to disable the second network interface?"), default = True)
                        else:
-                               self.writeWlanConfig(False)
+                               self.getWpaPhrase(False)
 
-       def writeWlanConfig(self,ret = False):
+       def getWpaPhrase(self,ret):
                if ret == True:
                        configuredInterfaces = iNetwork.getConfiguredAdapters()
                        for interface in configuredInterfaces:
@@ -651,12 +673,101 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                                        continue
                                iNetwork.setAdapterAttribute(interface, "up", False)
                                iNetwork.deactivateInterface(interface)
-               ret=self.writeWpasupplicantConf()
+               if wlanconfig.method.value =="wep":
+                       self.writeWpasupplicantConf("wep") # passphrasekey is not None
+               else:
+                       if wlanconfig.essid.value == 'Input hidden ESSID':
+                               cmd = "wpa_passphrase '%s' %s" % (wlanconfig.hiddenessid.value,wlanconfig.key.value)
+                       else :
+                               cmd = "wpa_passphrase '%s' %s" % (wlanconfig.essid.value,wlanconfig.key.value)
+                       print cmd
+                       self.wpaphraseconsole = Console()
+                       self.wpaphraseconsole.ePopen(cmd, self.parseWpaPhrase, self.writeWpasupplicantConf)
+
+       def parseWpaPhrase(self, result, retval, extra_args):
+               (writewlanconfig) = extra_args
+               if self.wpaphraseconsole is not None:
+                       if retval == 0:
+                               self.wpaphraseconsole.killAll()
+                               self.wpaphraseconsole = None
+#                              print "parseWpaPhrase result : "
+#                              print result
+                               psk = None
+                               for line in result.splitlines():
+                                       if line.find('ssid') == -1 and line.find('#psk=') != -1:
+                                               plainpwd        = line
+                                       elif line.find('psk=') != -1:
+                                               psk = line
+                               if psk:
+                                       writewlanconfig(psk,plainpwd)
+                               else:
+                                       writewlanconfig(None)
+                       else:
+                               writewlanconfig(None)
+
+       def writeWpasupplicantConf(self, passphrasekey=None,plainpwd=None):
+               if passphrasekey:
+                       wpafd = open("/etc/wpa_supplicant.conf","w")
+                       if wpafd > 0:
+                               contents = "#WPA Supplicant Configuration by STB\n"
+                               contents += "ctrl_interface=/var/run/wpa_supplicant\n"
+                               contents += "eapol_version=1\n"
+                               contents += "fast_reauth=1\n"
+                               contents += "ap_scan=1\n"
+                               contents += "network={\n"
+                               if wlanconfig.essid.value == 'Input hidden ESSID':
+                                       contents += "\tssid=\""+wlanconfig.hiddenessid.value+"\"\n"
+                                       contents += "\tscan_ssid=1\n"
+                               else :
+                                       contents += "\tssid=\""+wlanconfig.essid.value+"\"\n"
+                                       contents += "\tscan_ssid=0\n"
+                               if wlanconfig.encrypt.value == "on":
+                                       if wlanconfig.method.value =="wep":
+                                               contents += "\tkey_mgmt=NONE\n"
+                                               contents += "\twep_key0="
+                                               if wlanconfig.keytype.value == "ascii":
+                                                       contents += "\""+wlanconfig.key.value+"\"\n"
+                                               else:
+                                                       contents += wlanconfig.key.value+"\n"
+                                       else:
+#                                              print "plainpwd : ",plainpwd
+#                                              print "passphrasekey : ",passphrasekey
+                                               if wlanconfig.method.value == "wpa":
+                                                       contents += "\tkey_mgmt=WPA-PSK\n"
+                                                       contents += "\tproto=WPA\n"
+                                                       contents += "\tpairwise=CCMP TKIP\n"
+                                                       contents += "\tgroup=CCMP TKIP\n"       
+                                               elif wlanconfig.method.value == "wpa2":
+                                                       contents += "\tkey_mgmt=WPA-PSK\n"
+                                                       contents += "\tproto=RSN\n"
+                                                       contents += "\tpairwise=CCMP TKIP\n"
+                                                       contents += "\tgroup=CCMP TKIP\n"
+                                               else:
+                                                       contents += "\tkey_mgmt=WPA-PSK\n"
+                                                       contents += "\tproto=WPA RSN\n"
+                                                       contents += "\tpairwise=CCMP TKIP\n"
+                                                       contents += "\tgroup=CCMP TKIP\n"
+                                               contents += plainpwd+"\n"
+                                               contents += passphrasekey+"\n"
+                               else:
+                                       contents += "\tkey_mgmt=NONE\n"
+                               contents += "}\n"
+                               print "content = \n"+contents
+                               wpafd.write(contents)
+                               wpafd.close()
+                               self.writeNetConfig(0)
+                       else :
+                               self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
+                               self.writeNetConfig(-1)
+               else:
+                       self.writeNetConfig(-2)
+
+       def writeNetConfig(self,ret = -1):
                if ret == -1:
                        self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
                        return
                elif ret == -2:
-                       self.session.open(MessageBox, _("hidden ESSID empty"), type = MessageBox.TYPE_ERROR, timeout = 10)
+                       self.session.open(MessageBox, _("Can NOT generate passphrase"), type = MessageBox.TYPE_ERROR, timeout = 10)
                        return
 
                if wlanconfig.usedevice.value=="on":
@@ -680,63 +791,7 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                self.configurationmsg = None
                self.configurationmsg = self.session.openWithCallback(self.configFinished, MessageBox, _("Please wait for activation of your network configuration..."), type = MessageBox.TYPE_INFO, enable_input = False)
 
-       def writeWpasupplicantConf(self):
-               wpafd = open("/etc/wpa_supplicant.conf","w")
-               if wpafd > 0:
-                       contents = "#WPA Supplicant Configuration by STB\n"
-                       contents += "ctrl_interface=/var/run/wpa_supplicant\n"
-                       contents += "eapol_version=1\n"
-                       contents += "fast_reauth=1\n"
 
-                       if wlanconfig.essid.value == 'Input hidden ESSID':
-                               contents += "ap_scan=2\n"
-                       else :
-                               contents += "ap_scan=1\n"
-                       contents += "network={\n"
-                       if wlanconfig.essid.value == 'Input hidden ESSID':
-                               if len(wlanconfig.hiddenessid.value) == 0:
-                                       wpafd.close()
-                                       return -2
-                               contents += "\tssid=\""+wlanconfig.hiddenessid.value+"\"\n"
-                       else :
-                               contents += "\tssid=\""+wlanconfig.essid.value+"\"\n"
-                       contents += "\tscan_ssid=0\n"
-                       if wlanconfig.encrypt.value == "on":
-                               if wlanconfig.method.value =="wep":
-                                       contents += "\tkey_mgmt=NONE\n"
-                                       contents += "\twep_key0="
-                               elif wlanconfig.method.value == "wpa":
-                                       contents += "\tkey_mgmt=WPA-PSK\n"
-                                       contents += "\tproto=WPA\n"
-                                       contents += "\tpairwise=CCMP TKIP\n"
-                                       contents += "\tgroup=CCMP TKIP\n"
-                                       contents += "\tpsk="
-                               elif wlanconfig.method.value == "wpa2":
-                                       contents += "\tkey_mgmt=WPA-PSK\n"
-                                       contents += "\tproto=RSN\n"
-                                       contents += "\tpairwise=CCMP TKIP\n"
-                                       contents += "\tgroup=CCMP TKIP\n"
-                                       contents += "\tpsk="
-                               else:
-                                       contents += "\tkey_mgmt=WPA-PSK\n"
-                                       contents += "\tproto=WPA RSN\n"
-                                       contents += "\tpairwise=CCMP TKIP\n"
-                                       contents += "\tgroup=CCMP TKIP\n"
-                                       contents += "\tpsk="
-                               if wlanconfig.keytype.value == "ascii":
-                                       contents += "\""+wlanconfig.key.value+"\"\n"
-                               else:
-                                       contents += wlanconfig.key.value+"\n"
-                       else:
-                               contents += "\tkey_mgmt=NONE\n"
-                       contents += "}\n"
-                       print "content = \n"+contents
-                       wpafd.write(contents)
-                       wpafd.close()
-                       return 0
-               else :
-                       self.session.open(MessageBox, _("wpa_supplicant.conf open error."), type = MessageBox.TYPE_ERROR, timeout = 10)
-                       return -1
        def updateCurrentInterfaces(self,ret):
                if ret is True:
                        iNetwork.getInterfaces(self.configurationMsgClose)
@@ -796,6 +851,7 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                iNetwork.stopDeactivateInterfaceConsole()
                self.stopwlanscanapConsole()
                self.stopCheckNetworkSharesConsole()
+               self.stopWpaPhraseConsole()
 
        def stopwlanscanapConsole(self):
                if self.wlanscanap is not None:
@@ -809,42 +865,44 @@ class WlanConfig(Screen, ConfigListScreen, HelpableScreen):
                                for name in self.Console.appContainers.keys():
                                        self.Console.kill(name)
 
-class WlanScanAp(Screen,HelpableScreen):
-       skin = """
-       <screen name="WlanScanAp" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">
-               <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
-               <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
-               <eLabel text="Wireless Network AP Scan..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
-               <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
-               <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">
-                       <convert type="ClockToText">Format:%H:%M</convert>
-               </widget>
-               <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
-               <ePixmap pixmap="Vu_HD/buttons/green.png" position="240,98" size="25,25" alphatest="blend" />
-               <ePixmap pixmap="Vu_HD/buttons/blue.png" position="630,98" size="25,25" alphatest="blend" />
-               <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" />
-               <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" />
-               <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" />
-               <ePixmap pixmap="Vu_HD/border_menu.png" position="120,140" zPosition="-1" size="342,358" transparent="1" alphatest="blend" />
-               <widget name="menulist" position="130,150" size="322,338" transparent="1" backgroundColor="#27d9dee2" zPosition="10" scrollbarMode="showOnDemand" />
-               <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" />               
-               <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" />
-               <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" />      
-               <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" />     
-               <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" />        
-               <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" />
-       </screen>"""
+       def stopWpaPhraseConsole(self):
+               if self.wpaphraseconsole is not None:
+                       if len(self.wpaphraseconsole.appContainers):
+                                       for name in self.wpaphraseconsole.appContainers.keys():
+                                               self.wpaphraseconsole.kill(name)
 
+class WlanScanAp(Screen,HelpableScreen):
+       skin =  """
+               <screen position="center,center" size="510,400" title="Wireless Network AP Scan..." >
+                       <ePixmap pixmap="skin_default/div-h.png" position="0,350" zPosition="1" size="560,2" />
+                       <ePixmap pixmap="skin_default/border_menu.png" position="10,10" zPosition="1" size="250,300" transparent="1" alphatest="on" />
+
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="10,360" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/green.png" position="185,360" size="140,40" alphatest="on" />
+                       <ePixmap pixmap="skin_default/buttons/blue.png" position="360,360" size="140,40" alphatest="on" />
+
+                       <widget source="key_red" render="Label" position="10,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+                       <widget source="key_green" render="Label" position="185,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" foregroundColor="#ffffff" transparent="1" />
+                       <widget source="key_blue" render="Label" position="360,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" foregroundColor="#ffffff" transparent="1" />
+
+                       <widget name="menulist" position="20,20" size="230,260" backgroundColor="#371e1c1a" transparent="1" zPosition="10" scrollbarMode="showOnDemand" />
+
+                       <widget source="Address" render="Label" position="265,70" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
+                       <widget source="ESSID" render="Label" position="265,100" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
+                       <widget source="Protocol" render="Label" position="265,130" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
+                       <widget source="Frequency" render="Label" position="265,160" zPosition="1" size="240,40" font="Regular;18" halign="center" valign="center" />
+                       <widget source="Encryption key" render="Label" position="265,200" zPosition="1" size="240,30" font="Regular;18" halign="center" valign="center" />
+                       <widget source="BitRate" render="Label" position="265,220" zPosition="1" size="240,60" font="Regular;18" halign="center" valign="center" />
+               </screen>
+               """
        def __init__(self, session, iface):
                Screen.__init__(self,session)
                HelpableScreen.__init__(self)
                self.session = session
                self.iface = iface
                self.wlanscanap = None
-#              self.scanAPcount = 5
-               self.scanAPcount = 1
                self.apList = {}
-               self.SetApList = []
+               self.setApList = []
 
                self["WizardActions"] = HelpableActionMap(self, "WizardActions",
                {
@@ -852,7 +910,7 @@ class WlanScanAp(Screen,HelpableScreen):
                        "down": (self.down, _("move down to next entry")),
                        "left": (self.left, _("move up to first entry")),
                        "right": (self.right, _("move down to last entry")),
-               })
+               }, -2)
 
                self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions",
                {
@@ -864,21 +922,11 @@ class WlanScanAp(Screen,HelpableScreen):
                {
                        "red": (self.close, _("exit")),
                        "green": (self.ok, "select AP"),
+                       "yellow": (self.restartScanAP, "restart scan AP"),
                        "blue": (self.startWlanConfig, "Edit Wireless settings"),
                })
 
-               self["actions"] = NumberActionMap(["WizardActions","ShortcutActions"],
-               {
-                       "ok": self.ok,
-                       "back": self.close,
-                       "up": self.up,
-                       "down": self.down,
-                       "red": self.close,
-                       "left": self.left,
-                       "right": self.right,
-               }, -2)
-
-               self["menulist"] = MenuList(self.SetApList)
+               self["menulist"] = MenuList(self.setApList)
                self["key_red"] = StaticText(_("Close"))
                self["key_green"] = StaticText(_("Select"))
                self["key_blue"] = StaticText(_("EditSetting"))
@@ -888,12 +936,16 @@ class WlanScanAp(Screen,HelpableScreen):
                self["Frequency"] = StaticText(" ")
                self["Encryption key"] = StaticText(" ")
                self["BitRate"] = StaticText(" ")
-               self.scanAPFailedTimer = eTimer()
-               self.scanAPFailedTimer.callback.append(self.scanAPFailed)
+               self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
+               self.getAplistTimer = eTimer()
+               self.getAplistTimer.callback.append(self.getApList)
                self.scanAplistTimer = eTimer()
                self.scanAplistTimer.callback.append(self.scanApList)
-               self.scanAplistTimer.start(100,True)
-               self.onClose.append(self.cleanup)
+               self.emptyListMsgTimer = eTimer()
+               self.emptyListMsgTimer.callback.append(self.emptyListMsg)
+               self.apList = {}
+               self.onClose.append(self.__onClose)
+               self.getAplistTimer.start(100,True)
                
        def left(self):
                self["menulist"].pageUp()
@@ -918,111 +970,90 @@ class WlanScanAp(Screen,HelpableScreen):
                self.close()
 
        def startWlanConfig(self):
-               global selectap
                selectAp=self["menulist"].getCurrent()[0]
-               selectap = selectAp
-               self.cleanup()
-               self.session.open(WlanConfig,self.iface)
-#              self.close()
+               self.close(selectAp)
 
-       def scanApList(self):
-       #       print "self.scanAPcount : ",self.scanAPcount
+       def getApList(self):
                self.apList = {}
-               self.SetApList = []
+               self.setApList = []
                self.configurationmsg = self.session.open(MessageBox, _("Please wait for scanning AP..."), type = MessageBox.TYPE_INFO, enable_input = False)
-               os_system('ifconfig '+self.iface+" up")
-               self.wlanscanap = Console()
-               cmd = "iwlist "+self.iface+" scan"
-               print cmd
-               self.wlanscanap.ePopen(cmd, self.iwlistfinnished,self.APListParse)
-
-       def iwlistfinnished(self, result, retval,extra_args):
-#              print "iwlistfinnished"
-               (statecallback) = extra_args
-               if self.wlanscanap is not None:
-#                      print "retval = ",retval
-                       if retval == 0:
-                               self.wlanscanap = None
-                               content = result.splitlines()
-                               first = content[0].split()
-                               completed = False
-                               for x in first:
-                                       if x == 'completed':
-                                               completed = True
-                               if completed == True:
-                                       statecallback(result)
-                               else:
-                                       statecallback(0)
-                       else:
-                               statecallback(0)
+               self.scanAplistTimer.start(100,True)
 
-       def APListParse(self,data):
-               if data == 0:
-                       if self.scanAPcount >0:
-                               self.scanAPcount -=1
-                               self.configurationmsg.close(True)
-                               time.sleep(3)
-                               self.scanAplistTimer.start(500,True)
-                               return
-                       else:
-                               self.configurationmsg.close(True)
-                               self.scanAPFailedTimer.start(500,True)
-                               return
-               else:
-#                      print data
-                       self.apList = {}
-#                      self.scanAPcount =5
-                       self.scanAPcount =0
-                       list = data.splitlines()
-                       for line in list:
-#                              print "line : ",line
-                               if line.strip().startswith("Cell"): #  Cell 01 - Address: 00:26:66:5C:EF:24
-                                       parts = line.strip().split(" ")
-                                       current_ap_id = int(parts[1])
-                                       self.apList[current_ap_id]={}
-                                       self.apList[current_ap_id]["Address"]=parts[4]
-                               elif line.strip().startswith("ESSID"):
-                                       self.apList[current_ap_id]["ESSID"]=line.strip()[6:].strip('"')
-                                       self.SetApList.append( (self.apList[current_ap_id]["ESSID"],current_ap_id) )
-                               elif line.strip().startswith("Protocol"):
-                                       self.apList[current_ap_id]["Protocol"]=line.strip()[9:]
-                               elif line.strip().startswith("Frequency"):
-                                       self.apList[current_ap_id]["Frequency"]=line.strip()[10:]
-                               elif line.strip().startswith("Encryption key"):
-                                       self.apList[current_ap_id]["Encryption key"]=line.strip()[15:]
-                               elif line.strip().startswith("Bit Rates"):
-                                       self.apList[current_ap_id]["BitRate"]=line.strip()[10:]
-                       print self.apList
-                       print len(self.apList)
+       def scanApList(self):
+               if self.oldInterfaceState is not True:
+                       os_system("ifconfig "+self.iface+" up")
+                       iNetwork.setAdapterAttribute(self.iface, "up", True)
+               Iwscanresult  = None
+               wirelessObj = Wireless(self.iface)
+               try:
+                       Iwscanresult  = wirelessObj.scan()
+               except IOError:
+                       print "%s Interface doesn't support scanning.."%self.iface
+#                      self.session.open(MessageBox, "%s Interface doesn't support scanning.."%self.iface, MessageBox.TYPE_ERROR,10)
                self.configurationmsg.close(True)
+               if Iwscanresult is not None:
+                       (num_channels, frequencies) = wirelessObj.getChannelInfo()
+                       index = 1
+                       for ap in Iwscanresult:
+                               self.apList[index] = {}
+                               self.apList[index]["Address"] = ap.bssid
+                               if len(ap.essid) == 0:
+                                       self.apList[index]["ESSID"] = "<hidden ESSID>"
+                               else:
+                                       self.apList[index]["ESSID"] = ap.essid
+                                       self.setApList.append( (self.apList[index]["ESSID"], index) )
+                               self.apList[index]["Protocol"] = ap.protocol
+                               self.apList[index]["Frequency"] = wirelessObj._formatFrequency(ap.frequency.getFrequency())
+                               try:
+                                       self.apList[index]["Channel"] = frequencies.index(self.apList[index]["Frequency"] + 1)
+                               except:
+                                       self.apList[index]["Channel"] = "Unknown"
+
+                               self.apList[index]["Quality"] = "%s/%s" % \
+                                       ( ap.quality.quality, wirelessObj.getQualityMax().quality )
+                               self.apList[index]["Signal Level"] = "%s/%s" % \
+                                       ( ap.quality.getSignallevel(), "100" )
+                               self.apList[index]["Noise Level"] = "%s/%s" % \
+                                       ( ap.quality.getNoiselevel(), "100" )
+
+# get encryption key on/off
+                               key_status = "Unknown"
+                               if (ap.encode.flags & pythonwifi.flags.IW_ENCODE_DISABLED):
+                                       key_status = "off"
+                               elif (ap.encode.flags & pythonwifi.flags.IW_ENCODE_NOKEY):
+                                       if (ap.encode.length <= 0):
+                                               key_status = "on"
+                               self.apList[index]["Encryption key"] = key_status
+                               self.apList[index]["BitRate"] = wirelessObj._formatBitrate(ap.rate[-1][-1])
+                               index += 1
+#              print self.apList
+#              print self.setApList
                self.displayApInfo()
-
-       def scanAPFailed(self):
-               self.session.openWithCallback(self.ScanAPclose,MessageBox, _("Scan AP Failed"), MessageBox.TYPE_ERROR,10)
+               if len(self.apList) == 0:
+                       self.emptyListMsgTimer.start(100,True)
 
        def displayApInfo(self):
                if len(self.apList) >0:
-                       self["menulist"].setList(self.SetApList)
+                       self["menulist"].setList(self.setApList)
                        index = self["menulist"].getCurrent()[1]
                        for key in ["Address", "ESSID", "Protocol", "Frequency", "Encryption key", "BitRate"]:
                                if self.apList[index].has_key(key):
                                        self[key].setText((key+":  "+self.apList[index][key]))
                                else:
-                                       self[key].setText(("None"))
-               else:
-                       self.session.openWithCallback(self.ScanAPclose, MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
+                                       self[key].setText((key+": None"))
 
-       def ScanAPclose(self,data):
-               self.close()
+       def emptyListMsg(self):
+               self.session.open(MessageBox, _("No AP detected."), type = MessageBox.TYPE_INFO, timeout = 10)
+               self["Address"].setText(_("No AP detected."))
+               self["ESSID"].setText(_(""))
 
-       def cleanup(self):
-               self.stopwlanscanapConsole()
+       def restartScanAP(self):
+               self.getAplistTimer.start(100,True)
 
-       def stopwlanscanapConsole(self):
-               if self.wlanscanap is not None:
-                       if len(self.wlanscanap.appContainers):
-                               for name in self.wlanscanap.appContainers.keys():
-                                       self.wlanscanap.kill(name)
+       def __onClose(self):
+               if self.oldInterfaceState is False:
+                       iNetwork.setAdapterAttribute(self.iface, "up", False)
+                       iNetwork.deactivateInterface(self.iface)
 
 class NetworkAdapterTest(Screen):
        def __init__(self, session,iface):
@@ -1429,19 +1460,14 @@ class NetworkAdapterTest(Screen):
                callback(self.apState)
                
 class Wlanstatus(Screen):
-       skin = """
-       <screen name="Wlanstatus" position="209,48" size="865,623" title="Wireless Network Configuration..." flags="wfNoBorder" backgroundColor="transparent">
-               <ePixmap pixmap="Vu_HD/Bg_EPG_view.png" zPosition="-1" position="0,0" size="865,623" alphatest="on" />
-               <ePixmap pixmap="Vu_HD/menu/ico_title_Setup.png" position="32,41" size="40,40" alphatest="blend"  transparent="1" />
-               <eLabel text="Wireless Network Status..." position="90,50" size="600,32" font="Semiboldit;32" foregroundColor="#5d5d5d" backgroundColor="#27b5b9bd" transparent="1" />
-               <ePixmap pixmap="Vu_HD/icons/clock.png" position="750,55" zPosition="1" size="20,20" alphatest="blend" />
-               <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">
-                       <convert type="ClockToText">Format:%H:%M</convert>
-               </widget>
-               <ePixmap pixmap="Vu_HD/buttons/red.png" position="45,98" size="25,25" alphatest="blend" />
-               <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" />
-               <widget source="status" render="Label" position="110,200" size="650,400" transparent="1" font="Regular;20" foregroundColor="#1c1c1c" backgroundColor="#27d9dee2" zPosition="1" />
-       </screen>"""
+       skin =  """
+               <screen position="center,center" size="510,400" title="Wireless Network Status..." >
+                       <widget source="status" render="Label" position="5,15" size="500,350" font="Regular;18" zPosition="1" />
+
+                       <ePixmap pixmap="skin_default/buttons/red.png" position="185,360" size="140,40" alphatest="on" />
+                       <widget source="key_red" render="Label" position="185,360" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" foregroundColor="#ffffff" transparent="1" />
+               </screen>
+               """
        def __init__(self, session,iface):
                Screen.__init__(self,session)
                self.session = session