|  |  | @ -17,11 +17,17 @@ def logging(started, params, CP: car.CarParams) -> bool: | 
			
		
	
		
		
			
				
					
					|  |  |  |   run = (not CP.notCar) or not params.get_bool("DisableLogging") |  |  |  |   run = (not CP.notCar) or not params.get_bool("DisableLogging") | 
			
		
	
		
		
			
				
					
					|  |  |  |   return started and run |  |  |  |   return started and run | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | def ublox_available() -> bool: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   return os.path.exists('/dev/ttyHS0') and not os.path.exists('/persist/comma/use-quectel-gps') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def ublox(started, params, CP: car.CarParams) -> bool: |  |  |  | def ublox(started, params, CP: car.CarParams) -> bool: | 
			
		
	
		
		
			
				
					
					|  |  |  |   use_ublox = os.path.exists('/dev/ttyHS0') and not os.path.exists('/persist/comma/use-quectel-gps') |  |  |  |   use_ublox = ublox_available() | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   params.put_bool("UbloxAvailable", use_ublox) |  |  |  |   params.put_bool("UbloxAvailable", use_ublox) | 
			
		
	
		
		
			
				
					
					|  |  |  |   return started and use_ublox |  |  |  |   return started and use_ublox | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | def qcomgps(started, params, CP: car.CarParams) -> bool: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   return started and not ublox_available() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | procs = [ |  |  |  | procs = [ | 
			
		
	
		
		
			
				
					
					|  |  |  |   # due to qualcomm kernel bugs SIGKILLing camerad sometimes causes page table corruption |  |  |  |   # due to qualcomm kernel bugs SIGKILLing camerad sometimes causes page table corruption | 
			
		
	
		
		
			
				
					
					|  |  |  |   NativeProcess("camerad", "system/camerad", ["./camerad"], unkillable=True, callback=driverview), |  |  |  |   NativeProcess("camerad", "system/camerad", ["./camerad"], unkillable=True, callback=driverview), | 
			
		
	
	
		
		
			
				
					|  |  | @ -50,7 +56,7 @@ procs = [ | 
			
		
	
		
		
			
				
					
					|  |  |  |   PythonProcess("deleter", "system.loggerd.deleter", offroad=True), |  |  |  |   PythonProcess("deleter", "system.loggerd.deleter", offroad=True), | 
			
		
	
		
		
			
				
					
					|  |  |  |   PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", enabled=(not PC or WEBCAM), callback=driverview), |  |  |  |   PythonProcess("dmonitoringd", "selfdrive.monitoring.dmonitoringd", enabled=(not PC or WEBCAM), callback=driverview), | 
			
		
	
		
		
			
				
					
					|  |  |  |   PythonProcess("laikad", "selfdrive.locationd.laikad"), |  |  |  |   PythonProcess("laikad", "selfdrive.locationd.laikad"), | 
			
		
	
		
		
			
				
					
					|  |  |  |   PythonProcess("rawgpsd", "system.sensord.rawgps.rawgpsd", enabled=TICI), |  |  |  |   PythonProcess("rawgpsd", "system.sensord.rawgps.rawgpsd", enabled=TICI, onroad=False, callback=qcomgps), | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   PythonProcess("navd", "selfdrive.navd.navd"), |  |  |  |   PythonProcess("navd", "selfdrive.navd.navd"), | 
			
		
	
		
		
			
				
					
					|  |  |  |   PythonProcess("pandad", "selfdrive.boardd.pandad", offroad=True), |  |  |  |   PythonProcess("pandad", "selfdrive.boardd.pandad", offroad=True), | 
			
		
	
		
		
			
				
					
					|  |  |  |   PythonProcess("paramsd", "selfdrive.locationd.paramsd"), |  |  |  |   PythonProcess("paramsd", "selfdrive.locationd.paramsd"), | 
			
		
	
	
		
		
			
				
					|  |  | 
 |