# make sure to save config
# kill supplicant when done?
#DONE - ensure label is refreshed on different connect and disconnect stages.
+#
+# Adding a network involves:
+# add_network - returns $N
+# set_network $N ssid "Netid"
+# set_network $N key_mgmt WPA-PSK
+# set_network $N psk "Password"
+# enable_network $N
# Manage networks for the openmoko phoenux
# There are 4 devices (unless I add VPN support)
self.take_list(r)
elif self.pending == 'SCAN_RESULTS':
self.take_scan(r)
+ elif self.pending == 'ADD_NETWORK':
+ self.got_network(r)
self.pending = None
if len(self.to_send) > 0:
if p > 0:
id = mesg[p+3:].split()[0]
for ssid in self.netlist:
- if id == self.netlist[ssid]:
+ if id == self.netlist[ssid][0]:
self.ssid = ssid
+ self.request('LIST_NETWORKS')
self.set_label()
self.checker = gobject.timeout_add(30000, self.reassoc)
return self.restart_dhcp()
self.udhcpc_close()
self.set_label()
self.parent.update_active()
+ self.request('LIST_NETWORKS')
return
if mesg[:23] == 'CTRL-EVENT-SCAN-RESULTS':
self.request('SCAN_RESULTS')
for line in mesg.split('\n'):
if line != '' and line[0:7] != 'network':
l = line.split('\t')
- self.netlist[l[1]] = l[0]
- print 'netlist', self.netlist
+ # number name 'any' '[CURRENT]'-or-'[DISABLED]'
+ self.netlist[l[1]] = (int(l[0]),l[3])
self.fill_list()
def take_scan(self, mesg):
bb.set_homogeneous(True)
bb.set_size_request(-1, 80)
+ ls.connect('selected', self.select)
+
entry.modify_font(self.parent.fd)
- self.add_button(bb, 'Allow', self.allow)
- self.add_button(bb, 'Forget', self.forget)
- self.add_button(bb, 'Set Key', self.set_key)
+ self.enable_btn = self.add_button(bb, 'Enable', self.enable)
+ self.disable_btn = self.add_button(bb, 'Disable', self.disable)
+ self.set_key_btn = self.add_button(bb, 'Set Key', self.set_key)
+ self.forget_btn = self.add_button(bb, 'Forget', self.forget)
+ self.enable_btn.hide()
+ self.disable_btn.hide()
+ self.set_key_btn.hide()
+ self.forget_btn.hide()
self.add_button(bb, 'Done', self.done)
self.cfg = cfg
btn.show()
bb.pack_start(btn, expand = True)
btn.connect('clicked', cmd)
+ return btn
+
+ def selected_net(self):
+ net = self.net_ls.selected_str
+ if net == None:
+ return (None, None, None)
+ net = net[1:]
+ l=None
+ s=None
+ if net in self.netlist:
+ l = self.netlist[net]
+ if net in self.scanlist:
+ s = self.scanlist[net]
+ return (net, l,s)
+
+ def select(self, s, n):
+ net = self.selected_net()
+ if net[1]:
+ (num,st) = net[1]
+ if st == '[DISABLED]':
+ self.enable_btn.show()
+ self.disable_btn.hide()
+ self.set_key_btn.hide()
+ self.forget_btn.show()
+ else:
+ self.enable_btn.hide()
+ self.disable_btn.show()
+ self.set_key_btn.show()
+ self.forget_btn.hide()
+ else:
+ # don't know this one
+ self.enable_btn.show()
+ self.disable_btn.hide()
+ self.set_key_btn.show()
+ self.forget_btn.hide()
+
+ def create_network(self, ssid, sec, key):
+ if sec == '[ESS]':
+ self.settings = [('ssid "%s"' % ssid),
+ 'key_mgmt NONE',
+ ]
+ else:
+ self.settings = [('ssid "%s"' % ssid),
+ 'key_mgmt WPA-PSK',
+ ('psk "%s"' % key),
+ ]
+ self.request('ADD_NETWORK')
+ def got_network(self, r):
+ n = int(r)
+ for l in self.settings:
+ self.request('SET_NETWORK %d %s' % (n, l))
+ self.request('ENABLE_NETWORK %d' % n)
+ self.request('SAVE_CONFIG')
+ self.request('LIST_NETWORKS')
+ self.request('REASSOCIATE')
+
+ def enable(self, x):
+ net = self.selected_net()
+ if net[1]:
+ num = net[1][0]
+ self.request('ENABLE_NETWORK %d'% num)
+ self.request('SAVE_CONFIG')
+ self.request('LIST_NETWORKS')
+ return
+ if net[2]:
+ self.create_network(net[0],net[2][1],"xxxxxxxx")
+
+ def disable(self, x):
+ net = self.selected_net()
+ if net[1]:
+ num = net[1][0]
+ self.request('DISABLE_NETWORK %d'% num)
+ self.request('SAVE_CONFIG')
+ self.request('LIST_NETWORKS')
- def allow(self, x):
- self.net_ls.reconfig(self.net_ls,1)
- print 'alloc is', self.net_ls.get_allocation()
- pass
- def forget(self, x):
- pass
def set_key(self, x):
- pass
+ net = self.selected_net()
+ if net[1]:
+ self.request('SET_NETWORK %d psk "%s"' %
+ (net[1][0], self.key_entry.get_text()))
+ self.key_entry.set_text('')
+ self.request('SAVE_CONFIG')
+ self.request('REASSOCIATE')
+ elif net[2]:
+ self.create_network(net[0],net[2][1],self.key_entry.get_text())
+ self.key_entry.set_text('')
+
+ def forget(self, x):
+ net = self.selected_net()
+ if net[1]:
+ num = net[1][0]
+ self.request('REMOVE_NETWORK %d'% num)
+ self.request('SAVE_CONFIG')
+ self.request('LIST_NETWORKS')
+
def done(self, x):
self.configing = False
self.parent.deconfig()
def fill_list(self):
if not self.configing:
return
- l = [('none','green')]
+ l = []
for i in self.scanlist:
strength =self.scanlist[i][0]
sec = self.scanlist[i][1]
else:
t='?'
if i in self.netlist:
- l.append((t+i, 'blue'))
+ if self.netlist[i][1] == '[DISABLED]':
+ t='-'
+ if self.netlist[i][1] == '[CURRENT]':
+ l.append((t+i, 'magenta'))
+ else:
+ l.append((t+i, 'blue'))
else:
l.append((t+i, 'black'))
for i in self.netlist:
if i not in self.scanlist:
- l.append((i, 'red'))
- print 'filled list', l
+ l.append(('-'+i, 'red'))
+ if not l:
+ l = [('none','green')]
self.net_ls.list = l
self.net_ls.list_changed()
+ self.select(self.net_ls, self.net_ls.selected)
def config_hotspot(self):
self.rfkill('unblock')