934e4ab88f22be75b2bf9f485fac74bb7abb9c11
[wifihood] / wifiscanner / wifimap / wifiscan.py
1
2 try :
3     import osso
4 except :
5     import hildongtk.osso as osso
6
7 import time
8
9 import gobject
10
11 import os
12
13 class WifiScanner ( gobject.GObject ) :
14
15     def __init__ ( self , ifname="wlan0" ) :
16         gobject.GObject.__init__( self )
17         self.osso_context = osso.Context("wifi_scanner", "2.0", False)
18         osso_rpc = osso.Rpc(self.osso_context)
19         osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "wakeup", wait_reply = True)
20         self.scan_timeout = 0
21
22         # Values to be set by wireless scans
23         self.scanlist = {}
24         self.tstamp = 0
25         self.nscan = 0
26         self.nfp = 0
27
28     def start ( self , timeout=5000 ) :
29         osso_rpc = osso.Rpc(self.osso_context)
30         osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "start")
31         self.scan_timeout = timeout
32
33     def stop ( self ) :
34         osso_rpc = osso.Rpc(self.osso_context)
35         osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "stop")
36         self.scan_timeout = 0
37
38     def scan ( self ) :
39         osso_rpc = osso.Rpc(self.osso_context)
40         try :
41             scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "scan", wait_reply = True)
42             if self.scan_timeout :
43                 gobject.timeout_add( self.scan_timeout , self.scan )
44             # BUG : if scan is called after stop (maybe in other cases), 'ERROR' is returned and split raises exception
45             self.nscan +=1
46             self.scanlist.clear()
47             self.tstamp = time.time()
48             for net in scan_out.split() :
49                 self.nfp += 1
50                 items = net.rsplit(":", 1)
51                 self.scanlist[ items[0] ] = int(items[1])
52         except Exception , ex :
53             osso.SystemNote(self.osso_context).system_note_infoprint("Exception scanning %s" % ex )
54
55     def __str__ ( self ) :
56         output = map( lambda x : "%s %s" % x , self.scanlist.iteritems() )
57         return " ".join( output )
58
59     def report ( self ) :
60         return "%d scan\t%d fp" % ( self.nscan , self.nfp )
61
62
63 gobject.type_register(WifiScanner)
64
65 if __name__ == "__main__" :
66     loop = gobject.MainLoop()
67     sample = WifiScanner()
68     sample.start()                                                        
69     def show_scan(sample):
70         gobject.timeout_add( 5000 , show_scan , sample )
71         print "scan results : %s" % sample.report()
72         print "  tstamp %s" % sample.tstamp
73         c = 0
74         for k,v in sample.scanlist.iteritems() :
75            c += 1
76            print "    %s %s" % ( k , v )
77            if c > 5 :
78                print "    ..."
79                break
80         print
81     sample.scan()                                                        
82     gobject.timeout_add( 5100 , show_scan , sample )
83     loop.run()                                       
84     sample.stop()                                 
85