5 import hildongtk.osso as osso
16 class Scanner ( gps.GPSObject , wifiscan.WifiScanner ) :
18 def __init__ ( self , conf , ifname="wlan0" ) :
19 gps.GPSObject.__init__( self )
20 wifiscan.WifiScanner.__init__( self , ifname )
21 self.db = db.database( os.path.join( conf.homedir , conf.dbname ) )
22 self.homedir = conf.homedir
26 # Values to be set by wireless scans
33 def start ( self , timeout=5000 , writelog=False ) :
34 gps.GPSObject.start( self )
35 wifiscan.WifiScanner.start( self , timeout )
40 gps.GPSObject.stop( self )
41 wifiscan.WifiScanner.stop( self )
46 self.tstamp = time.time()
47 wifiscan.WifiScanner.scan( self )
50 for mac,rss in self.scanlist.iteritems() :
51 stored = self.db.db.execute( "SELECT rss, lat, lon FROM ap WHERE mac='%s'" % mac ).fetchone()
52 if not self.aps.has_key( mac ) :
54 self.aps[mac] = tuple(stored[1:])
57 self.db.add( mac , rss , self.tstamp , self.info[4:] )
58 self.aps[mac] = tuple(self.info[4:6])
62 self.oldpos[mac] = self.aps[mac][0] , self.aps[mac][1]
63 self.db.update( mac , rss , self.tstamp , self.info[4:] )
64 self.aps[mac] = tuple(self.info[4:6])
66 self.db.seen_update( mac , self.tstamp )
74 def write_logs ( self ) :
75 fd = open( os.path.join( self.homedir , "wiscan_gui.info" ) , 'a' )
76 fd.write( "%s %s\n" % ( self.tstamp , self ) )
79 loclist = open( os.path.join( self.homedir , "location.info" ) , 'a' )
80 loclist.write ( "%s\n" % ( self.satellites ,) )
83 celllist = open( os.path.join( self.homedir , "cell.info" ) , 'a' )
84 celllist.write ( "%s\n" % ( self.cells ,) )
87 def __str__ ( self ) :
88 return "%s %s" % ( gps.GPSObject.__str__(self) , wifiscan.WifiScanner.__str__(self) )
91 # BUG : if report is called after close, db.nrows() will produce an exception
92 return "%s\t%s\t%d ap\t%d total ap" % ( gps.GPSObject.report(self) , wifiscan.WifiScanner.report(self) , self.newap , self.db.nrows() )
95 gobject.type_register(Scanner)
97 if __name__ == "__main__" :
98 loop = gobject.MainLoop()
100 def on_stop(control, mainloop):
102 sample.control.connect("gpsd-stopped", on_stop, loop)
103 def show_scan(wifiscanner):
104 gobject.timeout_add( 5000 , show_scan , sample )
105 print "scan results %s" % wifiscanner.report()
106 print " tstamp %s" % wifiscanner.tstamp
108 for k,v in wifiscanner.scanlist.iteritems() :
110 print " %s %s" % ( k , v )
117 gobject.timeout_add( 5100 , show_scan , sample )