@ -94,12 +94,11 @@ class CarState(CarStateBase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . cruiseState . available  =  cp . vl [ " PCM_CRUISE_2 " ] [ " MAIN_ON " ]  !=  0   
					 
					 
					 
					      ret . cruiseState . available  =  cp . vl [ " PCM_CRUISE_2 " ] [ " MAIN_ON " ]  !=  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . cruiseState . speed  =  cp . vl [ " PCM_CRUISE_2 " ] [ " SET_SPEED " ]  *  CV . KPH_TO_MS   
					 
					 
					 
					      ret . cruiseState . speed  =  cp . vl [ " PCM_CRUISE_2 " ] [ " SET_SPEED " ]  *  CV . KPH_TO_MS   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  self . CP . carFingerprint  in  RADAR_ACC_CAR :   
					 
					 
					 
					    cp_acc  =  cp_cam  if  self . CP . carFingerprint  in  ( TSS2_CAR  -  RADAR_ACC_CAR )  else  cp   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . acc_type  =  cp . vl [ " ACC_CONTROL " ] [ " ACC_TYPE " ]   
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . stockFcw  =  bool ( cp . vl [ " ACC_HUD " ] [ " FCW " ] )   
					 
					 
					 
					    if  self . CP . carFingerprint  in  ( TSS2_CAR  |  RADAR_ACC_CAR ) :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    elif  self . CP . carFingerprint  in  TSS2_CAR :   
					 
					 
					 
					      self . acc_type  =  cp_acc . vl [ " ACC_CONTROL " ] [ " ACC_TYPE " ]   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . acc_type  =  cp_cam . vl [ " ACC_CONTROL " ] [ " ACC_TYPE " ]   
					 
					 
					 
					      ret . stockFcw  =  bool ( cp_acc . vl [ " ACC_HUD " ] [ " FCW " ] )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . stockFcw  =  bool ( cp_cam . vl [ " ACC_HUD " ] [ " FCW " ] )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # some TSS2 cars have low speed lockout permanently set, so ignore on those cars   
					 
					 
					 
					    # some TSS2 cars have low speed lockout permanently set, so ignore on those cars   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    # these cars are identified by an ACC_TYPE value of 2.   
					 
					 
					 
					    # these cars are identified by an ACC_TYPE value of 2.   
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -120,10 +119,11 @@ class CarState(CarStateBase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . cruiseState . nonAdaptive  =  cp . vl [ " PCM_CRUISE " ] [ " CRUISE_STATE " ]  in  ( 1 ,  2 ,  3 ,  4 ,  5 ,  6 )   
					 
					 
					 
					    ret . cruiseState . nonAdaptive  =  cp . vl [ " PCM_CRUISE " ] [ " CRUISE_STATE " ]  in  ( 1 ,  2 ,  3 ,  4 ,  5 ,  6 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . genericToggle  =  bool ( cp . vl [ " LIGHT_STALK " ] [ " AUTO_HIGH_BEAM " ] )   
					 
					 
					 
					    ret . genericToggle  =  bool ( cp . vl [ " LIGHT_STALK " ] [ " AUTO_HIGH_BEAM " ] )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . stockAeb  =  bool ( cp_cam . vl [ " PRE_COLLISION " ] [ " PRECOLLISION_ACTIVE " ]  and  cp_cam . vl [ " PRE_COLLISION " ] [ " FORCE " ]  <  - 1e-5 )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . espDisabled  =  cp . vl [ " ESP_CONTROL " ] [ " TC_DISABLED " ]  !=  0   
					 
					 
					 
					    ret . espDisabled  =  cp . vl [ " ESP_CONTROL " ] [ " TC_DISABLED " ]  !=  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  not  self . CP . enableDsu :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      ret . stockAeb  =  bool ( cp_acc . vl [ " PRE_COLLISION " ] [ " PRECOLLISION_ACTIVE " ]  and  cp_acc . vl [ " PRE_COLLISION " ] [ " FORCE " ]  <  - 1e-5 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  self . CP . enableBsm :   
					 
					 
					 
					    if  self . CP . enableBsm :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . leftBlindspot  =  ( cp . vl [ " BSM " ] [ " L_ADJACENT " ]  ==  1 )  or  ( cp . vl [ " BSM " ] [ " L_APPROACHING " ]  ==  1 )   
					 
					 
					 
					      ret . leftBlindspot  =  ( cp . vl [ " BSM " ] [ " L_ADJACENT " ]  ==  1 )  or  ( cp . vl [ " BSM " ] [ " L_APPROACHING " ]  ==  1 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . rightBlindspot  =  ( cp . vl [ " BSM " ] [ " R_ADJACENT " ]  ==  1 )  or  ( cp . vl [ " BSM " ] [ " R_APPROACHING " ]  ==  1 )   
					 
					 
					 
					      ret . rightBlindspot  =  ( cp . vl [ " BSM " ] [ " R_ADJACENT " ]  ==  1 )  or  ( cp . vl [ " BSM " ] [ " R_APPROACHING " ]  ==  1 )   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -219,25 +219,31 @@ class CarState(CarStateBase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ( " ACC_HUD " ,  1 ) ,   
					 
					 
					 
					        ( " ACC_HUD " ,  1 ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ]   
					 
					 
					 
					      ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    return  CANParser ( DBC [ CP . carFingerprint ] [ " pt " ] ,  signals ,  checks ,  0 )   
					 
					 
					 
					    if  CP . carFingerprint  not  in  ( TSS2_CAR  -  RADAR_ACC_CAR )  and  not  CP . enableDsu :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					      signals  + =  [   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  @staticmethod   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  def  get_cam_can_parser ( CP ) :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    signals  =  [   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					        ( " FORCE " ,  " PRE_COLLISION " ) ,   
					 
					 
					 
					        ( " FORCE " ,  " PRE_COLLISION " ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ( " PRECOLLISION_ACTIVE " ,  " PRE_COLLISION " ) ,   
					 
					 
					 
					        ( " PRECOLLISION_ACTIVE " ,  " PRE_COLLISION " ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ]   
					 
					 
					 
					      ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					      checks  + =  [   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    checks  =  [   
					 
					 
					 
					        ( " PRE_COLLISION " ,  33 ) ,   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      ( " PRE_COLLISION " ,  0 ) ,   # TODO: figure out why freq is inconsistent   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      ]   
					 
					 
					 
					      ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    return  CANParser ( DBC [ CP . carFingerprint ] [ " pt " ] ,  signals ,  checks ,  0 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  @staticmethod   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  def  get_cam_can_parser ( CP ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    signals  =  [ ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    checks  =  [ ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  CP . carFingerprint  in  ( TSS2_CAR  -  RADAR_ACC_CAR ) :   
					 
					 
					 
					    if  CP . carFingerprint  in  ( TSS2_CAR  -  RADAR_ACC_CAR ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      signals  + =  [   
					 
					 
					 
					      signals  + =  [   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ( " PRECOLLISION_ACTIVE " ,  " PRE_COLLISION " ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ( " FORCE " ,  " PRE_COLLISION " ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ( " ACC_TYPE " ,  " ACC_CONTROL " ) ,   
					 
					 
					 
					        ( " ACC_TYPE " ,  " ACC_CONTROL " ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ( " FCW " ,  " ACC_HUD " ) ,   
					 
					 
					 
					        ( " FCW " ,  " ACC_HUD " ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ]   
					 
					 
					 
					      ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      checks  + =  [   
					 
					 
					 
					      checks  + =  [   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        ( " PRE_COLLISION " ,  33 ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ( " ACC_CONTROL " ,  33 ) ,   
					 
					 
					 
					        ( " ACC_CONTROL " ,  33 ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ( " ACC_HUD " ,  1 ) ,   
					 
					 
					 
					        ( " ACC_HUD " ,  1 ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ]   
					 
					 
					 
					      ]