|  |  | @ -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) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |