X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=wifiscanner%2Fwifimap%2Fwifiscan.py;h=f2a59bad0c2f2d555a1410a502d4ec1672e93bd9;hb=759aacbbfcca9659b56081eaf37dbeaf235a397f;hp=e5295fcf4b60956c811f2a7437027e734999507c;hpb=0a2ad7bf445e78c8f1d794099405f068ebacd1bc;p=wifihood diff --git a/wifiscanner/wifimap/wifiscan.py b/wifiscanner/wifimap/wifiscan.py index e5295fc..f2a59ba 100644 --- a/wifiscanner/wifimap/wifiscan.py +++ b/wifiscanner/wifimap/wifiscan.py @@ -1,83 +1,82 @@ -import osso +try : + import osso +except : + import hildongtk.osso as osso import time -import gps - import gobject import os -home_dir = "/home/user/MyDocs" -class Scanner ( gps.GPSObject ) : +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.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() + 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( os.path.join( home_dir , "wiscan_gui.info" ) , 'a' ) - fd.write( "%s %s%s\n" % ( time.time() , self.gps_info , out_str ) ) - fd.close() - if self.satellites : - loclist = open( os.path.join( home_dir , "location.info" ) , 'a' ) - loclist.write ( "%s\n" % ( self.satellites ,) ) - loclist.close() - if self.cell_info : - celllist = open( os.path.join( home_dir , "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 refresh_infowin ( self ) : - if self.status : - self.status.set_text( "%d gps\t%d scan\t%d fp\t%d ap" % ( self.ngps , self.nscan , self.nfp , len(self.aplist.keys()) ) ) - - -gobject.type_register(Scanner) + + def __str__ ( self ) : + output = map( lambda x : "%s %s" % x , self.scanlist.iteritems() ) + return " ".join( output ) + + def report ( self ) : + return "%d scan\t%d fp" % ( self.nscan , self.nfp ) + + +gobject.type_register(WifiScanner) + +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() + 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()