REFACTORING : move tstamp into real scanner object
[wifihood] / wifiscanner / wifimap / wifiscan.py
index e5295fc..f2a59ba 100644 (file)
@@ -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()