@ -1,5 +1,7 @@ 
			
		
	
		
			
				
					from  cereal  import  car  
			
		
	
		
			
				
					from  opendbc . can . parser  import  CANParser  
			
		
	
		
			
				
					from  opendbc . can . can_define  import  CANDefine  
			
		
	
		
			
				
					from  selfdrive . config  import  Conversions  as  CV  
			
		
	
		
			
				
					from  selfdrive . car . interfaces  import  CarStateBase  
			
		
	
		
			
				
					from  selfdrive . car . chrysler . values  import  DBC ,  STEER_THRESHOLD  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -69,52 +71,53 @@ class CarState(CarStateBase): 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  def  update ( self ,  cp ,  cp_cam ) :   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    # update prevs, update must run once per loop   
			
		
	
		
			
				
					    self . prev_left_blinker_on  =  self . left_blinker_on   
			
		
	
		
			
				
					    self . prev_right_blinker_on  =  self . right_blinker_on   
			
		
	
		
			
				
					    ret  =  car . CarState . new_message ( )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . frame_23b  =  int ( cp . vl [ " WHEEL_BUTTONS " ] [ ' COUNTER ' ] )   
			
		
	
		
			
				
					    self . frame  =  int ( cp . vl [ " EPS_STATUS " ] [ ' COUNTER ' ] )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . door_all_closed  =  not  any ( [ cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FL ' ] ,   
			
		
	
		
			
				
					                                    cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FR ' ] ,   
			
		
	
		
			
				
					                                    cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RL ' ] ,   
			
		
	
		
			
				
					                                    cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RR ' ] ] )   
			
		
	
		
			
				
					    self . seatbelt  =  ( cp . vl [ " SEATBELT_STATUS " ] [ ' SEATBELT_DRIVER_UNLATCHED ' ]  ==  0 )   
			
		
	
		
			
				
					    ret . doorOpen  =  any ( [ cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FL ' ] ,   
			
		
	
		
			
				
					                        cp . vl [ " DOORS " ] [ ' DOOR_OPEN_FR ' ] ,   
			
		
	
		
			
				
					                        cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RL ' ] ,   
			
		
	
		
			
				
					                        cp . vl [ " DOORS " ] [ ' DOOR_OPEN_RR ' ] ] )   
			
		
	
		
			
				
					    ret . seatbeltUnlatched  =  cp . vl [ " SEATBELT_STATUS " ] [ ' SEATBELT_DRIVER_UNLATCHED ' ]  ==  1   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ret . brakePressed  =  cp . vl [ " BRAKE_2 " ] [ ' BRAKE_PRESSED_2 ' ]  ==  5  # human-only   
			
		
	
		
			
				
					    ret . brake  =  0   
			
		
	
		
			
				
					    ret . brakeLights  =  ret . brakePressed   
			
		
	
		
			
				
					    ret . gas  =  cp . vl [ " ACCEL_GAS_134 " ] [ ' ACCEL_134 ' ]   
			
		
	
		
			
				
					    ret . gasPressed  =  ret . gas  >  1e-5   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . brake_pressed  =  cp . vl [ " BRAKE_2 " ] [ ' BRAKE_PRESSED_2 ' ]  ==  5  # human-only   
			
		
	
		
			
				
					    self . pedal_gas  =  cp . vl [ " ACCEL_GAS_134 " ] [ ' ACCEL_134 ' ]   
			
		
	
		
			
				
					    self . esp_disabled  =  ( cp . vl [ " TRACTION_BUTTON " ] [ ' TRACTION_OFF ' ]  ==  1 )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . v_wheel_fl  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FL ' ]   
			
		
	
		
			
				
					    self . v_wheel_rr  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RR ' ]   
			
		
	
		
			
				
					    self . v_wheel_rl  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RL ' ]   
			
		
	
		
			
				
					    self . v_wheel_fr  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FR ' ]   
			
		
	
		
			
				
					    self . v_ego_raw  =  ( cp . vl [ ' SPEED_1 ' ] [ ' SPEED_LEFT ' ]  +  cp . vl [ ' SPEED_1 ' ] [ ' SPEED_RIGHT ' ] )  /  2.   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . v_ego ,  self . a_ego  =  self . update_speed_kf ( self . v_ego_raw )   
			
		
	
		
			
				
					    self . standstill  =  not  self . v_ego_raw  >  0.001   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . angle_steers  =  cp . vl [ " STEERING " ] [ ' STEER_ANGLE ' ]   
			
		
	
		
			
				
					    self . angle_steers_rate  =  cp . vl [ " STEERING " ] [ ' STEERING_RATE ' ]   
			
		
	
		
			
				
					    self . gear_shifter  =  self . parse_gear_shifter ( self . shifter_values . get ( cp . vl [ ' GEAR ' ] [ ' PRNDL ' ] ,  None ) )   
			
		
	
		
			
				
					    self . main_on  =  cp . vl [ " ACC_2 " ] [ ' ACC_STATUS_2 ' ]  ==  7   # ACC is green.   
			
		
	
		
			
				
					    self . left_blinker_on  =  cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ]  ==  1   
			
		
	
		
			
				
					    self . right_blinker_on  =  cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ]  ==  2   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . steer_torque_driver  =  cp . vl [ " EPS_STATUS " ] [ " TORQUE_DRIVER " ]   
			
		
	
		
			
				
					    self . steer_torque_motor  =  cp . vl [ " EPS_STATUS " ] [ " TORQUE_MOTOR " ]   
			
		
	
		
			
				
					    self . steer_override  =  abs ( self . steer_torque_driver )  >  STEER_THRESHOLD   
			
		
	
		
			
				
					    ret . wheelSpeeds . fl  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FL ' ]   
			
		
	
		
			
				
					    ret . wheelSpeeds . rr  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RR ' ]   
			
		
	
		
			
				
					    ret . wheelSpeeds . rl  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_RL ' ]   
			
		
	
		
			
				
					    ret . wheelSpeeds . fr  =  cp . vl [ ' WHEEL_SPEEDS ' ] [ ' WHEEL_SPEED_FR ' ]   
			
		
	
		
			
				
					    ret . vEgoRaw  =  ( cp . vl [ ' SPEED_1 ' ] [ ' SPEED_LEFT ' ]  +  cp . vl [ ' SPEED_1 ' ] [ ' SPEED_RIGHT ' ] )  /  2.   
			
		
	
		
			
				
					    ret . vEgo ,  ret . aEgo  =  self . update_speed_kf ( ret . vEgoRaw )   
			
		
	
		
			
				
					    ret . standstill  =  not  ret . vEgoRaw  >  0.001   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ret . leftBlinker  =  cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ]  ==  1   
			
		
	
		
			
				
					    ret . rightBlinker  =  cp . vl [ " STEERING_LEVERS " ] [ ' TURN_SIGNALS ' ]  ==  2   
			
		
	
		
			
				
					    ret . steeringAngle  =  cp . vl [ " STEERING " ] [ ' STEER_ANGLE ' ]   
			
		
	
		
			
				
					    ret . steeringRate  =  cp . vl [ " STEERING " ] [ ' STEERING_RATE ' ]   
			
		
	
		
			
				
					    ret . gearShifter  =  self . parse_gear_shifter ( self . shifter_values . get ( cp . vl [ ' GEAR ' ] [ ' PRNDL ' ] ,  None ) )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ret . cruiseState . enabled  =  cp . vl [ " ACC_2 " ] [ ' ACC_STATUS_2 ' ]  ==  7   # ACC is green.   
			
		
	
		
			
				
					    ret . cruiseState . available  =  ret . cruiseState . enabled   # FIXME: for now same as enabled   
			
		
	
		
			
				
					    ret . cruiseState . speed  =  cp . vl [ " DASHBOARD " ] [ ' ACC_SPEED_CONFIG_KPH ' ]  *  CV . KPH_TO_MS   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    ret . steeringTorque  =  cp . vl [ " EPS_STATUS " ] [ " TORQUE_DRIVER " ]   
			
		
	
		
			
				
					    ret . steeringTorqueEps  =  cp . vl [ " EPS_STATUS " ] [ " TORQUE_MOTOR " ]   
			
		
	
		
			
				
					    ret . steeringPressed  =  abs ( ret . steeringTorque )  >  STEER_THRESHOLD   
			
		
	
		
			
				
					    steer_state  =  cp . vl [ " EPS_STATUS " ] [ " LKAS_STATE " ]   
			
		
	
		
			
				
					    self . steer_error  =  steer_state  ==  4  or  ( steer_state  ==  0  and  self . v_ego  >  self . CP . minSteerSpeed )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . user_brake  =  0   
			
		
	
		
			
				
					    self . brake_lights  =  self . brake_pressed   
			
		
	
		
			
				
					    self . v_cruise_pcm  =  cp . vl [ " DASHBOARD " ] [ ' ACC_SPEED_CONFIG_KPH ' ]   
			
		
	
		
			
				
					    self . pcm_acc_status  =  self . main_on   
			
		
	
		
			
				
					    self . steer_error  =  steer_state  ==  4  or  ( steer_state  ==  0  and  ret . vEgo  >  self . CP . minSteerSpeed )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . generic_t oggle=  bool ( cp . vl [ " STEERING_LEVERS " ] [ ' HIGH_BEAM_FLASH ' ] )   
			
		
	
		
			
				
					    ret . genericToggle  =  bool ( cp . vl [ " STEERING_LEVERS " ] [ ' HIGH_BEAM_FLASH ' ] )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    self . lkas_counter  =  cp_cam . vl [ " LKAS_COMMAND " ] [ ' COUNTER ' ]   
			
		
	
		
			
				
					    self . lkas_car_model  =  cp_cam . vl [ " LKAS_HUD " ] [ ' CAR_MODEL ' ]   
			
		
	
		
			
				
					    self . lkas_status_ok  =  cp_cam . vl [ " LKAS_HEARTBIT " ] [ ' LKAS_STATUS_OK ' ]   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    return  ret