from enigma import eTimer
from Screens.Screen import Screen
from Components.ActionMap import ActionMap, NumberActionMap
from Components.Pixmap import Pixmap,MultiPixmap
from Components.Label import Label
from Components.Sources.StaticText import StaticText
from Components.MenuList import MenuList
from Components.config import config, getConfigListEntry, ConfigYesNo, NoSave, ConfigSubsection, ConfigText, ConfigSelection, ConfigPassword
from Components.ConfigList import ConfigListScreen
from Components.Network import Network, iNetwork
from Components.Console import Console
from Plugins.Plugin import PluginDescriptor
from os import system, path as os_path, listdir
from Wlan import Wlan, WlanList, wpaSupplicant
from Wlan import Status, iStatus
plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan"
list = []
list.append("WEP")
list.append("WPA")
list.append("WPA2")
list.append("WPA/WPA2")
weplist = []
weplist.append("ASCII")
weplist.append("HEX")
config.plugins.wlan = ConfigSubsection()
config.plugins.wlan.essid = NoSave(ConfigText(default = "home", fixed_size = False))
config.plugins.wlan.hiddenessid = NoSave(ConfigText(default = "home", fixed_size = False))
config.plugins.wlan.encryption = ConfigSubsection()
config.plugins.wlan.encryption.enabled = NoSave(ConfigYesNo(default = False))
config.plugins.wlan.encryption.type = NoSave(ConfigSelection(list, default = "WPA/WPA2" ))
config.plugins.wlan.encryption.wepkeytype = NoSave(ConfigSelection(weplist, default = "ASCII"))
config.plugins.wlan.encryption.psk = NoSave(ConfigPassword(default = "mysecurewlan", fixed_size = False))
class WlanStatus(Screen):
skin = """
"""
def __init__(self, session, iface):
Screen.__init__(self, session)
self.session = session
self.iface = iface
self.skin = WlanStatus.skin
self["LabelBSSID"] = StaticText(_('Accesspoint:'))
self["LabelESSID"] = StaticText(_('SSID:'))
self["LabelQuality"] = StaticText(_('Link Quality:'))
self["LabelSignal"] = StaticText(_('Signal Strength:'))
self["LabelBitrate"] = StaticText(_('Bitrate:'))
self["LabelEnc"] = StaticText(_('Encryption:'))
self["BSSID"] = StaticText()
self["ESSID"] = StaticText()
self["quality"] = StaticText()
self["signal"] = StaticText()
self["bitrate"] = StaticText()
self["enc"] = StaticText()
self["IFtext"] = StaticText()
self["IF"] = StaticText()
self["Statustext"] = StaticText()
self["statuspic"] = MultiPixmap()
self["statuspic"].hide()
self["key_red"] = StaticText(_("Close"))
self.resetList()
self.updateStatusbar()
self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions", "ShortcutActions"],
{
"ok": self.exit,
"back": self.exit,
"red": self.exit,
}, -1)
self.timer = eTimer()
self.timer.timeout.get().append(self.resetList)
self.onShown.append(lambda: self.timer.start(5000))
self.onLayoutFinish.append(self.layoutFinished)
self.onClose.append(self.cleanup)
def cleanup(self):
iStatus.stopWlanConsole()
def layoutFinished(self):
self.setTitle(_("Wireless Network State"))
def resetList(self):
print "self.iface im resetlist",self.iface
iStatus.getDataForInterface(self.iface,self.getInfoCB)
def getInfoCB(self,data,status):
if data is not None:
if data is True:
if status is not None:
self["BSSID"].setText(status[self.iface]["acesspoint"])
self["ESSID"].setText(status[self.iface]["essid"])
self["quality"].setText(status[self.iface]["quality"]+"%")
self["signal"].setText(status[self.iface]["signal"])
self["bitrate"].setText(status[self.iface]["bitrate"])
self["enc"].setText(status[self.iface]["encryption"])
self.updateStatusLink(status)
def exit(self):
self.timer.stop()
self.close()
def updateStatusbar(self):
print "self.iface im updateStatusbar",self.iface
self["BSSID"].setText(_("Please wait..."))
self["ESSID"].setText(_("Please wait..."))
self["quality"].setText(_("Please wait..."))
self["signal"].setText(_("Please wait..."))
self["bitrate"].setText(_("Please wait..."))
self["enc"].setText(_("Please wait..."))
self["IFtext"].setText(_("Network:"))
self["IF"].setText(iNetwork.getFriendlyAdapterName(self.iface))
self["Statustext"].setText(_("Link:"))
def updateStatusLink(self,status):
if status is not None:
if status[self.iface]["acesspoint"] == "No Connection" or status[self.iface]["acesspoint"] == "Not-Associated" or status[self.iface]["acesspoint"] == False:
self["statuspic"].setPixmapNum(1)
else:
self["statuspic"].setPixmapNum(0)
self["statuspic"].show()
class WlanScan(Screen):
skin = """
"""
def __init__(self, session, iface):
Screen.__init__(self, session)
self.session = session
self.iface = iface
self.skin = WlanScan.skin
self.skin_path = plugin_path
self.oldInterfaceState = iNetwork.getAdapterAttribute(self.iface, "up")
self["info"] = StaticText()
self.list = []
self["list"] = WlanList(self.session, self.iface)
self.setInfo()
self["key_red"] = StaticText(_("Close"))
self["key_green"] = StaticText(_("Connect"))
self["key_yellow"] = StaticText(_("Refresh"))
self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"],
{
"ok": self.select,
"back": self.cancel,
}, -1)
self["shortcuts"] = ActionMap(["ShortcutActions"],
{
"red": self.cancel,
"green": self.select,
"yellow": self.rescan,
})
self.onLayoutFinish.append(self.layoutFinished)
def layoutFinished(self):
self.setTitle(_("Choose a wireless network"))
def select(self):
cur = self["list"].getCurrent()
#print "CURRENT",cur
if cur is not None:
if cur[1] is not None:
essid = cur[0]
if essid == '':
essid = cur[1]
encrypted = cur[2]
self.close(essid,self["list"].getList())
else:
self.close(None,None)
else:
self.close(None,None)
def WlanSetupClosed(self, *ret):
if ret[0] == 2:
self.close(None)
def rescan(self):
self["list"].reload()
self.setInfo()
def cancel(self):
if self.oldInterfaceState is False:
iNetwork.deactivateInterface(self.iface,self.deactivateInterfaceCB)
else:
self.close(None)
def deactivateInterfaceCB(self,data):
if data is not None:
if data is True:
iNetwork.getInterfaces(self.cancelCB)
def cancelCB(self,data):
if data is not None:
if data is True:
self.close(None)
def setInfo(self):
length = self["list"].getLength()
if length == 0:
self["info"].setText(_("No wireless networks found! Please refresh."))
elif length == 1:
self["info"].setText(_("1 wireless network found!"))
else:
self["info"].setText(str(length)+_(" wireless networks found!"))
def WlanStatusScreenMain(session, iface):
session.open(WlanStatus, iface)
def callFunction(iface):
w = Wlan(iface)
i = w.getWirelessInterfaces()
if i:
if iface in i:
return WlanStatusScreenMain
return None
def configStrings(iface):
driver = iNetwork.detectWlanModule()
print "Found WLAN-Driver:",driver
if driver in ('ralink', 'zydas'):
return " pre-up /usr/sbin/wpa_supplicant -i"+iface+" -c/etc/wpa_supplicant.conf -B -D"+driver+"\n post-down wpa_cli terminate"
else:
if config.plugins.wlan.essid.value == "hidden...":
return ' pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.hiddenessid.value+'"\n pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n post-down wpa_cli terminate'
else:
return ' pre-up iwconfig '+iface+' essid "'+config.plugins.wlan.essid.value+'"\n pre-up /usr/sbin/wpa_supplicant -i'+iface+' -c/etc/wpa_supplicant.conf -B -dd -D'+driver+'\n post-down wpa_cli terminate'
def Plugins(**kwargs):
return PluginDescriptor(name=_("Wireless LAN"), description=_("Connect to a Wireless Network"), where = PluginDescriptor.WHERE_NETWORKSETUP, fnc={"ifaceSupported": callFunction, "configStrings": configStrings, "WlanPluginEntry": lambda x: "Wireless Network Configuartion..."})