@ -20,6 +20,8 @@ class CarInterface(CarInterfaceBase): 
			
		
	
		
		
			
				
					
					    self . brake_pressed_prev  =  False      self . brake_pressed_prev  =  False   
			
		
	
		
		
			
				
					
					    self . cruise_enabled_prev  =  False      self . cruise_enabled_prev  =  False   
			
		
	
		
		
			
				
					
					    self . low_speed_alert  =  False      self . low_speed_alert  =  False   
			
		
	
		
		
			
				
					
					    self . left_blinker_prev  =  False   
			
		
	
		
		
			
				
					
					    self . right_blinker_prev  =  False   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # *** init the major players ***      # *** init the major players ***   
			
		
	
		
		
			
				
					
					    self . CS  =  CarState ( CP )      self . CS  =  CarState ( CP )   
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -113,78 +115,33 @@ class CarInterface(CarInterfaceBase): 
			
		
	
		
		
			
				
					
					    self . cp . update_strings ( can_strings )      self . cp . update_strings ( can_strings )   
			
		
	
		
		
			
				
					
					    self . cp_cam . update_strings ( can_strings )      self . cp_cam . update_strings ( can_strings )   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    self . CS . update ( self . cp ,  self . cp_cam )      ret  =  self . CS . update ( self . cp ,  self . cp_cam )   
			
				
				
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # create message   
			
		
	
		
		
			
				
					
					    ret  =  car . CarState . new_message ( )   
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    ret . canValid  =  self . cp . can_valid  and  self . cp_cam . can_valid      ret . canValid  =  self . cp . can_valid  and  self . cp_cam . can_valid   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # speeds      # speeds   
			
		
	
		
		
			
				
					
					    ret . vEgo  =  self . CS . v_ego      ret . yawRate  =  self . VM . yaw_rate ( ret . steeringAngle  *  CV . DEG_TO_RAD ,  ret . vEgo )   
			
				
				
			
		
	
		
		
			
				
					
					    ret . vEgoRaw  =  self . CS . v_ego_raw   
			
		
	
		
		
			
				
					
					    ret . aEgo  =  self . CS . a_ego   
			
		
	
		
		
			
				
					
					    ret . yawRate  =  self . VM . yaw_rate ( self . CS . angle_steers  *  CV . DEG_TO_RAD ,  self . CS . v_ego )   
			
		
	
		
		
			
				
					
					    ret . standstill  =  self . CS . standstill   
			
		
	
		
		
			
				
					
					    ret . wheelSpeeds . fl  =  self . CS . v_wheel_fl   
			
		
	
		
		
			
				
					
					    ret . wheelSpeeds . fr  =  self . CS . v_wheel_fr   
			
		
	
		
		
			
				
					
					    ret . wheelSpeeds . rl  =  self . CS . v_wheel_rl   
			
		
	
		
		
			
				
					
					    ret . wheelSpeeds . rr  =  self . CS . v_wheel_rr   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # gear shifter   
			
		
	
		
		
			
				
					
					    ret . gearShifter  =  self . CS . gear_shifter   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # gas pedal   
			
		
	
		
		
			
				
					
					    ret . gas  =  self . CS . pedal_gas   
			
		
	
		
		
			
				
					
					    ret . gasPressed  =  self . CS . pedal_gas  >  0   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # brake pedal   
			
		
	
		
		
			
				
					
					    ret . brake  =  self . CS . user_brake   
			
		
	
		
		
			
				
					
					    ret . brakePressed  =  self . CS . brake_pressed   
			
		
	
		
		
			
				
					
					    ret . brakeLights  =  self . CS . brake_lights   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # steering wheel   
			
		
	
		
		
			
				
					
					    ret . steeringAngle  =  self . CS . angle_steers   
			
		
	
		
		
			
				
					
					    ret . steeringRate  =  self . CS . angle_steers_rate   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    ret . steeringTorque  =  self . CS . steer_torque_driver   
			
		
	
		
		
			
				
					
					    ret . steeringPressed  =  self . CS . steer_override   
			
		
	
		
		
	
		
		
			
				
					
					    ret . steeringRateLimited  =  self . CC . steer_rate_limited  if  self . CC  is  not  None  else  False      ret . steeringRateLimited  =  self . CC . steer_rate_limited  if  self . CC  is  not  None  else  False   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # cruise state   
			
		
	
		
		
			
				
					
					    ret . cruiseState . enabled  =  self . CS . pcm_acc_status   # same as main_on   
			
		
	
		
		
			
				
					
					    ret . cruiseState . speed  =  self . CS . v_cruise_pcm  *  CV . KPH_TO_MS   
			
		
	
		
		
			
				
					
					    ret . cruiseState . available  =  self . CS . main_on   
			
		
	
		
		
			
				
					
					    ret . cruiseState . speedOffset  =  0.   
			
		
	
		
		
			
				
					
					    ret . cruiseState . standstill  =  False   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # TODO: button presses      # TODO: button presses   
			
		
	
		
		
			
				
					
					    buttonEvents  =  [ ]      buttonEvents  =  [ ]   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  self . CS . left_blinker_on !=  self . CS . prev_left_blinker_on :      if  ret . leftBlinker  !=  self . left_blinker_prev :   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					      be  =  car . CarState . ButtonEvent . new_message ( )        be  =  car . CarState . ButtonEvent . new_message ( )   
			
		
	
		
		
			
				
					
					      be . type  =  ButtonType . leftBlinker        be . type  =  ButtonType . leftBlinker   
			
		
	
		
		
			
				
					
					      be . pressed  =  self . CS . left_blinker_on !=  0        be . pressed  =  ret . leftBlinker  !=  0   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					      buttonEvents . append ( be )        buttonEvents . append ( be )   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  self . CS . right_blinker_on !=  self . CS . prev_right_blinker_on :      if  ret . rightBlinker  !=  self . right_blinker_prev :   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					      be  =  car . CarState . ButtonEvent . new_message ( )        be  =  car . CarState . ButtonEvent . new_message ( )   
			
		
	
		
		
			
				
					
					      be . type  =  ButtonType . rightBlinker        be . type  =  ButtonType . rightBlinker   
			
		
	
		
		
			
				
					
					      be . pressed  =  self . CS . right_blinker_on !=  0        be . pressed  =  ret . rightBlinker  !=  0   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					      buttonEvents . append ( be )        buttonEvents . append ( be )   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    ret . buttonEvents  =  buttonEvents      ret . buttonEvents  =  buttonEvents   
			
		
	
		
		
			
				
					
					    ret . leftBlinker  =  bool ( self . CS . left_blinker_on )   
			
		
	
		
		
			
				
					
					    ret . rightBlinker  =  bool ( self . CS . right_blinker_on )   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    ret . doorOpen  =  not  self . CS . door_all_closed   
			
		
	
		
		
			
				
					
					    ret . seatbeltUnlatched  =  not  self . CS . seatbelt   
			
		
	
		
		
			
				
					
					    self . low_speed_alert  =  ( ret . vEgo  <  self . CP . minSteerSpeed )      self . low_speed_alert  =  ( ret . vEgo  <  self . CP . minSteerSpeed )   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    ret . genericToggle  =  self . CS . generic_toggle   
			
		
	
		
		
			
				
					
					    #ret.lkasCounter = self.CS.lkas_counter   
			
		
	
		
		
			
				
					
					    #ret.lkasCarModel = self.CS.lkas_car_model   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # events      # events   
			
		
	
		
		
			
				
					
					    events  =  [ ]      events  =  [ ]   
			
		
	
		
		
			
				
					
					    if  not  ( ret . gearShifter  in  ( GearShifter . drive ,  GearShifter . low ) ) :      if  not  ( ret . gearShifter  in  ( GearShifter . drive ,  GearShifter . low ) ) :   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -195,7 +152,7 @@ class CarInterface(CarInterfaceBase): 
			
		
	
		
		
			
				
					
					      events . append ( create_event ( ' seatbeltNotLatched ' ,  [ ET . NO_ENTRY ,  ET . SOFT_DISABLE ] ) )        events . append ( create_event ( ' seatbeltNotLatched ' ,  [ ET . NO_ENTRY ,  ET . SOFT_DISABLE ] ) )   
			
		
	
		
		
			
				
					
					    if  self . CS . esp_disabled :      if  self . CS . esp_disabled :   
			
		
	
		
		
			
				
					
					      events . append ( create_event ( ' espDisabled ' ,  [ ET . NO_ENTRY ,  ET . SOFT_DISABLE ] ) )        events . append ( create_event ( ' espDisabled ' ,  [ ET . NO_ENTRY ,  ET . SOFT_DISABLE ] ) )   
			
		
	
		
		
			
				
					
					    if  not  self . CS . main_on :      if  not  ret . cruiseState . available :   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					      events . append ( create_event ( ' wrongCarMode ' ,  [ ET . NO_ENTRY ,  ET . USER_DISABLE ] ) )        events . append ( create_event ( ' wrongCarMode ' ,  [ ET . NO_ENTRY ,  ET . USER_DISABLE ] ) )   
			
		
	
		
		
			
				
					
					    if  ret . gearShifter  ==  GearShifter . reverse :      if  ret . gearShifter  ==  GearShifter . reverse :   
			
		
	
		
		
			
				
					
					      events . append ( create_event ( ' reverseGear ' ,  [ ET . NO_ENTRY ,  ET . IMMEDIATE_DISABLE ] ) )        events . append ( create_event ( ' reverseGear ' ,  [ ET . NO_ENTRY ,  ET . IMMEDIATE_DISABLE ] ) )   
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -220,8 +177,13 @@ class CarInterface(CarInterfaceBase): 
			
		
	
		
		
			
				
					
					    self . gas_pressed_prev  =  ret . gasPressed      self . gas_pressed_prev  =  ret . gasPressed   
			
		
	
		
		
			
				
					
					    self . brake_pressed_prev  =  ret . brakePressed      self . brake_pressed_prev  =  ret . brakePressed   
			
		
	
		
		
			
				
					
					    self . cruise_enabled_prev  =  ret . cruiseState . enabled      self . cruise_enabled_prev  =  ret . cruiseState . enabled   
			
		
	
		
		
			
				
					
					    self . left_blinker_prev  =  ret . leftBlinker   
			
		
	
		
		
			
				
					
					    self . right_blinker_prev  =  ret . rightBlinker   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # copy back carState packet to CS   
			
		
	
		
		
			
				
					
					    self . CS . out  =  ret . as_reader ( )   
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    return  ret . as_reader ( )      return  self . CS . out   
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  # pass in a car.CarControl    # pass in a car.CarControl   
			
		
	
		
		
			
				
					
					  # to be called @ 100hz    # to be called @ 100hz