@ -4,8 +4,7 @@ from opendbc.can.can_define import CANDefine 
			
		
	
		
		
			
				
					
					from  selfdrive . car . interfaces  import  CarStateBase from  selfdrive . car . interfaces  import  CarStateBase  
			
		
	
		
		
			
				
					
					from  opendbc . can . parser  import  CANParser from  opendbc . can . parser  import  CANParser  
			
		
	
		
		
			
				
					
					from  selfdrive . config  import  Conversions  as  CV from  selfdrive . config  import  Conversions  as  CV  
			
		
	
		
		
			
				
					
					from  selfdrive . car . toyota . values  import  CAR ,  DBC ,  STEER_THRESHOLD ,  NO_STOP_TIMER_CAR from  selfdrive . car . toyota . values  import  CAR ,  DBC ,  STEER_THRESHOLD ,  NO_STOP_TIMER_CAR ,  TSS2_CAR  
			
				
				
			
		
	
		
		
			
				
					
					from  selfdrive . swaglog  import  cloudlog  
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					class  CarState ( CarStateBase ) : class  CarState ( CarStateBase ) :  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -20,7 +19,9 @@ class CarState(CarStateBase): 
			
		
	
		
		
			
				
					
					    self . needs_angle_offset  =  True      self . needs_angle_offset  =  True   
			
		
	
		
		
			
				
					
					    self . accurate_steer_angle_seen  =  False      self . accurate_steer_angle_seen  =  False   
			
		
	
		
		
			
				
					
					    self . angle_offset  =  0.      self . angle_offset  =  0.   
			
		
	
		
		
			
				
					
					    self . logged_setme_vals  =  set ( )  
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					    self . low_speed_lockout  =  False   
			
		
	
		
		
			
				
					
					    self . acc_type  =  1   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  def  update ( self ,  cp ,  cp_cam ) :    def  update ( self ,  cp ,  cp_cam ) :   
			
		
	
		
		
			
				
					
					    ret  =  car . CarState . new_message ( )      ret  =  car . CarState . new_message ( )   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -76,16 +77,20 @@ class CarState(CarStateBase): 
			
		
	
		
		
			
				
					
					    if  self . CP . carFingerprint  ==  CAR . LEXUS_IS :      if  self . CP . carFingerprint  ==  CAR . LEXUS_IS :   
			
		
	
		
		
			
				
					
					      ret . cruiseState . available  =  cp . vl [ " DSU_CRUISE " ] [ " MAIN_ON " ]  !=  0        ret . cruiseState . available  =  cp . vl [ " DSU_CRUISE " ] [ " MAIN_ON " ]  !=  0   
			
		
	
		
		
			
				
					
					      ret . cruiseState . speed  =  cp . vl [ " DSU_CRUISE " ] [ " SET_SPEED " ]  *  CV . KPH_TO_MS        ret . cruiseState . speed  =  cp . vl [ " DSU_CRUISE " ] [ " SET_SPEED " ]  *  CV . KPH_TO_MS   
			
		
	
		
		
			
				
					
					      self . low_speed_lockout  =  False   
			
		
	
		
		
			
				
					
					    else :      else :   
			
		
	
		
		
			
				
					
					      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   
			
		
	
		
		
			
				
					
					      self . low_speed_lockout  =  cp . vl [ " PCM_CRUISE_2 " ] [ " LOW_SPEED_LOCKOUT " ]  ==  2   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      val  =  cp_cam . vl [ " ACC_CONTROL " ] [ " SET_ME_X01 " ]      if  self . CP . carFingerprint  in  TSS2_CAR :   
			
				
				
			
		
	
		
		
			
				
					
					      if  val  not  in  self . logged_setme_vals  and  val  !=  1 :        self . acc_type  =  cp_cam . vl [ " ACC_CONTROL " ] [ " ACC_TYPE " ]   
			
				
				
			
		
	
		
		
			
				
					
					        self . logged_setme_vals . add ( val )  
 
			
				
				
			
		
	
		
		
			
				
					
					        cloudlog . event ( " setme_vals " ,  vals = self . logged_setme_vals ,  car = self . CP . carFingerprint )      # 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.   
			
		
	
		
		
			
				
					
					    # TODO: it may be possible to avoid the lockout and gain stop and go if you   
			
		
	
		
		
			
				
					
					    # send your own ACC_CONTROL msg on startup with ACC_TYPE set to 1   
			
		
	
		
		
			
				
					
					    if  ( self . CP . carFingerprint  not  in  TSS2_CAR  and  self . CP . carFingerprint  !=  CAR . LEXUS_IS )  or  \  
			
		
	
		
		
			
				
					
					       ( self . CP . carFingerprint  in  TSS2_CAR  and  self . acc_type  ==  1 ) :   
			
		
	
		
		
			
				
					
					      self . low_speed_lockout  =  cp . vl [ " PCM_CRUISE_2 " ] [ " LOW_SPEED_LOCKOUT " ]  ==  2   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    self . pcm_acc_status  =  cp . vl [ " PCM_CRUISE " ] [ " CRUISE_STATE " ]      self . pcm_acc_status  =  cp . vl [ " PCM_CRUISE " ] [ " CRUISE_STATE " ]   
			
		
	
		
		
			
				
					
					    if  self . CP . carFingerprint  in  NO_STOP_TIMER_CAR  or  self . CP . enableGasInterceptor :      if  self . CP . carFingerprint  in  NO_STOP_TIMER_CAR  or  self . CP . enableGasInterceptor :   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -192,14 +197,16 @@ class CarState(CarStateBase): 
			
		
	
		
		
			
				
					
					    signals  =  [      signals  =  [   
			
		
	
		
		
			
				
					
					      ( " FORCE " ,  " PRE_COLLISION " ,  0 ) ,        ( " FORCE " ,  " PRE_COLLISION " ,  0 ) ,   
			
		
	
		
		
			
				
					
					      ( " PRECOLLISION_ACTIVE " ,  " PRE_COLLISION " ,  0 ) ,        ( " PRECOLLISION_ACTIVE " ,  " PRE_COLLISION " ,  0 ) ,   
			
		
	
		
		
			
				
					
					      ( " SET_ME_X01 " ,  " ACC_CONTROL " ,  1 )   
			
		
	
		
		
			
				
					
					    ]      ]   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # use steering message to check if panda is connected to frc      # use steering message to check if panda is connected to frc   
			
		
	
		
		
			
				
					
					    checks  =  [      checks  =  [   
			
		
	
		
		
			
				
					
					      ( " STEERING_LKA " ,  42 ) ,        ( " STEERING_LKA " ,  42 ) ,   
			
		
	
		
		
			
				
					
					      ( " PRE_COLLISION " ,  0 ) ,  # TODO: figure out why freq is inconsistent        ( " PRE_COLLISION " ,  0 ) ,  # TODO: figure out why freq is inconsistent   
			
		
	
		
		
			
				
					
					      ( " ACC_CONTROL " ,  0 ) ,   
			
		
	
		
		
			
				
					
					    ]      ]   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  CP . carFingerprint  in  TSS2_CAR :   
			
		
	
		
		
			
				
					
					      signals . append ( ( " ACC_TYPE " ,  " ACC_CONTROL " ,  0 ) )   
			
		
	
		
		
			
				
					
					      checks . append ( ( " ACC_CONTROL " ,  33 ) )   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    return  CANParser ( DBC [ CP . carFingerprint ] [ " pt " ] ,  signals ,  checks ,  2 )      return  CANParser ( DBC [ CP . carFingerprint ] [ " pt " ] ,  signals ,  checks ,  2 )