|  |  |  | #!/usr/bin/env python3
 | 
					
						
							|  |  |  | import time
 | 
					
						
							|  |  |  | import cereal.messaging as messaging
 | 
					
						
							|  |  |  | from selfdrive.manager import start_managed_process, kill_managed_process
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | services = ['controlsState', 'thermal', 'radarState']  # the services needed to be spoofed to start ui offroad
 | 
					
						
							|  |  |  | procs = ['camerad', 'ui', 'modeld', 'calibrationd']
 | 
					
						
							|  |  |  | [start_managed_process(p) for p in procs]  # start needed processes
 | 
					
						
							|  |  |  | pm = messaging.PubMaster(services)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dat_cs, dat_thermal, dat_radar = [messaging.new_message(s) for s in services]
 | 
					
						
							|  |  |  | dat_cs.controlsState.rearViewCam = False  # ui checks for these two messages
 | 
					
						
							|  |  |  | dat_thermal.thermal.started = True
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | try:
 | 
					
						
							|  |  |  |   while True:
 | 
					
						
							|  |  |  |     pm.send('controlsState', dat_cs)
 | 
					
						
							|  |  |  |     pm.send('thermal', dat_thermal)
 | 
					
						
							|  |  |  |     pm.send('radarState', dat_radar)
 | 
					
						
							|  |  |  |     time.sleep(1 / 100)  # continually send, rate doesn't matter for thermal
 | 
					
						
							|  |  |  | except KeyboardInterrupt:
 | 
					
						
							|  |  |  |   [kill_managed_process(p) for p in procs]
 |