|  |  | @ -85,6 +85,7 @@ class CarController: | 
			
		
	
		
		
			
				
					
					|  |  |  |     if self.CP.openpilotLongitudinalControl: |  |  |  |     if self.CP.openpilotLongitudinalControl: | 
			
		
	
		
		
			
				
					
					|  |  |  |       # Gas/regen, brakes, and UI commands - all at 25Hz |  |  |  |       # Gas/regen, brakes, and UI commands - all at 25Hz | 
			
		
	
		
		
			
				
					
					|  |  |  |       if self.frame % 4 == 0: |  |  |  |       if self.frame % 4 == 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         stopping = actuators.longControlState == LongCtrlState.stopping | 
			
		
	
		
		
			
				
					
					|  |  |  |         if not CC.longActive: |  |  |  |         if not CC.longActive: | 
			
		
	
		
		
			
				
					
					|  |  |  |           # ASCM sends max regen when not enabled |  |  |  |           # ASCM sends max regen when not enabled | 
			
		
	
		
		
			
				
					
					|  |  |  |           self.apply_gas = self.params.INACTIVE_REGEN |  |  |  |           self.apply_gas = self.params.INACTIVE_REGEN | 
			
		
	
	
		
		
			
				
					|  |  | @ -92,6 +93,10 @@ class CarController: | 
			
		
	
		
		
			
				
					
					|  |  |  |         else: |  |  |  |         else: | 
			
		
	
		
		
			
				
					
					|  |  |  |           self.apply_gas = int(round(interp(actuators.accel, self.params.GAS_LOOKUP_BP, self.params.GAS_LOOKUP_V))) |  |  |  |           self.apply_gas = int(round(interp(actuators.accel, self.params.GAS_LOOKUP_BP, self.params.GAS_LOOKUP_V))) | 
			
		
	
		
		
			
				
					
					|  |  |  |           self.apply_brake = int(round(interp(actuators.accel, self.params.BRAKE_LOOKUP_BP, self.params.BRAKE_LOOKUP_V))) |  |  |  |           self.apply_brake = int(round(interp(actuators.accel, self.params.BRAKE_LOOKUP_BP, self.params.BRAKE_LOOKUP_V))) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           # Don't allow any gas above inactive regen while stopping | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           # FIXME: brakes aren't applied immediately when enabling at a stop | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           if stopping: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             self.apply_gas = self.params.INACTIVE_REGEN | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         idx = (self.frame // 4) % 4 |  |  |  |         idx = (self.frame // 4) % 4 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -101,7 +106,7 @@ class CarController: | 
			
		
	
		
		
			
				
					
					|  |  |  |         # GM Camera exceptions |  |  |  |         # GM Camera exceptions | 
			
		
	
		
		
			
				
					
					|  |  |  |         # TODO: can we always check the longControlState? |  |  |  |         # TODO: can we always check the longControlState? | 
			
		
	
		
		
			
				
					
					|  |  |  |         if self.CP.networkLocation == NetworkLocation.fwdCamera: |  |  |  |         if self.CP.networkLocation == NetworkLocation.fwdCamera: | 
			
		
	
		
		
			
				
					
					|  |  |  |           at_full_stop = at_full_stop and actuators.longControlState == LongCtrlState.stopping |  |  |  |           at_full_stop = at_full_stop and stopping | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |           friction_brake_bus = CanBus.POWERTRAIN |  |  |  |           friction_brake_bus = CanBus.POWERTRAIN | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         # GasRegenCmdActive needs to be 1 to avoid cruise faults. It describes the ACC state, not actuation |  |  |  |         # GasRegenCmdActive needs to be 1 to avoid cruise faults. It describes the ACC state, not actuation | 
			
		
	
	
		
		
			
				
					|  |  | 
 |