|  |  |  | @ -244,14 +244,13 @@ void ui_update(UIState *s) { | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   // Handle controls timeout
 | 
			
		
	
		
			
				
					|  |  |  |  |   bool controls_timeout = ((s->sm)->frame - (s->sm)->rcv_frame("controlsState")) > 10*UI_FREQ; | 
			
		
	
		
			
				
					|  |  |  |  |   if (s->started && !s->scene.frontview && controls_timeout) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (s->started && !s->scene.frontview && ((s->sm)->frame - s->started_frame) > 5*UI_FREQ) { | 
			
		
	
		
			
				
					|  |  |  |  |     if ((s->sm)->rcv_frame("controlsState") < s->started_frame) { | 
			
		
	
		
			
				
					|  |  |  |  |       // car is started, but controlsState hasn't been seen at all
 | 
			
		
	
		
			
				
					|  |  |  |  |       s->scene.alert_text1 = "openpilot Unavailable"; | 
			
		
	
		
			
				
					|  |  |  |  |       s->scene.alert_text2 = "Waiting for controls to start"; | 
			
		
	
		
			
				
					|  |  |  |  |       s->scene.alert_size = cereal::ControlsState::AlertSize::MID; | 
			
		
	
		
			
				
					|  |  |  |  |     } else { | 
			
		
	
		
			
				
					|  |  |  |  |     } else if (((s->sm)->frame - (s->sm)->rcv_frame("controlsState")) > 5*UI_FREQ) { | 
			
		
	
		
			
				
					|  |  |  |  |       // car is started, but controls is lagging or died
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (s->scene.alert_text2 != "Controls Unresponsive") { | 
			
		
	
		
			
				
					|  |  |  |  |         s->sound->play(AudibleAlert::CHIME_WARNING_REPEAT); | 
			
		
	
	
		
			
				
					|  |  |  | 
 |