@ -5,7 +5,7 @@ from opendbc.can.can_define import CANDefine 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					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 . interfaces  import  CarStateBase  
					 
					 
					 
					from  selfdrive . car . interfaces  import  CarStateBase  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					from  selfdrive . car . honda . values  import  CAR ,  DBC ,  STEER_THRESHOLD ,  SPEED_FACTOR ,  HONDA_BOSCH  
					 
					 
					 
					from  selfdrive . car . honda . values  import  CAR ,  DBC ,  STEER_THRESHOLD ,  SPEED_FACTOR ,  HONDA_BOSCH ,  HONDA_BOSCH_ALT_BRAKE_SIGNAL  
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					def  calc_cruise_offset ( offset ,  speed ) :  
					 
					 
					 
					def  calc_cruise_offset ( offset ,  speed ) :  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  # euristic formula so that speed is controlled to ~ 0.3m/s below pid_speed   
					 
					 
					 
					  # euristic formula so that speed is controlled to ~ 0.3m/s below pid_speed   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -81,12 +81,11 @@ def get_can_signals(CP): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ( " GEARBOX " ,  100 ) ,   
					 
					 
					 
					      ( " GEARBOX " ,  100 ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ]   
					 
					 
					 
					    ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  CP . carFingerprint  in  HONDA_BOSCH :   
					 
					 
					 
					  if  CP . carFingerprint  in  HONDA_BOSCH_ALT_BRAKE_SIGNAL :   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    # Civic is only bosch to use the same brake message as other hondas.   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  CP . carFingerprint  not  in  ( CAR . ACCORDH ,  CAR . CIVIC_BOSCH ,  CAR . CIVIC_BOSCH_DIESEL ,  CAR . CRV_HYBRID ,  CAR . INSIGHT ) :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    signals  + =  [ ( " BRAKE_PRESSED " ,  " BRAKE_MODULE " ,  0 ) ]   
					 
					 
					 
					    signals  + =  [ ( " BRAKE_PRESSED " ,  " BRAKE_MODULE " ,  0 ) ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    checks  + =  [ ( " BRAKE_MODULE " ,  50 ) ]   
					 
					 
					 
					    checks  + =  [ ( " BRAKE_MODULE " ,  50 ) ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  if  CP . carFingerprint  in  HONDA_BOSCH :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    signals  + =  [   
					 
					 
					 
					    signals  + =  [   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ( " CAR_GAS " ,  " GAS_PEDAL_2 " ,  0 ) ,   
					 
					 
					 
					      ( " CAR_GAS " ,  " GAS_PEDAL_2 " ,  0 ) ,   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ( " MAIN_ON " ,  " SCM_FEEDBACK " ,  0 ) ,   
					 
					 
					 
					      ( " MAIN_ON " ,  " SCM_FEEDBACK " ,  0 ) ,   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -118,6 +117,7 @@ def get_can_signals(CP): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      checks  + =  [ ( " CRUISE_PARAMS " ,  10 ) ]   
					 
					 
					 
					      checks  + =  [ ( " CRUISE_PARAMS " ,  10 ) ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    else :   
					 
					 
					 
					    else :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      checks  + =  [ ( " CRUISE_PARAMS " ,  50 ) ]   
					 
					 
					 
					      checks  + =  [ ( " CRUISE_PARAMS " ,  50 ) ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  CP . carFingerprint  in  ( CAR . ACCORD ,  CAR . ACCORD_15 ,  CAR . ACCORDH ,  CAR . CIVIC_BOSCH ,  CAR . CIVIC_BOSCH_DIESEL ,  CAR . CRV_HYBRID ,  CAR . INSIGHT ,  CAR . ACURA_RDX_3G ) :   
					 
					 
					 
					  if  CP . carFingerprint  in  ( CAR . ACCORD ,  CAR . ACCORD_15 ,  CAR . ACCORDH ,  CAR . CIVIC_BOSCH ,  CAR . CIVIC_BOSCH_DIESEL ,  CAR . CRV_HYBRID ,  CAR . INSIGHT ,  CAR . ACURA_RDX_3G ) :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    signals  + =  [ ( " DRIVERS_DOOR_OPEN " ,  " SCM_FEEDBACK " ,  1 ) ]   
					 
					 
					 
					    signals  + =  [ ( " DRIVERS_DOOR_OPEN " ,  " SCM_FEEDBACK " ,  1 ) ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  elif  CP . carFingerprint  ==  CAR . ODYSSEY_CHN :   
					 
					 
					 
					  elif  CP . carFingerprint  ==  CAR . ODYSSEY_CHN :   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -201,7 +201,7 @@ class CarState(CarStateBase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . user_gas ,  self . user_gas_pressed  =  0. ,  0   
					 
					 
					 
					    self . user_gas ,  self . user_gas_pressed  =  0. ,  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . brake_switch_prev  =  0   
					 
					 
					 
					    self . brake_switch_prev  =  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . brake_switch_ts  =  0   
					 
					 
					 
					    self . brake_switch_prev_ ts  =  0   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					    self . cruise_setting  =  0   
					 
					 
					 
					    self . cruise_setting  =  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . v_cruise_pcm_prev  =  0   
					 
					 
					 
					    self . v_cruise_pcm_prev  =  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . cruise_mode  =  0   
					 
					 
					 
					    self . cruise_mode  =  0   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -302,33 +302,29 @@ class CarState(CarStateBase): 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . steeringTorqueEps  =  cp . vl [ " STEER_MOTOR_TORQUE " ] [ ' MOTOR_TORQUE ' ]   
					 
					 
					 
					    ret . steeringTorqueEps  =  cp . vl [ " STEER_MOTOR_TORQUE " ] [ ' MOTOR_TORQUE ' ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . steeringPressed  =  abs ( ret . steeringTorque )  >  STEER_THRESHOLD [ self . CP . carFingerprint ]   
					 
					 
					 
					    ret . steeringPressed  =  abs ( ret . steeringTorque )  >  STEER_THRESHOLD [ self . CP . carFingerprint ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    self . brake_switch  =  cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]  !=  0   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  self . CP . carFingerprint  in  HONDA_BOSCH :   
					 
					 
					 
					    if  self . CP . carFingerprint  in  HONDA_BOSCH :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . cruise_mode  =  cp . vl [ " ACC_HUD " ] [ ' CRUISE_CONTROL_LABEL ' ]   
					 
					 
					 
					      self . cruise_mode  =  cp . vl [ " ACC_HUD " ] [ ' CRUISE_CONTROL_LABEL ' ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . cruiseState . standstill  =  cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ]  ==  252.   
					 
					 
					 
					      ret . cruiseState . standstill  =  cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ]  ==  252.   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . cruiseState . speedOffset  =  calc_cruise_offset ( 0 ,  ret . vEgo )   
					 
					 
					 
					      ret . cruiseState . speedOffset  =  calc_cruise_offset ( 0 ,  ret . vEgo )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  self . CP . carFingerprint  in  ( CAR . CIVIC_BOSCH ,  CAR . CIVIC_BOSCH_DIESEL ,  CAR . ACCORDH ,  CAR . CRV_HYBRID ,  CAR . INSIGHT ) :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . brakePressed  =  bool ( cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_PRESSED ' ]  or   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                              ( self . brake_switch  and  self . brake_switch_prev  and   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                               cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]  !=  self . brake_switch_ts ) )   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        self . brake_switch_prev  =  self . brake_switch   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        self . brake_switch_ts  =  cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      else :   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        ret . brakePressed  =  cp . vl [ " BRAKE_MODULE " ] [ ' BRAKE_PRESSED ' ]  !=  0   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # On set, cruise set speed pulses between 254~255 and the set speed prev is set to avoid this.   
					 
					 
					 
					      # On set, cruise set speed pulses between 254~255 and the set speed prev is set to avoid this.   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . cruiseState . speed  =  self . v_cruise_pcm_prev  if  cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ]  >  160.0  else  cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ]  *  CV . KPH_TO_MS   
					 
					 
					 
					      ret . cruiseState . speed  =  self . v_cruise_pcm_prev  if  cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ]  >  160.0  else  cp . vl [ " ACC_HUD " ] [ ' CRUISE_SPEED ' ]  *  CV . KPH_TO_MS   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . v_cruise_pcm_prev  =  ret . cruiseState . speed   
					 
					 
					 
					      self . v_cruise_pcm_prev  =  ret . cruiseState . speed   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    else :   
					 
					 
					 
					    else :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . cruiseState . speedOffset  =  calc_cruise_offset ( cp . vl [ " CRUISE_PARAMS " ] [ ' CRUISE_SPEED_OFFSET ' ] ,  ret . vEgo )   
					 
					 
					 
					      ret . cruiseState . speedOffset  =  calc_cruise_offset ( cp . vl [ " CRUISE_PARAMS " ] [ ' CRUISE_SPEED_OFFSET ' ] ,  ret . vEgo )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . cruiseState . speed  =  cp . vl [ " CRUISE " ] [ ' CRUISE_SPEED_PCM ' ]  *  CV . KPH_TO_MS   
					 
					 
					 
					      ret . cruiseState . speed  =  cp . vl [ " CRUISE " ] [ ' CRUISE_SPEED_PCM ' ]  *  CV . KPH_TO_MS   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    self . brake_switch  =  cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]  !=  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  self . CP . carFingerprint  in  HONDA_BOSCH_ALT_BRAKE_SIGNAL :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      ret . brakePressed  =  cp . vl [ " BRAKE_MODULE " ] [ ' BRAKE_PRESSED ' ]  !=  0   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    else :   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # brake switch has shown some single time step noise, so only considered when   
					 
					 
					 
					      # brake switch has shown some single time step noise, so only considered when   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      # switch is on for at least 2 consecutive CAN samples   
					 
					 
					 
					      # switch is on for at least 2 consecutive CAN samples   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					      # panda safety only checks BRAKE_PRESSED signal   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      ret . brakePressed  =  bool ( cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_PRESSED ' ]  or   
					 
					 
					 
					      ret . brakePressed  =  bool ( cp . vl [ " POWERTRAIN_DATA " ] [ ' BRAKE_PRESSED ' ]  or   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                              ( self . brake_switch  and  self . brake_switch_prev  and   
					 
					 
					 
					                              ( self . brake_switch  and  self . brake_switch_prev  and  cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]  !=  self . brake_switch_prev_ts ) )    
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                               cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]  !=  self . brake_switch_ts ) )   
					 
					 
					 
					
  
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					      self . brake_switch_prev  =  self . brake_switch   
					 
					 
					 
					      self . brake_switch_prev  =  self . brake_switch   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      self . brake_switch_ts  =  cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]   
					 
					 
					 
					      self . brake_switch_prev_ ts  =  cp . ts [ " POWERTRAIN_DATA " ] [ ' BRAKE_SWITCH ' ]   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . brake  =  cp . vl [ " VSA_STATUS " ] [ ' USER_BRAKE ' ]   
					 
					 
					 
					    ret . brake  =  cp . vl [ " VSA_STATUS " ] [ ' USER_BRAKE ' ]   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    ret . cruiseState . enabled  =  cp . vl [ " POWERTRAIN_DATA " ] [ ' ACC_STATUS ' ]  !=  0   
					 
					 
					 
					    ret . cruiseState . enabled  =  cp . vl [ " POWERTRAIN_DATA " ] [ ' ACC_STATUS ' ]  !=  0