|  |  | @ -2,7 +2,8 @@ from openpilot.common.numpy_fast import clip, interp | 
			
		
	
		
		
			
				
					
					|  |  |  | from opendbc.can.packer import CANPacker |  |  |  | from opendbc.can.packer import CANPacker | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.car import apply_driver_steer_torque_limits, common_fault_avoidance |  |  |  | from openpilot.selfdrive.car import apply_driver_steer_torque_limits, common_fault_avoidance | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.car.subaru import subarucan |  |  |  | from openpilot.selfdrive.car.subaru import subarucan | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.car.subaru.values import DBC, GLOBAL_GEN2, PREGLOBAL_CARS, HYBRID_CARS, STEER_RATE_LIMITED, CanBus, CarControllerParams, SubaruFlags |  |  |  | from openpilot.selfdrive.car.subaru.values import DBC, GLOBAL_ES_ADDR, GLOBAL_GEN2, PREGLOBAL_CARS, HYBRID_CARS, STEER_RATE_LIMITED, \ | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                                                   CanBus, CarControllerParams, SubaruFlags | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # FIXME: These limits aren't exact. The real limit is more than likely over a larger time period and |  |  |  | # FIXME: These limits aren't exact. The real limit is more than likely over a larger time period and | 
			
		
	
		
		
			
				
					
					|  |  |  | # involves the total steering angle change rather than rate, but these limits work well for now |  |  |  | # involves the total steering angle change rather than rate, but these limits work well for now | 
			
		
	
	
		
		
			
				
					|  |  | @ -119,6 +120,21 @@ class CarController: | 
			
		
	
		
		
			
				
					
					|  |  |  |             bus = CanBus.alt if self.CP.carFingerprint in GLOBAL_GEN2 else CanBus.main |  |  |  |             bus = CanBus.alt if self.CP.carFingerprint in GLOBAL_GEN2 else CanBus.main | 
			
		
	
		
		
			
				
					
					|  |  |  |             can_sends.append(subarucan.create_es_distance(self.packer, CS.es_distance_msg["COUNTER"] + 1, CS.es_distance_msg, bus, pcm_cancel_cmd)) |  |  |  |             can_sends.append(subarucan.create_es_distance(self.packer, CS.es_distance_msg["COUNTER"] + 1, CS.es_distance_msg, bus, pcm_cancel_cmd)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       if self.CP.flags & SubaruFlags.DISABLE_EYESIGHT: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         # Tester present (keeps eyesight disabled) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if self.frame % 100 == 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           can_sends.append([GLOBAL_ES_ADDR, 0, b"\x02\x3E\x80\x00\x00\x00\x00\x00", CanBus.camera]) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         # Create all of the other eyesight messages to keep the rest of the car happy when eyesight is disabled | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if self.frame % 5 == 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           can_sends.append(subarucan.create_es_highbeamassist(self.packer)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if self.frame % 10 == 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           can_sends.append(subarucan.create_es_static_1(self.packer)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if self.frame % 2 == 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           can_sends.append(subarucan.create_es_static_2(self.packer)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     new_actuators = actuators.copy() |  |  |  |     new_actuators = actuators.copy() | 
			
		
	
		
		
			
				
					
					|  |  |  |     new_actuators.steer = self.apply_steer_last / self.p.STEER_MAX |  |  |  |     new_actuators.steer = self.apply_steer_last / self.p.STEER_MAX | 
			
		
	
		
		
			
				
					
					|  |  |  |     new_actuators.steerOutputCan = self.apply_steer_last |  |  |  |     new_actuators.steerOutputCan = self.apply_steer_last | 
			
		
	
	
		
		
			
				
					|  |  | 
 |