| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -64,6 +64,7 @@ class CarInterfaceBase(ABC): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.frame = 0 | 
					 | 
					 | 
					 | 
					    self.frame = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.steering_unpressed = 0 | 
					 | 
					 | 
					 | 
					    self.steering_unpressed = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.low_speed_alert = False | 
					 | 
					 | 
					 | 
					    self.low_speed_alert = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    self.no_steer_warning = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.silent_steer_warning = True | 
					 | 
					 | 
					 | 
					    self.silent_steer_warning = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.v_ego_cluster_seen = False | 
					 | 
					 | 
					 | 
					    self.v_ego_cluster_seen = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -278,6 +279,11 @@ class CarInterfaceBase(ABC): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # Handle permanent and temporary steering faults | 
					 | 
					 | 
					 | 
					    # Handle permanent and temporary steering faults | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.steering_unpressed = 0 if cs_out.steeringPressed else self.steering_unpressed + 1 | 
					 | 
					 | 
					 | 
					    self.steering_unpressed = 0 if cs_out.steeringPressed else self.steering_unpressed + 1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if cs_out.steerFaultTemporary: | 
					 | 
					 | 
					 | 
					    if cs_out.steerFaultTemporary: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if cs_out.steeringPressed and (not self.CS.out.steerFaultTemporary or self.no_steer_warning): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        self.no_steer_warning = True | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        self.no_steer_warning = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        # if the user overrode recently, show a less harsh alert | 
					 | 
					 | 
					 | 
					        # if the user overrode recently, show a less harsh alert | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if self.silent_steer_warning or cs_out.standstill or self.steering_unpressed < int(1.5 / DT_CTRL): | 
					 | 
					 | 
					 | 
					        if self.silent_steer_warning or cs_out.standstill or self.steering_unpressed < int(1.5 / DT_CTRL): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          self.silent_steer_warning = True | 
					 | 
					 | 
					 | 
					          self.silent_steer_warning = True | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -285,6 +291,7 @@ class CarInterfaceBase(ABC): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        else: | 
					 | 
					 | 
					 | 
					        else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          events.add(EventName.steerTempUnavailable) | 
					 | 
					 | 
					 | 
					          events.add(EventName.steerTempUnavailable) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					    else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      self.no_steer_warning = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      self.silent_steer_warning = False | 
					 | 
					 | 
					 | 
					      self.silent_steer_warning = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if cs_out.steerFaultPermanent: | 
					 | 
					 | 
					 | 
					    if cs_out.steerFaultPermanent: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      events.add(EventName.steerUnavailable) | 
					 | 
					 | 
					 | 
					      events.add(EventName.steerUnavailable) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |