+
+discovered = {}
+
+
+def add_card ( mac , radio_hdr ) :
+ if not discovered.has_key( mac ) :
+ discovered[ mac ] = card( mac , radio_hdr['CHANNEL'] )
+ print "INFO : adding node %3d , %s" % ( len(discovered) , mac )
+
+
+def add_full_card ( mac , tipo , subtype , radio_hdr ) :
+ if not discovered.has_key( mac ) :
+ discovered[ mac ] = card( mac , radio_hdr['CHANNEL'] , tipo )
+ print "INFO : adding node %3d , %s" % ( len(discovered) , mac )
+ elif not discovered[ mac ].tipo :
+ discovered[ mac ].tipo = tipo
+ elif discovered[ mac ].tipo != tipo :
+ print "WARNING : AP/STA mismatch on %s for %s" % ( subtype , mac )
+
+
+class card :
+
+ def __init__ ( self , mac , channel=None , tipo=None ) :
+ self.mac = mac
+ self.fresh = True
+ self.tipo = tipo
+ self.channel = []
+ self.rssi = [ 0 , 0 , 0 , 0 , 0 ]
+ self.sta = []
+ if channel :
+ self.channel.append( "%s" % channel )
+
+ def add_rssi ( self , radio_hdr ) :
+ signal = int(radio_hdr['DBM_ANTSIGNAL'])
+ noise = int(radio_hdr['DBM_ANTNOISE'])
+ self.rssi[0] = self.rssi[0] + 1
+ self.rssi[1] = self.rssi[1] + signal
+ self.rssi[2] = self.rssi[2] + signal**2
+ self.rssi[3] = self.rssi[3] + noise
+ self.rssi[4] = self.rssi[4] + noise**2
+
+ def from_string ( self , str_list ) :
+ self.tipo = str_list.pop(0)
+ self.channel.extend( str_list.pop(0).split(",") )
+ self.rssi = map( int , str_list.pop(0).split(",") )
+ if str_list :
+ self.sta.extend( str_list.pop(0).split(",") )
+ self.fresh = False
+
+ def add_sta ( self , mac ) :
+ if mac not in self.sta :
+ self.sta.append( mac )
+
+ def __str__ ( self ) :
+ rssi_str = ",".join( map( str , self.rssi ) )
+ return "%s %s %s %s %s" % ( self.mac , self.tipo , ",".join( self.channel ) , rssi_str , ",".join( self.sta ) )
+