|  |  | @ -246,7 +246,7 @@ def no_gps_alert(CP: car.CarParams, sm: messaging.SubMaster, metric: bool, soft_ | 
			
		
	
		
		
			
				
					
					|  |  |  |   gps_integrated = sm['peripheralState'].pandaType in (log.PandaState.PandaType.uno, log.PandaState.PandaType.dos) |  |  |  |   gps_integrated = sm['peripheralState'].pandaType in (log.PandaState.PandaType.uno, log.PandaState.PandaType.dos) | 
			
		
	
		
		
			
				
					
					|  |  |  |   return Alert( |  |  |  |   return Alert( | 
			
		
	
		
		
			
				
					
					|  |  |  |     "Poor GPS reception", |  |  |  |     "Poor GPS reception", | 
			
		
	
		
		
			
				
					
					|  |  |  |     "If sky is visible, contact support" if gps_integrated else "Check GPS antenna placement", |  |  |  |     "Hardware malfunctioning if sky is visible" if gps_integrated else "Check GPS antenna placement", | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     AlertStatus.normal, AlertSize.mid, |  |  |  |     AlertStatus.normal, AlertSize.mid, | 
			
		
	
		
		
			
				
					
					|  |  |  |     Priority.LOWER, VisualAlert.none, AudibleAlert.none, .2, creation_delay=300.) |  |  |  |     Priority.LOWER, VisualAlert.none, AudibleAlert.none, .2, creation_delay=300.) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -495,24 +495,24 @@ EVENTS: Dict[int, Dict[str, Union[Alert, AlertCallbackType]]] = { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Thrown when the fan is driven at >50% but is not rotating |  |  |  |   # Thrown when the fan is driven at >50% but is not rotating | 
			
		
	
		
		
			
				
					
					|  |  |  |   EventName.fanMalfunction: { |  |  |  |   EventName.fanMalfunction: { | 
			
		
	
		
		
			
				
					
					|  |  |  |     ET.PERMANENT: NormalPermanentAlert("Fan Malfunction", "Contact Support"), |  |  |  |     ET.PERMANENT: NormalPermanentAlert("Fan Malfunction", "Hardware Malfunction"), | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   }, |  |  |  |   }, | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Camera is not outputting frames at a constant framerate |  |  |  |   # Camera is not outputting frames at a constant framerate | 
			
		
	
		
		
			
				
					
					|  |  |  |   EventName.cameraMalfunction: { |  |  |  |   EventName.cameraMalfunction: { | 
			
		
	
		
		
			
				
					
					|  |  |  |     ET.PERMANENT: NormalPermanentAlert("Camera Malfunction", "Contact Support"), |  |  |  |     ET.PERMANENT: NormalPermanentAlert("Camera Malfunction", "Hardware Malfunction"), | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   }, |  |  |  |   }, | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Unused |  |  |  |   # Unused | 
			
		
	
		
		
			
				
					
					|  |  |  |   EventName.gpsMalfunction: { |  |  |  |   EventName.gpsMalfunction: { | 
			
		
	
		
		
			
				
					
					|  |  |  |     ET.PERMANENT: NormalPermanentAlert("GPS Malfunction", "Contact Support"), |  |  |  |     ET.PERMANENT: NormalPermanentAlert("GPS Malfunction", "Hardware Malfunction"), | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   }, |  |  |  |   }, | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   # When the GPS position and localizer diverge the localizer is reset to the |  |  |  |   # When the GPS position and localizer diverge the localizer is reset to the | 
			
		
	
		
		
			
				
					
					|  |  |  |   # current GPS position. This alert is thrown when the localizer is reset |  |  |  |   # current GPS position. This alert is thrown when the localizer is reset | 
			
		
	
		
		
			
				
					
					|  |  |  |   # more often than expected. |  |  |  |   # more often than expected. | 
			
		
	
		
		
			
				
					
					|  |  |  |   EventName.localizerMalfunction: { |  |  |  |   EventName.localizerMalfunction: { | 
			
		
	
		
		
			
				
					
					|  |  |  |     # ET.PERMANENT: NormalPermanentAlert("Sensor Malfunction", "Contact Support"), |  |  |  |     # ET.PERMANENT: NormalPermanentAlert("Sensor Malfunction", "Hardware Malfunction"), | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   }, |  |  |  |   }, | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   # ********** events that affect controls state transitions ********** |  |  |  |   # ********** events that affect controls state transitions ********** | 
			
		
	
	
		
		
			
				
					|  |  | 
 |