-import osso
+try :
+ import osso
+except :
+ import osso_wrapper as osso
import time
-import gps
-
import gobject
-class Scanner ( gps.GPSObject ) :
+import os
+
+class WifiScanner ( gobject.GObject ) :
- def __init__ ( self , widget=None , ifname="wlan0" ) :
- gps.GPSObject.__init__( self , widget )
+ def __init__ ( self , ifname="wlan0" ) :
+ gobject.GObject.__init__( self )
self.osso_context = osso.Context("wifi_scanner", "2.0", False)
osso_rpc = osso.Rpc(self.osso_context)
- scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "wakeup", wait_reply = True)
- self._timer = None
+ osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "wakeup", wait_reply = True)
+ self.scan_timeout = 0
+
+ # Values to be set by wireless scans
+ self.scanlist = {}
+ self.tstamp = 0
self.nscan = 0
self.nfp = 0
- self.scanlist = None
- self.aplist = {}
- def start ( self ) :
+ def start ( self , timeout=5000 ) :
osso_rpc = osso.Rpc(self.osso_context)
- scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "start")
+ osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "start")
+ self.scan_timeout = timeout
def stop ( self ) :
osso_rpc = osso.Rpc(self.osso_context)
- scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "stop")
+ osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "stop")
+ self.scan_timeout = 0
def scan ( self ) :
osso_rpc = osso.Rpc(self.osso_context)
try :
scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "scan", wait_reply = True)
+ if self.scan_timeout :
+ gobject.timeout_add( self.scan_timeout , self.scan )
+ # BUG : if scan is called after stop (maybe in other cases), 'ERROR' is returned and split raises exception
self.nscan +=1
+ self.scanlist.clear()
+ self.tstamp = time.time()
+ for net in scan_out.split() :
+ self.nfp += 1
+ items = net.rsplit(":", 1)
+ self.scanlist[ items[0] ] = int(items[1])
except Exception , ex :
osso.SystemNote(self.osso_context).system_note_infoprint("Exception scanning %s" % ex )
- return True
- out_str = ""
- if self.scanlist :
- start, end = self.scanlist.get_bounds()
- self.scanlist.delete( start , end )
- for net in scan_out.split() :
- self.nfp += 1
- items = net.rsplit(":", 1)
- out_str += " %s %s" % ( items[0] , items[1] )
- if self.scanlist :
- self.scanlist.insert_at_cursor( "%s %5d\n" % ( items[0] , int(items[1]) ) )
- self.aplist[ items[0] ] = 1
- self.refresh_infowin()
- if self._debug :
- # Use osso or hildon for notes ???
- osso.SystemNote(self.osso_context).system_note_infoprint("Found %d APs" % len(scan_out) )
- # hildon.hildon_banner_show_information( self._parent , "icon_path" , "Found %d APs" % len(scan_out) )
- else :
- fd = open( "/home/user/MyDocs/wiscan_gui.info" , 'a' )
- fd.write( "%s %s%s\n" % ( time.time() , self.gps_info , out_str ) )
- fd.close()
- if self.satellites :
- loclist = open( "/home/user/MyDocs/location.info" , 'a' )
- loclist.write ( "%s\n" % ( self.satellites ,) )
- loclist.close()
- if self.cell_info :
- celllist = open( "/home/user/MyDocs/cell.info" , 'a' )
- celllist.write ( "%s\n" % ( self.cell_info ,) )
- celllist.close()
-
- return True
- def set_infowin ( self , statuswin , listwin ) :
- gps.GPSObject.set_infowin( self , statuswin )
- self.scanlist = listwin
+ def report ( self ) :
+ return "%d scan\t%d fp" % ( self.nscan , self.nfp )
- def refresh_infowin ( self ) :
- if self.status :
- self.status.set_label( "%d gps\t%d scan\t%d fp\t%d ap" % ( self.ngps , self.nscan , self.nfp , len(self.aplist.keys()) ) )
+gobject.type_register(WifiScanner)
-gobject.type_register(Scanner)
+if __name__ == "__main__" :
+ loop = gobject.MainLoop()
+ sample = WifiScanner()
+ sample.start()
+ def show_scan(sample):
+ gobject.timeout_add( 5000 , show_scan , sample )
+ print "scan results : %s" % sample.report()
+ print " tstamp %s" % sample.tstamp
+ c = 0
+ for k,v in sample.scanlist.iteritems() :
+ c += 1
+ print " %s %s" % ( k , v )
+ if c > 5 :
+ print " ..."
+ break
+ print
+ sample.scan()
+ gobject.timeout_add( 5100 , show_scan , sample )
+ loop.run()
+ sample.stop()