|  |  | @ -86,6 +86,34 @@ class CarD: | 
			
		
	
		
		
			
				
					
					|  |  |  |     else: |  |  |  |     else: | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.CI, self.CP = CI, CI.CP |  |  |  |       self.CI, self.CP = CI, CI.CP | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     # set alternative experiences from parameters | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     disengage_on_accelerator = self.params.get_bool("DisengageOnAccelerator") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.CP.alternativeExperience = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if not disengage_on_accelerator: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       self.CP.alternativeExperience |= ALTERNATIVE_EXPERIENCE.DISABLE_DISENGAGE_ON_GAS | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     car_recognized = self.CP.carName != 'mock' | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     openpilot_enabled_toggle = self.params.get_bool("OpenpilotEnabledToggle") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     controller_available = self.CI.CC is not None and openpilot_enabled_toggle and not self.CP.dashcamOnly | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.CP.passive = not car_recognized or not controller_available or self.CP.dashcamOnly | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if self.CP.passive: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       safety_config = car.CarParams.SafetyConfig.new_message() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       safety_config.safetyModel = car.CarParams.SafetyModel.noOutput | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       self.CP.safetyConfigs = [safety_config] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     # Write previous route's CarParams | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     prev_cp = self.params.get("CarParamsPersistent") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if prev_cp is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       self.params.put("CarParamsPrevRoute", prev_cp) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     # Write CarParams for radard | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     cp_bytes = self.CP.to_bytes() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.params.put("CarParams", cp_bytes) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.params.put_nonblocking("CarParamsCache", cp_bytes) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.params.put_nonblocking("CarParamsPersistent", cp_bytes) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   def initialize(self): |  |  |  |   def initialize(self): | 
			
		
	
		
		
			
				
					
					|  |  |  |     """Initialize CarInterface, once controls are ready""" |  |  |  |     """Initialize CarInterface, once controls are ready""" | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.CI.init(self.CP, self.can_sock, self.pm.sock['sendcan']) |  |  |  |     self.CI.init(self.CP, self.can_sock, self.pm.sock['sendcan']) | 
			
		
	
	
		
		
			
				
					|  |  | @ -180,13 +208,8 @@ class Controls: | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.joystick_mode = self.params.get_bool("JoystickDebugMode") |  |  |  |     self.joystick_mode = self.params.get_bool("JoystickDebugMode") | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # set alternative experiences from parameters |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.disengage_on_accelerator = self.params.get_bool("DisengageOnAccelerator") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.CP.alternativeExperience = 0 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if not self.disengage_on_accelerator: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.CP.alternativeExperience |= ALTERNATIVE_EXPERIENCE.DISABLE_DISENGAGE_ON_GAS |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # read params |  |  |  |     # read params | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     self.disengage_on_accelerator = self.params.get_bool("DisengageOnAccelerator") | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.is_metric = self.params.get_bool("IsMetric") |  |  |  |     self.is_metric = self.params.get_bool("IsMetric") | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.is_ldw_enabled = self.params.get_bool("IsLdwEnabled") |  |  |  |     self.is_ldw_enabled = self.params.get_bool("IsLdwEnabled") | 
			
		
	
		
		
			
				
					
					|  |  |  |     openpilot_enabled_toggle = self.params.get_bool("OpenpilotEnabledToggle") |  |  |  |     openpilot_enabled_toggle = self.params.get_bool("OpenpilotEnabledToggle") | 
			
		
	
	
		
		
			
				
					|  |  | @ -197,22 +220,6 @@ class Controls: | 
			
		
	
		
		
			
				
					
					|  |  |  |     car_recognized = self.CP.carName != 'mock' |  |  |  |     car_recognized = self.CP.carName != 'mock' | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     controller_available = self.CI.CC is not None and openpilot_enabled_toggle and not self.CP.dashcamOnly |  |  |  |     controller_available = self.CI.CC is not None and openpilot_enabled_toggle and not self.CP.dashcamOnly | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.CP.passive = not car_recognized or not controller_available or self.CP.dashcamOnly |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if self.CP.passive: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       safety_config = car.CarParams.SafetyConfig.new_message() |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       safety_config.safetyModel = car.CarParams.SafetyModel.noOutput |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.CP.safetyConfigs = [safety_config] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Write previous route's CarParams |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     prev_cp = self.params.get("CarParamsPersistent") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if prev_cp is not None: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.params.put("CarParamsPrevRoute", prev_cp) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Write CarParams for radard |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     cp_bytes = self.CP.to_bytes() |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.params.put("CarParams", cp_bytes) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.params.put_nonblocking("CarParamsCache", cp_bytes) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.params.put_nonblocking("CarParamsPersistent", cp_bytes) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # cleanup old params |  |  |  |     # cleanup old params | 
			
		
	
		
		
			
				
					
					|  |  |  |     if not self.CP.experimentalLongitudinalAvailable: |  |  |  |     if not self.CP.experimentalLongitudinalAvailable: | 
			
		
	
	
		
		
			
				
					|  |  | 
 |