| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -8,7 +8,7 @@ from opendbc.can.parser import CANParser | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from opendbc.can.can_define import CANDefine | 
					 | 
					 | 
					 | 
					from opendbc.can.can_define import CANDefine | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus | 
					 | 
					 | 
					 | 
					from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, CAR, DBC, CAN_GEARS, CAMERA_SCC_CAR, \ | 
					 | 
					 | 
					 | 
					from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, CAR, DBC, CAN_GEARS, CAMERA_SCC_CAR, \ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                                   CANFD_CAR, EV_CAR, HYBRID_CAR, Buttons, CarControllerParams | 
					 | 
					 | 
					 | 
					                                                   CANFD_CAR, Buttons, CarControllerParams | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from openpilot.selfdrive.car.interfaces import CarStateBase | 
					 | 
					 | 
					 | 
					from openpilot.selfdrive.car.interfaces import CarStateBase | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					PREV_BUTTON_SAMPLES = 8 | 
					 | 
					 | 
					 | 
					PREV_BUTTON_SAMPLES = 8 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -36,8 +36,8 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else:  # preferred and elect gear methods use same definition | 
					 | 
					 | 
					 | 
					    else:  # preferred and elect gear methods use same definition | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      self.shifter_values = can_define.dv["LVR12"]["CF_Lvr_Gear"] | 
					 | 
					 | 
					 | 
					      self.shifter_values = can_define.dv["LVR12"]["CF_Lvr_Gear"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.accelerator_msg_canfd = "ACCELERATOR" if CP.carFingerprint in EV_CAR else \ | 
					 | 
					 | 
					 | 
					    self.accelerator_msg_canfd = "ACCELERATOR" if CP.flags & HyundaiFlags.EV else \ | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                 "ACCELERATOR_ALT" if CP.carFingerprint in HYBRID_CAR else \ | 
					 | 
					 | 
					 | 
					                                 "ACCELERATOR_ALT" if CP.flags & HyundaiFlags.HYBRID else \ | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                 "ACCELERATOR_BRAKE_ALT" | 
					 | 
					 | 
					 | 
					                                 "ACCELERATOR_BRAKE_ALT" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.cruise_btns_msg_canfd = "CRUISE_BUTTONS_ALT" if CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS else \ | 
					 | 
					 | 
					 | 
					    self.cruise_btns_msg_canfd = "CRUISE_BUTTONS_ALT" if CP.flags & HyundaiFlags.CANFD_ALT_BUTTONS else \ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                 "CRUISE_BUTTONS" | 
					 | 
					 | 
					 | 
					                                 "CRUISE_BUTTONS" | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -120,8 +120,8 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.parkingBrake = cp.vl["TCS13"]["PBRAKE_ACT"] == 1 | 
					 | 
					 | 
					 | 
					    ret.parkingBrake = cp.vl["TCS13"]["PBRAKE_ACT"] == 1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.accFaulted = cp.vl["TCS13"]["ACCEnable"] != 0  # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED | 
					 | 
					 | 
					 | 
					    ret.accFaulted = cp.vl["TCS13"]["ACCEnable"] != 0  # 0 ACC CONTROL ENABLED, 1-3 ACC CONTROL DISABLED | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if self.CP.carFingerprint in (HYBRID_CAR | EV_CAR): | 
					 | 
					 | 
					 | 
					    if self.CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if self.CP.carFingerprint in HYBRID_CAR: | 
					 | 
					 | 
					 | 
					      if self.CP.flags & HyundaiFlags.HYBRID: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ret.gas = cp.vl["E_EMS11"]["CR_Vcu_AccPedDep_Pos"] / 254. | 
					 | 
					 | 
					 | 
					        ret.gas = cp.vl["E_EMS11"]["CR_Vcu_AccPedDep_Pos"] / 254. | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      else: | 
					 | 
					 | 
					 | 
					      else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ret.gas = cp.vl["E_EMS11"]["Accel_Pedal_Pos"] / 254. | 
					 | 
					 | 
					 | 
					        ret.gas = cp.vl["E_EMS11"]["Accel_Pedal_Pos"] / 254. | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -132,7 +132,7 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # Gear Selection via Cluster - For those Kia/Hyundai which are not fully discovered, we can use the Cluster Indicator for Gear Selection, | 
					 | 
					 | 
					 | 
					    # Gear Selection via Cluster - For those Kia/Hyundai which are not fully discovered, we can use the Cluster Indicator for Gear Selection, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # as this seems to be standard over all cars, but is not the preferred method. | 
					 | 
					 | 
					 | 
					    # as this seems to be standard over all cars, but is not the preferred method. | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if self.CP.carFingerprint in (HYBRID_CAR | EV_CAR): | 
					 | 
					 | 
					 | 
					    if self.CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      gear = cp.vl["ELECT_GEAR"]["Elect_Gear_Shifter"] | 
					 | 
					 | 
					 | 
					      gear = cp.vl["ELECT_GEAR"]["Elect_Gear_Shifter"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    elif self.CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: | 
					 | 
					 | 
					 | 
					    elif self.CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      gear = cp.vl["CLU15"]["CF_Clu_Gear"] | 
					 | 
					 | 
					 | 
					      gear = cp.vl["CLU15"]["CF_Clu_Gear"] | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -172,8 +172,8 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.is_metric = cp.vl["CRUISE_BUTTONS_ALT"]["DISTANCE_UNIT"] != 1 | 
					 | 
					 | 
					 | 
					    self.is_metric = cp.vl["CRUISE_BUTTONS_ALT"]["DISTANCE_UNIT"] != 1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    speed_factor = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS | 
					 | 
					 | 
					 | 
					    speed_factor = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if self.CP.carFingerprint in (EV_CAR | HYBRID_CAR): | 
					 | 
					 | 
					 | 
					    if self.CP.flags & (HyundaiFlags.EV | HyundaiFlags.HYBRID): | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      offset = 255. if self.CP.carFingerprint in EV_CAR else 1023. | 
					 | 
					 | 
					 | 
					      offset = 255. if self.CP.flags & HyundaiFlags.EV else 1023. | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ret.gas = cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL"] / offset | 
					 | 
					 | 
					 | 
					      ret.gas = cp.vl[self.accelerator_msg_canfd]["ACCELERATOR_PEDAL"] / offset | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ret.gasPressed = ret.gas > 1e-5 | 
					 | 
					 | 
					 | 
					      ret.gasPressed = ret.gas > 1e-5 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					    else: | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -233,7 +233,7 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # It limits the vehicle speed, overridable by pressing the accelerator past a certain point. | 
					 | 
					 | 
					 | 
					    # It limits the vehicle speed, overridable by pressing the accelerator past a certain point. | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # The car will brake, but does not respect positive acceleration commands in this mode | 
					 | 
					 | 
					 | 
					    # The car will brake, but does not respect positive acceleration commands in this mode | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # TODO: find this message on ICE & HYBRID cars + cruise control signals (if exists) | 
					 | 
					 | 
					 | 
					    # TODO: find this message on ICE & HYBRID cars + cruise control signals (if exists) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if self.CP.carFingerprint in EV_CAR: | 
					 | 
					 | 
					 | 
					    if self.CP.flags & HyundaiFlags.EV: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ret.cruiseState.nonAdaptive = cp.vl["MANUAL_SPEED_LIMIT_ASSIST"]["MSLA_ENABLED"] == 1 | 
					 | 
					 | 
					 | 
					      ret.cruiseState.nonAdaptive = cp.vl["MANUAL_SPEED_LIMIT_ASSIST"]["MSLA_ENABLED"] == 1 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.prev_cruise_buttons = self.cruise_buttons[-1] | 
					 | 
					 | 
					 | 
					    self.prev_cruise_buttons = self.cruise_buttons[-1] | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -278,7 +278,7 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if CP.enableBsm: | 
					 | 
					 | 
					 | 
					    if CP.enableBsm: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      messages.append(("LCA11", 50)) | 
					 | 
					 | 
					 | 
					      messages.append(("LCA11", 50)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if CP.carFingerprint in (HYBRID_CAR | EV_CAR): | 
					 | 
					 | 
					 | 
					    if CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      messages.append(("E_EMS11", 50)) | 
					 | 
					 | 
					 | 
					      messages.append(("E_EMS11", 50)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    else: | 
					 | 
					 | 
					 | 
					    else: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      messages += [ | 
					 | 
					 | 
					 | 
					      messages += [ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -286,7 +286,7 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ("EMS16", 100), | 
					 | 
					 | 
					 | 
					        ("EMS16", 100), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ] | 
					 | 
					 | 
					 | 
					      ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if CP.carFingerprint in (HYBRID_CAR | EV_CAR): | 
					 | 
					 | 
					 | 
					    if CP.flags & (HyundaiFlags.HYBRID | HyundaiFlags.EV): | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      messages.append(("ELECT_GEAR", 20)) | 
					 | 
					 | 
					 | 
					      messages.append(("ELECT_GEAR", 20)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    elif CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: | 
					 | 
					 | 
					 | 
					    elif CP.carFingerprint in CAN_GEARS["use_cluster_gears"]: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      pass | 
					 | 
					 | 
					 | 
					      pass | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -330,7 +330,7 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ("DOORS_SEATBELTS", 4), | 
					 | 
					 | 
					 | 
					      ("DOORS_SEATBELTS", 4), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ] | 
					 | 
					 | 
					 | 
					    ] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if CP.carFingerprint in EV_CAR: | 
					 | 
					 | 
					 | 
					    if CP.flags & HyundaiFlags.EV: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      messages += [ | 
					 | 
					 | 
					 | 
					      messages += [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ("MANUAL_SPEED_LIMIT_ASSIST", 10), | 
					 | 
					 | 
					 | 
					        ("MANUAL_SPEED_LIMIT_ASSIST", 10), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ] | 
					 | 
					 | 
					 | 
					      ] | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |