|  |  | @ -5,28 +5,33 @@ import time | 
			
		
	
		
		
			
				
					
					|  |  |  | import threading |  |  |  | import threading | 
			
		
	
		
		
			
				
					
					|  |  |  | from typing import SupportsFloat |  |  |  | from typing import SupportsFloat | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | from cereal import car, log |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.common.numpy_fast import clip |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper, DT_CTRL |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.common.params import Params |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | import cereal.messaging as messaging |  |  |  | import cereal.messaging as messaging | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from cereal import car, log | 
			
		
	
		
		
			
				
					
					|  |  |  | from cereal.visionipc import VisionIpcClient, VisionStreamType |  |  |  | from cereal.visionipc import VisionIpcClient, VisionStreamType | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.common.conversions import Conversions as CV |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | from panda import ALTERNATIVE_EXPERIENCE |  |  |  | from panda import ALTERNATIVE_EXPERIENCE | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from openpilot.common.conversions import Conversions as CV | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from openpilot.common.numpy_fast import clip | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from openpilot.common.params import Params | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from openpilot.common.realtime import config_realtime_process, Priority, Ratekeeper, DT_CTRL | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.common.swaglog import cloudlog |  |  |  | from openpilot.common.swaglog import cloudlog | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.system.version import get_short_branch |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.boardd.boardd import can_list_to_can_capnp |  |  |  | from openpilot.selfdrive.boardd.boardd import can_list_to_can_capnp | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.car.car_helpers import get_car, get_startup_event, get_one_can |  |  |  | from openpilot.selfdrive.car.car_helpers import get_car, get_startup_event, get_one_can | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from openpilot.selfdrive.controls.lib.alertmanager import AlertManager, set_offroad_alert | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.drive_helpers import VCruiseHelper, clip_curvature |  |  |  | from openpilot.selfdrive.controls.lib.drive_helpers import VCruiseHelper, clip_curvature | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from openpilot.selfdrive.controls.lib.events import Events, ET | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.latcontrol import LatControl, MIN_LATERAL_CONTROL_SPEED |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol import LatControl, MIN_LATERAL_CONTROL_SPEED | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.longcontrol import LongControl |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_pid import LatControlPID | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle, STEER_ANGLE_SATURATION_THRESHOLD |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_angle import LatControlAngle, STEER_ANGLE_SATURATION_THRESHOLD | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque |  |  |  | from openpilot.selfdrive.controls.lib.latcontrol_torque import LatControlTorque | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.events import Events, ET |  |  |  | from openpilot.selfdrive.controls.lib.longcontrol import LongControl | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.alertmanager import AlertManager, set_offroad_alert |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel |  |  |  | from openpilot.selfdrive.controls.lib.vehicle_model import VehicleModel | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.system.hardware import HARDWARE |  |  |  | from openpilot.system.hardware import HARDWARE | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | from openpilot.system.version import get_short_branch | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | SOFT_DISABLE_TIME = 3  # seconds |  |  |  | SOFT_DISABLE_TIME = 3  # seconds | 
			
		
	
		
		
			
				
					
					|  |  |  | LDW_MIN_SPEED = 31 * CV.MPH_TO_MS |  |  |  | LDW_MIN_SPEED = 31 * CV.MPH_TO_MS | 
			
		
	
	
		
		
			
				
					|  |  | 
 |