| 
						
						
						
					 | 
					 | 
					@ -1,4 +1,5 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from dataclasses import dataclass, field | 
					 | 
					 | 
					 | 
					import copy | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					from dataclasses import dataclass, field, replace | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from enum import Enum, IntFlag | 
					 | 
					 | 
					 | 
					from enum import Enum, IntFlag | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import panda.python.uds as uds | 
					 | 
					 | 
					 | 
					import panda.python.uds as uds | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -60,6 +61,8 @@ class Footnote(Enum): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@dataclass | 
					 | 
					 | 
					 | 
					@dataclass | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class FordCarDocs(CarDocs): | 
					 | 
					 | 
					 | 
					class FordCarDocs(CarDocs): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  package: str = "Co-Pilot360 Assist+" | 
					 | 
					 | 
					 | 
					  package: str = "Co-Pilot360 Assist+" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  hybrid: bool = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  plug_in_hybrid: bool = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  def init_make(self, CP: car.CarParams): | 
					 | 
					 | 
					 | 
					  def init_make(self, CP: car.CarParams): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    harness = CarHarness.ford_q4 if CP.flags & FordFlags.CANFD else CarHarness.ford_q3 | 
					 | 
					 | 
					 | 
					    harness = CarHarness.ford_q4 if CP.flags & FordFlags.CANFD else CarHarness.ford_q3 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -73,6 +76,15 @@ class FordCarDocs(CarDocs): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class FordPlatformConfig(PlatformConfig): | 
					 | 
					 | 
					 | 
					class FordPlatformConfig(PlatformConfig): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  dbc_dict: DbcDict = field(default_factory=lambda: dbc_dict('ford_lincoln_base_pt', RADAR.DELPHI_MRR)) | 
					 | 
					 | 
					 | 
					  dbc_dict: DbcDict = field(default_factory=lambda: dbc_dict('ford_lincoln_base_pt', RADAR.DELPHI_MRR)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  def init(self): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    for car_info in list(self.car_info): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if car_info.hybrid: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        name = f"{car_info.make} {car_info.model} Hybrid {car_info.years}" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        self.car_info.append(replace(copy.deepcopy(car_info), name=name)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if car_info.plug_in_hybrid: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        name = f"{car_info.make} {car_info.model} Plug-in Hybrid {car_info.years}" | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        self.car_info.append(replace(copy.deepcopy(car_info), name=name)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					@dataclass | 
					 | 
					 | 
					 | 
					@dataclass | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class FordCANFDPlatformConfig(FordPlatformConfig): | 
					 | 
					 | 
					 | 
					class FordCANFDPlatformConfig(FordPlatformConfig): | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -92,31 +104,22 @@ class CAR(Platforms): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ESCAPE_MK4 = FordPlatformConfig( | 
					 | 
					 | 
					 | 
					  ESCAPE_MK4 = FordPlatformConfig( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    "FORD ESCAPE 4TH GEN", | 
					 | 
					 | 
					 | 
					    "FORD ESCAPE 4TH GEN", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    [ | 
					 | 
					 | 
					 | 
					    [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Escape 2020-22"), | 
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Escape 2020-22", hybrid=True, plug_in_hybrid=True), | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Escape Hybrid 2020-22"), | 
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Kuga 2020-22", "Adaptive Cruise Control with Lane Centering", hybrid=True, plug_in_hybrid=True), | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Escape Plug-in Hybrid 2020-22"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Kuga 2020-22", "Adaptive Cruise Control with Lane Centering"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Kuga Hybrid 2020-22", "Adaptive Cruise Control with Lane Centering"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Kuga Plug-in Hybrid 2020-22", "Adaptive Cruise Control with Lane Centering"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ], | 
					 | 
					 | 
					 | 
					    ], | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CarSpecs(mass=1750, wheelbase=2.71, steerRatio=16.7), | 
					 | 
					 | 
					 | 
					    CarSpecs(mass=1750, wheelbase=2.71, steerRatio=16.7), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ) | 
					 | 
					 | 
					 | 
					  ) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  EXPLORER_MK6 = FordPlatformConfig( | 
					 | 
					 | 
					 | 
					  EXPLORER_MK6 = FordPlatformConfig( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    "FORD EXPLORER 6TH GEN", | 
					 | 
					 | 
					 | 
					    "FORD EXPLORER 6TH GEN", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    [ | 
					 | 
					 | 
					 | 
					    [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Explorer 2020-23"), | 
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Explorer 2020-23", hybrid=True),  # Hybrid: Limited and Platinum only | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Explorer Hybrid 2020-23"),  # Limited and Platinum only | 
					 | 
					 | 
					 | 
					      FordCarDocs("Lincoln Aviator 2020-23", "Co-Pilot360 Plus", plug_in_hybrid=True),  # Hybrid: Grand Touring only | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Lincoln Aviator 2020-23", "Co-Pilot360 Plus"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Lincoln Aviator Plug-in Hybrid 2020-23", "Co-Pilot360 Plus"),  # Grand Touring only | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ], | 
					 | 
					 | 
					 | 
					    ], | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CarSpecs(mass=2050, wheelbase=3.025, steerRatio=16.8), | 
					 | 
					 | 
					 | 
					    CarSpecs(mass=2050, wheelbase=3.025, steerRatio=16.8), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ) | 
					 | 
					 | 
					 | 
					  ) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  F_150_MK14 = FordCANFDPlatformConfig( | 
					 | 
					 | 
					 | 
					  F_150_MK14 = FordCANFDPlatformConfig( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    "FORD F-150 14TH GEN", | 
					 | 
					 | 
					 | 
					    "FORD F-150 14TH GEN", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    [ | 
					 | 
					 | 
					 | 
					    [FordCarDocs("Ford F-150 2022-23", "Co-Pilot360 Active 2.0", hybrid=True)], | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford F-150 2022-23", "Co-Pilot360 Active 2.0"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford F-150 Hybrid 2022-23", "Co-Pilot360 Active 2.0"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ], | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CarSpecs(mass=2000, wheelbase=3.69, steerRatio=17.0), | 
					 | 
					 | 
					 | 
					    CarSpecs(mass=2000, wheelbase=3.69, steerRatio=17.0), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ) | 
					 | 
					 | 
					 | 
					  ) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  F_150_LIGHTNING_MK1 = FordCANFDPlatformConfig( | 
					 | 
					 | 
					 | 
					  F_150_LIGHTNING_MK1 = FordCANFDPlatformConfig( | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -126,19 +129,14 @@ class CAR(Platforms): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ) | 
					 | 
					 | 
					 | 
					  ) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  FOCUS_MK4 = FordPlatformConfig( | 
					 | 
					 | 
					 | 
					  FOCUS_MK4 = FordPlatformConfig( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    "FORD FOCUS 4TH GEN", | 
					 | 
					 | 
					 | 
					    "FORD FOCUS 4TH GEN", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    [ | 
					 | 
					 | 
					 | 
					    [FordCarDocs("Ford Focus 2018", "Adaptive Cruise Control with Lane Centering", footnotes=[Footnote.FOCUS], hybrid=True)],  # mHEV only | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Focus 2018", "Adaptive Cruise Control with Lane Centering", footnotes=[Footnote.FOCUS]), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Focus Hybrid 2018", "Adaptive Cruise Control with Lane Centering", footnotes=[Footnote.FOCUS]),  # mHEV only | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ], | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CarSpecs(mass=1350, wheelbase=2.7, steerRatio=15.0), | 
					 | 
					 | 
					 | 
					    CarSpecs(mass=1350, wheelbase=2.7, steerRatio=15.0), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ) | 
					 | 
					 | 
					 | 
					  ) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  MAVERICK_MK1 = FordPlatformConfig( | 
					 | 
					 | 
					 | 
					  MAVERICK_MK1 = FordPlatformConfig( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    "FORD MAVERICK 1ST GEN", | 
					 | 
					 | 
					 | 
					    "FORD MAVERICK 1ST GEN", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    [ | 
					 | 
					 | 
					 | 
					    [ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Maverick 2022", "LARIAT Luxury"), | 
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Maverick 2022", "LARIAT Luxury", hybrid=True), | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Maverick Hybrid 2022", "LARIAT Luxury"), | 
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Maverick 2023-24", "Co-Pilot360 Assist", hybrid=True), | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Maverick 2023-24", "Co-Pilot360 Assist"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      FordCarDocs("Ford Maverick Hybrid 2023-24", "Co-Pilot360 Assist"), | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    ], | 
					 | 
					 | 
					 | 
					    ], | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    CarSpecs(mass=1650, wheelbase=3.076, steerRatio=17.0), | 
					 | 
					 | 
					 | 
					    CarSpecs(mass=1650, wheelbase=3.076, steerRatio=17.0), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  ) | 
					 | 
					 | 
					 | 
					  ) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |