| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -13,8 +13,9 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    super().__init__(CP) | 
					 | 
					 | 
					 | 
					    super().__init__(CP) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    can_define = CANDefine(DBC[CP.carFingerprint]["pt"]) | 
					 | 
					 | 
					 | 
					    can_define = CANDefine(DBC[CP.carFingerprint]["pt"]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.shifter_values = can_define.dv["ECMPRDNL"]["PRNDL"] | 
					 | 
					 | 
					 | 
					    self.shifter_values = can_define.dv["ECMPRDNL"]["PRNDL"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    self.lka_steering_cmd_counter = 0 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def update(self, pt_cp): | 
					 | 
					 | 
					 | 
					  def update(self, pt_cp, loopback_cp): | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret = car.CarState.new_message() | 
					 | 
					 | 
					 | 
					    ret = car.CarState.new_message() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.prev_cruise_buttons = self.cruise_buttons | 
					 | 
					 | 
					 | 
					    self.prev_cruise_buttons = self.cruise_buttons | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -42,6 +43,7 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.steeringTorque = pt_cp.vl["PSCMStatus"]["LKADriverAppldTrq"] | 
					 | 
					 | 
					 | 
					    ret.steeringTorque = pt_cp.vl["PSCMStatus"]["LKADriverAppldTrq"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.steeringTorqueEps = pt_cp.vl["PSCMStatus"]["LKATorqueDelivered"] | 
					 | 
					 | 
					 | 
					    ret.steeringTorqueEps = pt_cp.vl["PSCMStatus"]["LKATorqueDelivered"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.steeringPressed = abs(ret.steeringTorque) > STEER_THRESHOLD | 
					 | 
					 | 
					 | 
					    ret.steeringPressed = abs(ret.steeringTorque) > STEER_THRESHOLD | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    self.lka_steering_cmd_counter = loopback_cp.vl["ASCMLKASteeringCmd"]["RollingCounter"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # 0 inactive, 1 active, 2 temporarily limited, 3 failed | 
					 | 
					 | 
					 | 
					    # 0 inactive, 1 active, 2 temporarily limited, 3 failed | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.lkas_status = pt_cp.vl["PSCMStatus"]["LKATorqueDeliveredStatus"] | 
					 | 
					 | 
					 | 
					    self.lkas_status = pt_cp.vl["PSCMStatus"]["LKATorqueDeliveredStatus"] | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -131,3 +133,15 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ] | 
					 | 
					 | 
					 | 
					      ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.POWERTRAIN) | 
					 | 
					 | 
					 | 
					    return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.POWERTRAIN) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  @staticmethod | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  def get_loopback_can_parser(CP): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    signals = [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      ("RollingCounter", "ASCMLKASteeringCmd", 0), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    checks = [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      ("ASCMLKASteeringCmd", 50), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, CanBus.LOOPBACK) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
  |