|  |  | @ -7,7 +7,7 @@ from tqdm import tqdm | 
			
		
	
		
		
			
				
					
					|  |  |  | os.environ['TESTING_CLOSET'] = '1' |  |  |  | os.environ['TESTING_CLOSET'] = '1' | 
			
		
	
		
		
			
				
					
					|  |  |  | os.environ['FILEREADER_CACHE'] = '1' |  |  |  | os.environ['FILEREADER_CACHE'] = '1' | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | from common.realtime import config_realtime_process, Ratekeeper |  |  |  | from common.realtime import config_realtime_process, Ratekeeper, DT_CTRL | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | from selfdrive.boardd.boardd import can_capnp_to_can_list |  |  |  | from selfdrive.boardd.boardd import can_capnp_to_can_list | 
			
		
	
		
		
			
				
					
					|  |  |  | from tools.lib.logreader import LogReader |  |  |  | from tools.lib.logreader import LogReader | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -27,6 +27,10 @@ for i in tqdm(list(range(1, NUM_SEGS+1))): | 
			
		
	
		
		
			
				
					
					|  |  |  |   lr = LogReader(log_url) |  |  |  |   lr = LogReader(log_url) | 
			
		
	
		
		
			
				
					
					|  |  |  |   CAN_MSGS += [can_capnp_to_can_list(m.can) for m in lr if m.which() == 'can'] |  |  |  |   CAN_MSGS += [can_capnp_to_can_list(m.can) for m in lr if m.which() == 'can'] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # set both to cycle ignition | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | IGN_ON = int(os.getenv("ON", "0")) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | IGN_OFF = int(os.getenv("OFF", "0")) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def send_thread(sender, core): |  |  |  | def send_thread(sender, core): | 
			
		
	
		
		
			
				
					
					|  |  |  |   config_realtime_process(core, 55) |  |  |  |   config_realtime_process(core, 55) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -41,9 +45,21 @@ def send_thread(sender, core): | 
			
		
	
		
		
			
				
					
					|  |  |  |     sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT) |  |  |  |     sender.set_safety_mode(Panda.SAFETY_ALLOUTPUT) | 
			
		
	
		
		
			
				
					
					|  |  |  |   sender.set_can_loopback(False) |  |  |  |   sender.set_can_loopback(False) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   ignition = None | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   if IGN_ON > 0 and IGN_OFF > 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     ignition = True | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     print(f"Cycling ignition: on for {IGN_ON}s, off for {IGN_OFF}s") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   log_idx = 0 |  |  |  |   log_idx = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |   rk = Ratekeeper(100) |  |  |  |   rk = Ratekeeper(1 / DT_CTRL, print_delay_threshold=None) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   while True: |  |  |  |   while True: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     # handle ignition cycling | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if ignition is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       ign = (rk.frame*DT_CTRL) % (IGN_ON + IGN_OFF) < IGN_ON | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       if ign != ignition: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         ignition = ign | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         sender.set_ignition(ignition) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     snd = CAN_MSGS[log_idx] |  |  |  |     snd = CAN_MSGS[log_idx] | 
			
		
	
		
		
			
				
					
					|  |  |  |     log_idx = (log_idx + 1) % len(CAN_MSGS) |  |  |  |     log_idx = (log_idx + 1) % len(CAN_MSGS) | 
			
		
	
		
		
			
				
					
					|  |  |  |     snd = list(filter(lambda x: x[-1] <= 2, snd)) |  |  |  |     snd = list(filter(lambda x: x[-1] <= 2, snd)) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |