You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					78 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					78 lines
				
				2.0 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								import os
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from selfdrive.locationd.test.ublox import UBloxMessage
							 | 
						||
| 
								 | 
							
								from selfdrive.locationd.test.ubloxd import gen_solution, gen_raw, gen_nav_data
							 | 
						||
| 
								 | 
							
								from common import realtime
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def mkdirs_exists_ok(path):
							 | 
						||
| 
								 | 
							
								  try:
							 | 
						||
| 
								 | 
							
								    os.makedirs(path)
							 | 
						||
| 
								 | 
							
								  except OSError:
							 | 
						||
| 
								 | 
							
								    if not os.path.isdir(path):
							 | 
						||
| 
								 | 
							
								      raise
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def parser_test(fn, prefix):
							 | 
						||
| 
								 | 
							
								  nav_frame_buffer = {}
							 | 
						||
| 
								 | 
							
								  nav_frame_buffer[0] = {}
							 | 
						||
| 
								 | 
							
								  for i in range(1, 33):
							 | 
						||
| 
								 | 
							
								    nav_frame_buffer[0][i] = {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if not os.path.exists(prefix):
							 | 
						||
| 
								 | 
							
								    print('Prefix invalid')
							 | 
						||
| 
								 | 
							
								    sys.exit(-1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  with open(fn, 'rb') as f:
							 | 
						||
| 
								 | 
							
								    i = 0
							 | 
						||
| 
								 | 
							
								    saved_i = 0
							 | 
						||
| 
								 | 
							
								    msg = UBloxMessage()
							 | 
						||
| 
								 | 
							
								    while True:
							 | 
						||
| 
								 | 
							
								      n = msg.needed_bytes()
							 | 
						||
| 
								 | 
							
								      b = f.read(n)
							 | 
						||
| 
								 | 
							
								      if not b:
							 | 
						||
| 
								 | 
							
								        break
							 | 
						||
| 
								 | 
							
								      msg.add(b)
							 | 
						||
| 
								 | 
							
								      if msg.valid():
							 | 
						||
| 
								 | 
							
								        i += 1
							 | 
						||
| 
								 | 
							
								        if msg.name() == 'NAV_PVT':
							 | 
						||
| 
								 | 
							
								          sol = gen_solution(msg)
							 | 
						||
| 
								 | 
							
								          sol.logMonoTime = int(realtime.sec_since_boot() * 1e9)
							 | 
						||
| 
								 | 
							
								          with open(os.path.join(prefix, str(saved_i)), 'wb') as f1:
							 | 
						||
| 
								 | 
							
								            f1.write(sol.to_bytes())
							 | 
						||
| 
								 | 
							
								            saved_i += 1
							 | 
						||
| 
								 | 
							
								        elif msg.name() == 'RXM_RAW':
							 | 
						||
| 
								 | 
							
								          raw = gen_raw(msg)
							 | 
						||
| 
								 | 
							
								          raw.logMonoTime = int(realtime.sec_since_boot() * 1e9)
							 | 
						||
| 
								 | 
							
								          with open(os.path.join(prefix, str(saved_i)), 'wb') as f1:
							 | 
						||
| 
								 | 
							
								            f1.write(raw.to_bytes())
							 | 
						||
| 
								 | 
							
								            saved_i += 1
							 | 
						||
| 
								 | 
							
								        elif msg.name() == 'RXM_SFRBX':
							 | 
						||
| 
								 | 
							
								          nav = gen_nav_data(msg, nav_frame_buffer)
							 | 
						||
| 
								 | 
							
								          if nav is not None:
							 | 
						||
| 
								 | 
							
								            nav.logMonoTime = int(realtime.sec_since_boot() * 1e9)
							 | 
						||
| 
								 | 
							
								            with open(os.path.join(prefix, str(saved_i)), 'wb') as f1:
							 | 
						||
| 
								 | 
							
								              f1.write(nav.to_bytes())
							 | 
						||
| 
								 | 
							
								              saved_i += 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        msg = UBloxMessage()
							 | 
						||
| 
								 | 
							
								        msg.debug_level = 0
							 | 
						||
| 
								 | 
							
								    print('Parsed {} msgs'.format(i))
							 | 
						||
| 
								 | 
							
								    print('Generated {} cereal events'.format(saved_i))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == "__main__":
							 | 
						||
| 
								 | 
							
								  if len(sys.argv) < 3:
							 | 
						||
| 
								 | 
							
								    print('Format: ubloxd_py_test.py file_path prefix')
							 | 
						||
| 
								 | 
							
								    sys.exit(0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fn = sys.argv[1]
							 | 
						||
| 
								 | 
							
								  if not os.path.isfile(fn):
							 | 
						||
| 
								 | 
							
								    print('File path invalid')
							 | 
						||
| 
								 | 
							
								    sys.exit(0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  prefix = sys.argv[2]
							 | 
						||
| 
								 | 
							
								  mkdirs_exists_ok(prefix)
							 | 
						||
| 
								 | 
							
								  parser_test(fn, prefix)
							 |