| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -3,7 +3,8 @@ from cereal import car | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from common.conversions import Conversions as CV | 
					 | 
					 | 
					 | 
					from common.conversions import Conversions as CV | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					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.car.volkswagen.values import DBC, CANBUS, NetworkLocation, TransmissionType, GearShifter, CarControllerParams | 
					 | 
					 | 
					 | 
					from selfdrive.car.volkswagen.values import DBC, CANBUS, NetworkLocation, TransmissionType, GearShifter, \ | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                                            CarControllerParams | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class CarState(CarStateBase): | 
					 | 
					 | 
					 | 
					class CarState(CarStateBase): | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -12,6 +13,20 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.CCP = CarControllerParams(CP) | 
					 | 
					 | 
					 | 
					    self.CCP = CarControllerParams(CP) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.button_states = {button.event_type: False for button in self.CCP.BUTTONS} | 
					 | 
					 | 
					 | 
					    self.button_states = {button.event_type: False for button in self.CCP.BUTTONS} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  def create_button_events(self, pt_cp, buttons): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    button_events = [] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    for button in buttons: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      state = pt_cp.vl[button.can_addr][button.can_msg] in button.values | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if self.button_states[button.event_type] != state: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        event = car.CarState.ButtonEvent.new_message() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        event.type = button.event_type | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        event.pressed = state | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        button_events.append(event) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      self.button_states[button.event_type] = state | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    return button_events | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def update(self, pt_cp, cam_cp, ext_cp, trans_type): | 
					 | 
					 | 
					 | 
					  def update(self, pt_cp, cam_cp, ext_cp, trans_type): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret = car.CarState.new_message() | 
					 | 
					 | 
					 | 
					    ret = car.CarState.new_message() | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # Update vehicle speed and acceleration from ABS wheel speeds. | 
					 | 
					 | 
					 | 
					    # Update vehicle speed and acceleration from ABS wheel speeds. | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -112,17 +127,8 @@ class CarState(CarStateBase): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # Update button states for turn signals and ACC controls, capture all ACC button state/config for passthrough | 
					 | 
					 | 
					 | 
					    # Update button states for turn signals and ACC controls, capture all ACC button state/config for passthrough | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.leftBlinker = bool(pt_cp.vl["Blinkmodi_02"]["Comfort_Signal_Left"]) | 
					 | 
					 | 
					 | 
					    ret.leftBlinker = bool(pt_cp.vl["Blinkmodi_02"]["Comfort_Signal_Left"]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.rightBlinker = bool(pt_cp.vl["Blinkmodi_02"]["Comfort_Signal_Right"]) | 
					 | 
					 | 
					 | 
					    ret.rightBlinker = bool(pt_cp.vl["Blinkmodi_02"]["Comfort_Signal_Right"]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    ret.buttonEvents = self.create_button_events(pt_cp, self.CCP.BUTTONS) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    self.gra_stock_values = pt_cp.vl["GRA_ACC_01"] | 
					 | 
					 | 
					 | 
					    self.gra_stock_values = pt_cp.vl["GRA_ACC_01"] | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    buttonEvents = [] | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for button in self.CCP.BUTTONS: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      state = pt_cp.vl[button.can_addr][button.can_msg] in button.values | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if self.button_states[button.event_type] != state: | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        event = car.CarState.ButtonEvent.new_message() | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        event.type = button.event_type | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        event.pressed = state | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        buttonEvents.append(event) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      self.button_states[button.event_type] = state | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.buttonEvents = buttonEvents | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    # Additional safety checks performed in CarInterface. | 
					 | 
					 | 
					 | 
					    # Additional safety checks performed in CarInterface. | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ret.espDisabled = pt_cp.vl["ESP_21"]["ESP_Tastung_passiv"] != 0 | 
					 | 
					 | 
					 | 
					    ret.espDisabled = pt_cp.vl["ESP_21"]["ESP_Tastung_passiv"] != 0 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |