REFACTORING : move tstamp into real scanner object
[wifihood] / wifiscanner / wifimap / scanner.py
index b45346f..5d4e21a 100644 (file)
@@ -2,11 +2,11 @@
 try :
     import osso
 except :
-    import osso_wrapper as osso
+    import hildongtk.osso as osso
 
 import time
 
-import config , db
+import db
 import gps , wifiscan
 
 import gobject
@@ -15,19 +15,20 @@ import os
 
 class Scanner ( gps.GPSObject , wifiscan.WifiScanner ) :
 
-    def __init__ ( self , ifname="wlan0" ) :
+    def __init__ ( self , conf , ifname="wlan0" ) :
         gps.GPSObject.__init__( self )
         wifiscan.WifiScanner.__init__( self , ifname )
-        conf = config.Configuration( 'scanner' )
+        self.db = db.database( os.path.join( conf.homedir , conf.dbname ) )
         self.homedir = conf.homedir
-        self.db = db.database( os.path.join( self.homedir , conf.dbname ) )
 
         self.write = False
 
         # Values to be set by wireless scans
+        self.tstamp = 0
         self.newap = 0
         self.newaps = False
-        self.aps = []
+        self.aps = {}
+        self.oldpos = {}
 
     def start ( self , timeout=5000 , writelog=False ) :
         gps.GPSObject.start( self )
@@ -42,19 +43,28 @@ class Scanner ( gps.GPSObject , wifiscan.WifiScanner ) :
         self.write = False
 
     def scan ( self ) :
+        self.tstamp = time.time()
         wifiscan.WifiScanner.scan( self )
         newap = 0
         self.newaps = False
         for mac,max_rss in self.scanlist.iteritems() :
-            stored = self.db.db.execute( "SELECT rss, lat/n, lon/n FROM ap WHERE mac='%s'" % mac ).fetchone()
+            stored = self.db.db.execute( "SELECT rss, n, lat, lon FROM ap WHERE mac='%s'" % mac ).fetchone()
             if stored :
-                self.aps.append( stored[1:] )
+                if not self.aps.has_key( mac ) :
+                    self.aps[ mac ] = list(stored[1:])
                 if stored[0] > max_rss :
                     max_rss = stored[0]
                 self.db.update( mac , max_rss , self.tstamp , self.info[4:] )
             else :
                 newap += 1
+                if not self.aps.has_key( mac ) :
+                    self.aps[ mac ] = [ 0 , 0 , 0 ]
                 self.db.add( mac , max_rss , self.tstamp , self.info[4:] )
+            if self.aps[mac][0] != 0 :
+                self.oldpos[mac] = self.aps[mac][1] / self.aps[mac][0] , self.aps[mac][2] / self.aps[mac][0]
+            self.aps[mac][0] += 1
+            self.aps[mac][1] += self.info[4]
+            self.aps[mac][2] += self.info[5]
         if newap :
             self.newap += newap
             self.newaps = True
@@ -63,7 +73,7 @@ class Scanner ( gps.GPSObject , wifiscan.WifiScanner ) :
 
     def write_logs ( self ) :
             fd = open( os.path.join( self.homedir , "wiscan_gui.info" ) , 'a' )
-            fd.write( "%s %s %s\n" % ( self.tstamp , " ".join(self.info) , " ".join(self.scanlist) ) )
+            fd.write( "%s %s\n" % ( self.tstamp , self ) )
             fd.close()
             if self.satellites :
                 loclist = open( os.path.join( self.homedir , "location.info" ) , 'a' )
@@ -74,6 +84,9 @@ class Scanner ( gps.GPSObject , wifiscan.WifiScanner ) :
                 celllist.write ( "%s\n" % ( self.cells ,) )
                 celllist.close()
 
+    def __str__ ( self ) :
+        return "%s %s" % ( gps.GPSObject.__str__(self) , wifiscan.WifiScanner.__str__(self) )
+
     def report ( self ) :
         # BUG : if report is called after close, db.nrows() will produce an exception
         return "%s\t%s\t%d ap\t%d total ap" % ( gps.GPSObject.report(self) , wifiscan.WifiScanner.report(self) , self.newap , self.db.nrows() )