@ -4,10 +4,12 @@ import json 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  random  
					 
					 
					 
					import  random  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  unittest  
					 
					 
					 
					import  unittest  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  time  
					 
					 
					 
					import  time  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import  capnp  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  cffi  import  FFI  
					 
					 
					 
					from  cffi  import  FFI  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  cereal  import  log  
					 
					 
					 
					from  cereal  import  log  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  cereal . messaging  as  messaging  
					 
					 
					 
					import  cereal . messaging  as  messaging  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					from  cereal . services  import  service_list  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  common . params  import  Params  
					 
					 
					 
					from  common . params  import  Params  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  selfdrive . manager . process_config  import  managed_processes  
					 
					 
					 
					from  selfdrive . manager . process_config  import  managed_processes  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -103,13 +105,15 @@ void localizer_handle_msg_bytes(Localizer_t localizer, const char *data, size_t 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret  =  self . localizer_get_msg ( )   
					 
					 
					 
					    ret  =  self . localizer_get_msg ( )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . assertFalse ( ret . liveLocationKalman . posenetOK )   
					 
					 
					 
					    self . assertFalse ( ret . liveLocationKalman . posenetOK )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					class  TestLocationdProc ( unittest . TestCase ) :  
					 
					 
					 
					class  TestLocationdProc ( unittest . TestCase ) :  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  MAX_WAITS  =  1000   
					 
					 
					 
					  MAX_WAITS  =  1000   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  LLD_MSGS  =  { ' gpsLocationExternal ' ,  ' cameraOdometry ' ,  ' carState ' ,  ' sensorEvents ' ,  ' liveCalibration ' }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  def  setUp ( self ) :   
					 
					 
					 
					  def  setUp ( self ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    random . seed ( 123489234 )   
					 
					 
					 
					    random . seed ( 123489234 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . pm  =  messaging . PubMaster ( { ' gpsLocationExternal ' ,  ' cameraOdometry ' } )   
					 
					 
					 
					    self . pm  =  messaging . PubMaster ( self . LLD_MSGS )   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    managed_processes [ ' locationd ' ] . prepare ( )   
					 
					 
					 
					    managed_processes [ ' locationd ' ] . prepare ( )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    managed_processes [ ' locationd ' ] . start ( )   
					 
					 
					 
					    managed_processes [ ' locationd ' ] . start ( )   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -127,43 +131,53 @@ class TestLocationdProc(unittest.TestCase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      waits_left  - =  1   
					 
					 
					 
					      waits_left  - =  1   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    time . sleep ( 0.0001 )   
					 
					 
					 
					    time . sleep ( 0.0001 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  def  test_params_gps ( self ) :   
					 
					 
					 
					  def  get_fake_msg ( self ,  name ,  t ) :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    # first reset params   
					 
					 
					 
					    try :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    Params ( ) . put ( ' LastGPSPosition ' ,  json . dumps ( { " latitude " :  0.0 ,  " longitude " :  0.0 ,  " altitude " :  0.0 } ) )   
					 
					 
					 
					      msg  =  messaging . new_message ( name )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					    except  capnp . lib . capnp . KjException :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    lat  =  30  +  ( random . random ( )  *  10.0 )   
					 
					 
					 
					      msg  =  messaging . new_message ( name ,  0 )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    lon  =  - 70  +  ( random . random ( )  *  10.0 )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    alt  =  5  +  ( random . random ( )  *  10.0 )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    for  _  in  range ( 1000 ) :   # because of kalman filter, send often   
					 
					 
					 
					    if  name  ==  " gpsLocationExternal " :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg  =  messaging . new_message ( ' gpsLocationExternal ' )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . logMonoTime  =  0   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . flags  =  1   
					 
					 
					 
					      msg . gpsLocationExternal . flags  =  1   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . verticalAccuracy  =  1.0   
					 
					 
					 
					      msg . gpsLocationExternal . verticalAccuracy  =  1.0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . speedAccuracy  =  1.0   
					 
					 
					 
					      msg . gpsLocationExternal . speedAccuracy  =  1.0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . bearingAccuracyDeg  =  1.0   
					 
					 
					 
					      msg . gpsLocationExternal . bearingAccuracyDeg  =  1.0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . vNED  =  [ 0.0 ,  0.0 ,  0.0 ]   
					 
					 
					 
					      msg . gpsLocationExternal . vNED  =  [ 0.0 ,  0.0 ,  0.0 ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . latitude  =  lat   
					 
					 
					 
					      msg . gpsLocationExternal . latitude  =  self . lat   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . longitude  =  lon   
					 
					 
					 
					      msg . gpsLocationExternal . longitude  =  self . lon   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . gpsLocationExternal . altitude  =  alt   
					 
					 
					 
					      msg . gpsLocationExternal . altitude  =  self . alt   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . send_msg ( msg )   
					 
					 
					 
					    elif  name  ==  ' cameraOdometry ' :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    for  _  in  range ( 250 ) :   # params is only written so often   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg  =  messaging . new_message ( ' cameraOdometry ' )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . logMonoTime  =  0   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      msg . cameraOdometry . rot  =  [ 0.0 ,  0.0 ,  0.0 ]   
					 
					 
					 
					      msg . cameraOdometry . rot  =  [ 0.0 ,  0.0 ,  0.0 ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . cameraOdometry . rotStd  =  [ 0.0 ,  0.0 ,  0.0 ]   
					 
					 
					 
					      msg . cameraOdometry . rotStd  =  [ 0.0 ,  0.0 ,  0.0 ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . cameraOdometry . trans  =  [ 0.0 ,  0.0 ,  0.0 ]   
					 
					 
					 
					      msg . cameraOdometry . trans  =  [ 0.0 ,  0.0 ,  0.0 ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      msg . cameraOdometry . transStd  =  [ 0.0 ,  0.0 ,  0.0 ]   
					 
					 
					 
					      msg . cameraOdometry . transStd  =  [ 0.0 ,  0.0 ,  0.0 ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . send_msg ( msg )   
					 
					 
					 
					    msg . logMonoTime  =  t   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    return  msg   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  def  test_params_gps ( self ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # first reset params   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    Params ( ) . delete ( ' LastGPSPosition ' )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . lat  =  30  +  ( random . random ( )  *  10.0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . lon  =  - 70  +  ( random . random ( )  *  10.0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . alt  =  5  +  ( random . random ( )  *  10.0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . fake_duration  =  90   # secs   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    # get fake messages at the correct frequency, listed in services.py   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    fake_msgs  =  [ ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    for  sec  in  range ( self . fake_duration ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      for  name  in  self . LLD_MSGS :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        for  j  in  range ( int ( service_list [ name ] . frequency ) ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					          fake_msgs . append ( self . get_fake_msg ( name ,  int ( ( sec  +  j  /  service_list [ name ] . frequency )  *  1e9 ) ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    for  fake_msg  in  sorted ( fake_msgs ,  key = lambda  x :  x . logMonoTime ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      self . send_msg ( fake_msg )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    time . sleep ( 1 )   # wait for async params write   
					 
					 
					 
					    time . sleep ( 1 )   # wait for async params write   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    lastGPS  =  json . loads ( Params ( ) . get ( ' LastGPSPosition ' ) )   
					 
					 
					 
					    lastGPS  =  json . loads ( Params ( ) . get ( ' LastGPSPosition ' ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . assertAlmostEqual ( lastGPS [ ' latitude ' ] ,  lat ,  places = 3 )   
					 
					 
					 
					    self . assertAlmostEqual ( lastGPS [ ' latitude ' ] ,  self . lat ,  places = 3 )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . assertAlmostEqual ( lastGPS [ ' longitude ' ] ,  lon ,  places = 3 )   
					 
					 
					 
					    self . assertAlmostEqual ( lastGPS [ ' longitude ' ] ,  self . lon ,  places = 3 )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . assertAlmostEqual ( lastGPS [ ' altitude ' ] ,  alt ,  places = 3 )   
					 
					 
					 
					    self . assertAlmostEqual ( lastGPS [ ' altitude ' ] ,  self . alt ,  places = 3 )   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					if  __name__  ==  " __main__ " :  
					 
					 
					 
					if  __name__  ==  " __main__ " :