from Components.HTMLComponent import HTMLComponent
from Components.config import config, ConfigYesNo, ConfigIP, NoSave, ConfigSubsection, ConfigMAC, ConfigEnableDisable, ConfigText, ConfigSelection
+from types import *
+
import iwlibs
import os, string
config.plugins.wlan.encryption.psk = NoSave(ConfigText(default = "mysecurewlan", fixed_size = False))
class Wlan:
- def __init__(self):
+
+ def __init__(self, iface):
a = ''; b = ''
for i in range(0, 255):
else:
b = b + chr(i)
+ self.iface = iface
self.asciitrans = string.maketrans(a, b)
def asciify(self, str):
return str.translate(self.asciitrans)
+
def getWirelessInterfaces(self):
iwifaces = None
print "[Wlan.py] No Wireless Networkcards could be found"
return iwifaces
+
- def getNetworkList(self, iface):
+ def getNetworkList(self):
- ifobj = iwlibs.Wireless(iface) # a Wireless NIC Object
+ ifobj = iwlibs.Wireless(self.iface) # a Wireless NIC Object
print "ifobj.getStatistics(): ", ifobj.getStatistics()
#Association mappings
stats, quality, discard, missed_beacon = ifobj.getStatistics()
snr = quality.signallevel - quality.noiselevel
- os.system("ifconfig "+iface+" up")
+ os.system("ifconfig "+self.iface+" up")
try:
scanresults = ifobj.scan()
for element in result.custom:
element = element.encode()
extra.append( string.strip(self.asciify(element)) )
+
+ print result.quality.getSignallevel()
+
+ if result.quality.sl is 0:
+ begin = extra[0].find('SignalStrength=')+15
+
+ done = False
+ end = begin+1
+
+ while not done:
+ if extra[0][begin:end].isdigit():
+ end += 1
+ else:
+ done = True
+ end -= 1
+
+ signal = extra[0][begin:end]
+ print "[Wlan.py] signal is:" + str(signal)
+ else:
+ signal = str(result.quality.sl)
+
aps[bssid] = {
'active' : True,
'bssid': result.bssid,
- 'channel': result.frequency.getChannel(result.frequency.getFrequency(), result.range),
+ 'channel': result.frequency.getChannel(result.frequency.getFrequency()),
'encrypted': encryption,
'essid': string.strip(self.asciify(result.essid)),
- 'iface': iface,
+ 'iface': self.iface,
'maxrate' : result.rate[-1],
'noise' : result.quality.getNoiselevel(),
- 'quality' : result.quality.quality,
- 'signal' : result.quality.getSignallevel(),
+ 'quality' : str(result.quality.quality),
+ 'signal' : signal,
'custom' : extra,
}
-
+ print aps[bssid]
return aps
+
+
+ def getStatus(self):
+ ifobj = iwlibs.Wireless(self.iface)
+ fq = iwlibs.Iwfreq()
+
+ status = {
+ 'BSSID': str(ifobj.getAPaddr()),
+ 'ESSID': str(ifobj.getEssid()),
+ 'quality': str(ifobj.getStatistics()[1].quality),
+ 'signal': str(ifobj.getStatistics()[1].sl),
+ 'bitrate': str(ifobj.getBitrate()),
+ 'channel': str(fq.getChannel(str(ifobj.getFrequency()[0:-3]))),
+ }
+
+ for (key, item) in status.items():
+ if item is "None" or item is "":
+ status[key] = _("N/A")
+ return status
+
+
class WlanList(HTMLComponent, GUIComponent):
def __init__(self, session, iface):
GUIComponent.__init__(self)
- self.w = Wlan()
+ self.w = Wlan(iface)
self.iface = iface
self.length = 0
self.reload()
- def buildWlanListEntry(self, essid, bssid, encrypted, iface, maxrate):
+
+ def buildWlanListEntry(self, essid, bssid, encrypted, iface, maxrate, signal):
res = [ (essid, encrypted, iface) ]
essid = bssid
e = encrypted and _("Yes") or _("No")
- res.append( MultiContentEntryText(pos=(0, 0), size=(570, 35), font=0, flags=RT_HALIGN_LEFT, text=essid) )
+ res.append( MultiContentEntryText(pos=(0, 0), size=(470, 35), font=0, flags=RT_HALIGN_LEFT, text=essid) )
+ res.append( MultiContentEntryText(pos=(480, 0), size=(90, 35), font=0, flags=RT_HALIGN_RIGHT, text=signal+"%") )
res.append( MultiContentEntryText(pos=(0, 40), size=(180, 20), font=1, flags=RT_HALIGN_LEFT, text=_("Max. Bitrate: ")+maxrate) )
res.append( MultiContentEntryText(pos=(190, 40), size=(180, 20), font=1, flags=RT_HALIGN_CENTER, text=_("Encrypted: ")+e) )
res.append( MultiContentEntryText(pos=(380, 40), size=(190, 20), font=1, flags=RT_HALIGN_RIGHT, text=_("Interface: ")+iface) )
return res
+
def reload(self):
- aps = self.w.getNetworkList(self.iface)
+ aps = self.w.getNetworkList()
list = []
if aps is not None:
print "[Wlan.py] got Accespoints!"
for ap in aps:
a = aps[ap]
if a['active']:
- list.append((a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate']))
+ list.append( (a['essid'], a['bssid'], a['encrypted'], a['iface'], a['maxrate'], a['signal']) )
self.length = len(list)
self.l.setList([])
GUI_WIDGET = eListbox
+
def getCurrent(self):
return self.l.getCurrentSelection()
+
def postWidgetCreate(self, instance):
instance.setContent(self.l)
instance.setItemHeight(60)
+
def getLength(self):
return self.length
+
+
class wpaSupplicant:
def __init__(self):
pass
+
def writeConfig(self):
if split[1] == "WPA RSN" : split[1] = 'WPA2'
config.plugins.wlan.encryption.type.value = split[1]
print "[Wlan.py] Got Encryption "+split[1]
-
+
+ elif split[0] == 'wep_key0':
+ config.plugins.wlan.encryption.enabled.value = True
+ config.plugins.wlan.encryption.type.value = 'WEP'
+ config.plugins.wlan.encryption.psk.value = split[1][1:-1]
+ print "[Wlan.py] Got Encryption WEP key0 is: "+split[1][1:-1]
+
elif split[0] == 'psk':
config.plugins.wlan.encryption.psk.value = split[1][1:-1]
print "[Wlan.py] Got PSK "+split[1][1:-1]
except:
print "[Wlan.py] Error parsing /etc/wpa_supplicant.conf"
+
def restart(self, iface):
import os
os.system("start-stop-daemon -K -x /usr/sbin/wpa_supplicant")
+from enigma import eTimer
+
from Screens.Screen import Screen
from Screens.MessageBox import MessageBox
plugin_path = "/usr/lib/enigma2/python/Plugins/SystemPlugins/WirelessLan"
-class WlanSelection(Screen):
+class WlanSelectScreen(Screen):
+ skin = """
+ <screen position="185,238" size="350,100" title="Wireless Network Tools" >
+ <widget name="menu" position="10,10" size="330,80" scrollbarMode="showOnDemand" />
+ </screen>
+ """
+
+ def __init__(self, session, iface):
+ Screen.__init__(self, session)
+ self.session = session
+
+ self.skin = WlanSelectScreen.skin
+ self.skin_path = plugin_path
+
+ self.iface = iface
+
+ list = []
+ list.append(_("Scan for Wireless Networks"))
+ list.append(_("Show WLAN Status"))
+ list.append(_("Edit Wireless Settings"))
+
+
+ self["menu"] = MenuList(list)
+
+ self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"],
+ {
+ "ok": self.ok,
+ "back": self.exit,
+ }, -1)
+
+ def ok(self):
+ idx = self["menu"].getSelectedIndex()
+ if idx is 0:
+ self.session.openWithCallback(EntryChosen, WlanScan, self.iface)
+ print "[plugin.py:Wireless] Starting WlanScan"
+ elif idx is 1:
+ self.session.open(WlanStatus, self.iface)
+ print "[plugin.py:Wireless] Starting WlanStatus"
+
+ elif idx is 2:
+ self.session.open(WlanConfiguration, self.iface)
+ print "[plugin.py:Wireless] Starting Manual Configuration"
+
+ else:
+ print "[plugin.py:Wireless] Unkown Menupoint"
+
+ def exit(self):
+ self.close()
+
+
+class WlanStatus(Screen):
+ skin = """
+ <screen position="185,188" size="350,223" title="Wireless Network Status" >
+ <widget name="LabelBSSID" position="10,10" size="150,25" valign="left" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="LabelESSID" position="10,38" size="150,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="LabelQuality" position="10,66" size="150,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="LabelSignal" position="10,94" size="150,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="LabelBitrate" position="10,122" size="150,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="LabelChannel" position="10,150" size="150,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+
+ <widget name="BSSID" position="170,10" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="ESSID" position="170,38" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="quality" position="170,66" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="signal" position="170,94" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="bitrate" position="170,122" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="channel" position="170,150" size="180,25" valign="center" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ </screen>
+ """
+
+ def __init__(self, session, iface):
+
+ Screen.__init__(self, session)
+
+ self.session = session
+ self.iface = iface
+ self.skin = WlanStatus.skin
+
+ self.timer = eTimer()
+ self.timer.timeout.get().append(self.resetList)
+ self.onShown.append(lambda: self.timer.start(5000))
+
+ self["LabelBSSID"] = Label(_('Accesspoint:'))
+ self["LabelESSID"] = Label(_('SSID:'))
+ self["LabelQuality"] = Label(_('Link Quality:'))
+ self["LabelSignal"] = Label(_('Signal Strength:'))
+ self["LabelBitrate"] = Label(_('Bitrate:'))
+ self["LabelChannel"] = Label(_('Channel:'))
+
+ self["BSSID"] = Label()
+ self["ESSID"] = Label()
+ self["quality"] = Label()
+ self["signal"] = Label()
+ self["bitrate"] = Label()
+ self["channel"] = Label()
+
+ self.resetList()
+
+ self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"],
+ {
+ "ok": self.exit,
+ "back": self.exit,
+ }, -1)
+
+ def resetList(self):
+ w = Wlan(self.iface)
+ stats = w.getStatus()
+
+ self["BSSID"].setText(stats['BSSID'])
+ self["ESSID"].setText(stats['ESSID'])
+ self["quality"].setText(stats['quality']+"%")
+ self["signal"].setText(stats['signal']+"%")
+ self["bitrate"].setText(stats['bitrate'])
+ self["channel"].setText(stats['channel'])
+
+ def exit(self):
+ self.timer.stop()
+ self.close()
+
+class WlanScan(Screen):
skin = """
<screen position="70,138" size="610,300" title="Choose a Wireless Network" >
<widget name="info" position="10,10" size="580,30" font="Regular;24" transparent="1" foregroundColor="#FFFFFF" />
<widget name="list" position="10,60" size="580,200" scrollbarMode="showOnDemand" />
- <widget name="cancel" position="10,255" size="140,40" pixmap="~/key-red.png" zPosition="1" transparent="1" alphatest="on" />
- <widget name="select" position="160,255" size="140,40" pixmap="~/key-green.png" zPosition="1" transparent="1" alphatest="on" />
- <widget name="rescan" position="310,255" size="140,40" pixmap="~/key-yellow.png" zPosition="1" transparent="1" alphatest="on" />
- <widget name="skip" position="460,255" size="140,40" pixmap="~/key-blue.png" zPosition="1" transparent="1" alphatest="on" />
+ <widget name="cancel" position="80,255" size="140,40" pixmap="~/key-red.png" zPosition="1" transparent="1" alphatest="on" />
+ <widget name="select" position="230,255" size="140,40" pixmap="~/key-green.png" zPosition="1" transparent="1" alphatest="on" />
+ <widget name="rescan" position="380,255" size="140,40" pixmap="~/key-yellow.png" zPosition="1" transparent="1" alphatest="on" />
- <widget name="canceltext" position="10,255" size="140,40" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget name="selecttext" position="160,255" size="140,40" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget name="rescantext" position="310,255" size="140,40" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
- <widget name="skiptext" position="460,255" size="140,40" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="canceltext" position="80,255" size="140,40" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="selecttext" position="230,255" size="140,40" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
+ <widget name="rescantext" position="380,255" size="140,40" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" foregroundColor="#FFFFFF" />
</screen>
"""
def __init__(self, session, iface):
Screen.__init__(self, session)
self.session = session
- self.skin = WlanSelection.skin
+ self.skin = WlanScan.skin
self.skin_path = plugin_path
self["cancel"] = Pixmap()
self["select"] = Pixmap()
self["rescan"] = Pixmap()
- self["skip"] = Pixmap()
self.setInfo()
self["canceltext"] = Label(_("Cancel"))
- self["selecttext"] = Label(_("Select"))
- self["rescantext"] = Label(_("Rescan"))
+ self["selecttext"] = Label(_("OK"))
+ self["rescantext"] = Label(_("Refresh"))
self["skiptext"] = Label(_("Skip"))
self["actions"] = NumberActionMap(["WizardActions", "InputActions", "EPGSelectActions"],
"red": self.exit,
"green": self.select,
"yellow": self.rescan,
- "blue": self.skip,
})
def select(self):
self["list"].reload()
self.setInfo()
- def skip(self):
- self.close( (self.session, None) )
-
def exit(self):
self.close( (None ,) )
</screen>
"""
- def __init__(self, session, essid = None, encrypted = False, iface = "wlan0"):
+ def __init__(self, session, iface = "wlan0", essid = None, encrypted = False):
Screen.__init__(self, session)
self.skin = WlanConfiguration.skin
essid = val[0]
encrypted = val[2]
iface = val[3]
- session.open(WlanConfiguration, essid, encrypted, iface)
+ session.open(WlanConfiguration, iface, essid, encrypted)
else:
session.open(WlanConfiguration)
-def WlanSelectionMain(session, iface):
- session.openWithCallback(EntryChosen, WlanSelection, iface)
+def WlanSelectScreenMain(session, iface):
+ session.open(WlanSelectScreen, iface)
-def WlanConfigurationMain(session, **kwargs):
- session.open(WlanConfiguration)
+def WlanScanMain(session, iface):
+ session.openWithCallback(EntryChosen, WlanScan, iface)
def callFunction(iface):
- w = Wlan()
+ w = Wlan(iface)
i = w.getWirelessInterfaces()
if i:
if iface in i:
- return WlanSelectionMain
+ return WlanSelectScreenMain
return None