@ -11,6 +11,7 @@ from openpilot.selfdrive.car.interfaces import CarInterfaceBase 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  openpilot . selfdrive . car . disable_ecu  import  disable_ecu  
					 
					 
					 
					from  openpilot . selfdrive . car . disable_ecu  import  disable_ecu  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					Ecu  =  car . CarParams . Ecu  
					 
					 
					 
					Ecu  =  car . CarParams . Ecu  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					SafetyModel  =  car . CarParams . SafetyModel  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					ButtonType  =  car . CarState . ButtonEvent . Type  
					 
					 
					 
					ButtonType  =  car . CarState . ButtonEvent . Type  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					EventName  =  car . CarEvent . EventName  
					 
					 
					 
					EventName  =  car . CarEvent . EventName  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					ENABLE_BUTTONS  =  ( Buttons . RES_ACCEL ,  Buttons . SET_DECEL ,  Buttons . CANCEL )  
					 
					 
					 
					ENABLE_BUTTONS  =  ( Buttons . RES_ACCEL ,  Buttons . SET_DECEL ,  Buttons . CANCEL )  
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -18,6 +19,17 @@ BUTTONS_DICT = {Buttons.RES_ACCEL: ButtonType.accelCruise, Buttons.SET_DECEL: Bu 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                Buttons . GAP_DIST :  ButtonType . gapAdjustCruise ,  Buttons . CANCEL :  ButtonType . cancel }   
					 
					 
					 
					                Buttons . GAP_DIST :  ButtonType . gapAdjustCruise ,  Buttons . CANCEL :  ButtonType . cancel }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					def  set_safety_config_hyundai ( candidate ,  CAN ,  can_fd = False ) :  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  platform  =  SafetyModel . hyundaiCanfd  if  can_fd  else  \  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             SafetyModel . hyundaiLegacy  if  candidate  in  LEGACY_SAFETY_MODE_CAR  else  \  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             SafetyModel . hyundai   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  cfgs  =  [ get_safety_config ( platform ) ,  ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if  CAN . ECAN  > =  4 :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    cfgs . insert ( 0 ,  get_safety_config ( SafetyModel . noOutput ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  return  cfgs   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					class  CarInterface ( CarInterfaceBase ) :  
					 
					 
					 
					class  CarInterface ( CarInterfaceBase ) :  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  @staticmethod   
					 
					 
					 
					  @staticmethod   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  def  _get_params ( ret ,  candidate ,  fingerprint ,  car_fw ,  experimental_long ,  docs ) :   
					 
					 
					 
					  def  _get_params ( ret ,  candidate ,  fingerprint ,  car_fw ,  experimental_long ,  docs ) :   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -36,7 +48,6 @@ class CarInterface(CarInterfaceBase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  candidate  in  CANFD_CAR :   
					 
					 
					 
					    if  candidate  in  CANFD_CAR :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # detect HDA2 with ADAS Driving ECU   
					 
					 
					 
					      # detect HDA2 with ADAS Driving ECU   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  hda2 :   
					 
					 
					 
					      if  hda2 :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . flags  | =  HyundaiFlags . CANFD_HDA2 . value   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  0x110  in  fingerprint [ CAN . CAM ] :   
					 
					 
					 
					        if  0x110  in  fingerprint [ CAN . CAM ] :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ret . flags  | =  HyundaiFlags . CANFD_HDA2_ALT_STEERING . value   
					 
					 
					 
					          ret . flags  | =  HyundaiFlags . CANFD_HDA2_ALT_STEERING . value   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      else :   
					 
					 
					 
					      else :   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -286,30 +297,20 @@ class CarInterface(CarInterfaceBase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . enableBsm  =  0x58b  in  fingerprint [ 0 ]   
					 
					 
					 
					      ret . enableBsm  =  0x58b  in  fingerprint [ 0 ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # *** panda safety config ***   
					 
					 
					 
					    # *** panda safety config ***   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    ret . safetyConfigs  =  set_safety_config_hyundai ( candidate ,  CAN ,  can_fd = ( candidate  in  CANFD_CAR ) )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  hda2 :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      ret . flags  | =  HyundaiFlags . CANFD_HDA2 . value   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CANFD_HDA2   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  candidate  in  CANFD_CAR :   
					 
					 
					 
					    if  candidate  in  CANFD_CAR :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      cfgs  =  [ get_safety_config ( car . CarParams . SafetyModel . hyundaiCanfd ) ,  ]   
					 
					 
					 
					      if  hda2  and  ret . flags  &  HyundaiFlags . CANFD_HDA2_ALT_STEERING :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  CAN . ECAN  > =  4 :   
					 
					 
					 
					        ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        cfgs . insert ( 0 ,  get_safety_config ( car . CarParams . SafetyModel . noOutput ) )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . safetyConfigs  =  cfgs   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  ret . flags  &  HyundaiFlags . CANFD_HDA2 :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CANFD_HDA2   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        if  ret . flags  &  HyundaiFlags . CANFD_HDA2_ALT_STEERING :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					          ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      if  ret . flags  &  HyundaiFlags . CANFD_ALT_BUTTONS :   
					 
					 
					 
					      if  ret . flags  &  HyundaiFlags . CANFD_ALT_BUTTONS :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CANFD_ALT_BUTTONS   
					 
					 
					 
					        ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CANFD_ALT_BUTTONS   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  ret . flags  &  HyundaiFlags . CANFD_CAMERA_SCC :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CAMERA_SCC   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    else :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  candidate  in  LEGACY_SAFETY_MODE_CAR :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        # these cars require a special panda safety mode due to missing counters and checksums in the messages   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . safetyConfigs  =  [ get_safety_config ( car . CarParams . SafetyModel . hyundaiLegacy ) ]   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      else :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . safetyConfigs  =  [ get_safety_config ( car . CarParams . SafetyModel . hyundai ,  0 ) ]   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  candidate  in  CAMERA_SCC_CAR :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . safetyConfigs [ 0 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CAMERA_SCC   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ret . flags  &  HyundaiFlags . CANFD_CAMERA_SCC  or  candidate  in  CAMERA_SCC_CAR :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_CAMERA_SCC   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ret . openpilotLongitudinalControl :   
					 
					 
					 
					    if  ret . openpilotLongitudinalControl :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_LONG   
					 
					 
					 
					      ret . safetyConfigs [ - 1 ] . safetyParam  | =  Panda . FLAG_HYUNDAI_LONG   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  candidate  in  HYBRID_CAR :   
					 
					 
					 
					    if  candidate  in  HYBRID_CAR :