| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -143,6 +143,7 @@ class Controls: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.logged_comm_issue = None | 
					 | 
					 | 
					 | 
					    self.logged_comm_issue = None | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.not_running_prev = None | 
					 | 
					 | 
					 | 
					    self.not_running_prev = None | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.steer_limited = False | 
					 | 
					 | 
					 | 
					    self.steer_limited = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    self.last_actuators = car.CarControl.Actuators.new_message() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.desired_curvature = 0.0 | 
					 | 
					 | 
					 | 
					    self.desired_curvature = 0.0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.experimental_mode = False | 
					 | 
					 | 
					 | 
					    self.experimental_mode = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.personality = self.read_personality_param() | 
					 | 
					 | 
					 | 
					    self.personality = self.read_personality_param() | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -620,7 +621,7 @@ class Controls: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        undershooting = abs(lac_log.desiredLateralAccel) / abs(1e-3 + lac_log.actualLateralAccel) > 1.2 | 
					 | 
					 | 
					 | 
					        undershooting = abs(lac_log.desiredLateralAccel) / abs(1e-3 + lac_log.actualLateralAccel) > 1.2 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        turning = abs(lac_log.desiredLateralAccel) > 1.0 | 
					 | 
					 | 
					 | 
					        turning = abs(lac_log.desiredLateralAccel) > 1.0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        good_speed = CS.vEgo > 5 | 
					 | 
					 | 
					 | 
					        good_speed = CS.vEgo > 5 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        max_torque = abs(actuators.steer) > 0.99 | 
					 | 
					 | 
					 | 
					        max_torque = abs(self.last_actuators.steer) > 0.99 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if undershooting and turning and good_speed and max_torque: | 
					 | 
					 | 
					 | 
					        if undershooting and turning and good_speed and max_torque: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          lac_log.active and self.events.add(EventName.steerSaturated) | 
					 | 
					 | 
					 | 
					          lac_log.active and self.events.add(EventName.steerSaturated) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      elif lac_log.saturated: | 
					 | 
					 | 
					 | 
					      elif lac_log.saturated: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -727,6 +728,7 @@ class Controls: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not self.CP.passive and self.initialized: | 
					 | 
					 | 
					 | 
					    if not self.CP.passive and self.initialized: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      self.card.controls_update(CC) | 
					 | 
					 | 
					 | 
					      self.card.controls_update(CC) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      self.last_actuators = CO.actuatorsOutput | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if self.CP.steerControlType == car.CarParams.SteerControlType.angle: | 
					 | 
					 | 
					 | 
					      if self.CP.steerControlType == car.CarParams.SteerControlType.angle: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        self.steer_limited = abs(CC.actuators.steeringAngleDeg - CO.actuatorsOutput.steeringAngleDeg) > \ | 
					 | 
					 | 
					 | 
					        self.steer_limited = abs(CC.actuators.steeringAngleDeg - CO.actuatorsOutput.steeringAngleDeg) > \ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                             STEER_ANGLE_SATURATION_THRESHOLD | 
					 | 
					 | 
					 | 
					                             STEER_ANGLE_SATURATION_THRESHOLD | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |