|  |  |  | @ -1,8 +1,9 @@ | 
			
		
	
		
			
				
					|  |  |  |  | from dataclasses import dataclass, field | 
			
		
	
		
			
				
					|  |  |  |  | from enum import StrEnum | 
			
		
	
		
			
				
					|  |  |  |  | from enum import IntFlag | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from cereal import car | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.car import dbc_dict | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.common.conversions import Conversions as CV | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.car import CarSpecs, DbcDict, PlatformConfig, Platforms, dbc_dict | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.car.docs_definitions import CarHarness, CarInfo, CarParts | 
			
		
	
		
			
				
					|  |  |  |  | from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -25,29 +26,54 @@ class CarControllerParams: | 
			
		
	
		
			
				
					|  |  |  |  |     pass | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class CAR(StrEnum): | 
			
		
	
		
			
				
					|  |  |  |  |   CX5 = "MAZDA CX-5" | 
			
		
	
		
			
				
					|  |  |  |  |   CX9 = "MAZDA CX-9" | 
			
		
	
		
			
				
					|  |  |  |  |   MAZDA3 = "MAZDA 3" | 
			
		
	
		
			
				
					|  |  |  |  |   MAZDA6 = "MAZDA 6" | 
			
		
	
		
			
				
					|  |  |  |  |   CX9_2021 = "MAZDA CX-9 2021" | 
			
		
	
		
			
				
					|  |  |  |  |   CX5_2022 = "MAZDA CX-5 2022" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | @dataclass | 
			
		
	
		
			
				
					|  |  |  |  | class MazdaCarInfo(CarInfo): | 
			
		
	
		
			
				
					|  |  |  |  |   package: str = "All" | 
			
		
	
		
			
				
					|  |  |  |  |   car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.mazda])) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | CAR_INFO: dict[str, MazdaCarInfo | list[MazdaCarInfo]] = { | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX5: MazdaCarInfo("Mazda CX-5 2017-21"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX9: MazdaCarInfo("Mazda CX-9 2016-20"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.MAZDA3: MazdaCarInfo("Mazda 3 2017-18"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.MAZDA6: MazdaCarInfo("Mazda 6 2017-20"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX9_2021: MazdaCarInfo("Mazda CX-9 2021-23", video_link="https://youtu.be/dA3duO4a0O4"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX5_2022: MazdaCarInfo("Mazda CX-5 2022-24"), | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | class MazdaFlags(IntFlag): | 
			
		
	
		
			
				
					|  |  |  |  |   # Gen 1 hardware: same CAN messages and same camera | 
			
		
	
		
			
				
					|  |  |  |  |   GEN1 = 1 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | @dataclass | 
			
		
	
		
			
				
					|  |  |  |  | class MazdaPlatformConfig(PlatformConfig): | 
			
		
	
		
			
				
					|  |  |  |  |   dbc_dict: DbcDict = field(default_factory=lambda: dbc_dict('mazda_2017', None)) | 
			
		
	
		
			
				
					|  |  |  |  |   flags: int = field(default=MazdaFlags.GEN1) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class CAR(Platforms): | 
			
		
	
		
			
				
					|  |  |  |  |   CX5 = MazdaPlatformConfig( | 
			
		
	
		
			
				
					|  |  |  |  |     "MAZDA CX-5", | 
			
		
	
		
			
				
					|  |  |  |  |     MazdaCarInfo("Mazda CX-5 2017-21"), | 
			
		
	
		
			
				
					|  |  |  |  |     specs=CarSpecs(mass=3655 * CV.LB_TO_KG, wheelbase=2.7, steerRatio=15.5) | 
			
		
	
		
			
				
					|  |  |  |  |   ) | 
			
		
	
		
			
				
					|  |  |  |  |   CX9 = MazdaPlatformConfig( | 
			
		
	
		
			
				
					|  |  |  |  |     "MAZDA CX-9", | 
			
		
	
		
			
				
					|  |  |  |  |     MazdaCarInfo("Mazda CX-9 2016-20"), | 
			
		
	
		
			
				
					|  |  |  |  |     specs=CarSpecs(mass=4217 * CV.LB_TO_KG, wheelbase=3.1, steerRatio=17.6) | 
			
		
	
		
			
				
					|  |  |  |  |   ) | 
			
		
	
		
			
				
					|  |  |  |  |   MAZDA3 = MazdaPlatformConfig( | 
			
		
	
		
			
				
					|  |  |  |  |     "MAZDA 3", | 
			
		
	
		
			
				
					|  |  |  |  |     MazdaCarInfo("Mazda 3 2017-18"), | 
			
		
	
		
			
				
					|  |  |  |  |     specs=CarSpecs(mass=2875 * CV.LB_TO_KG, wheelbase=2.7, steerRatio=14.0) | 
			
		
	
		
			
				
					|  |  |  |  |   ) | 
			
		
	
		
			
				
					|  |  |  |  |   MAZDA6 = MazdaPlatformConfig( | 
			
		
	
		
			
				
					|  |  |  |  |     "MAZDA 6", | 
			
		
	
		
			
				
					|  |  |  |  |     MazdaCarInfo("Mazda 6 2017-20"), | 
			
		
	
		
			
				
					|  |  |  |  |     specs=CarSpecs(mass=3443 * CV.LB_TO_KG, wheelbase=2.83, steerRatio=15.5) | 
			
		
	
		
			
				
					|  |  |  |  |   ) | 
			
		
	
		
			
				
					|  |  |  |  |   CX9_2021 = MazdaPlatformConfig( | 
			
		
	
		
			
				
					|  |  |  |  |     "MAZDA CX-9 2021", | 
			
		
	
		
			
				
					|  |  |  |  |     MazdaCarInfo("Mazda CX-9 2021-23", video_link="https://youtu.be/dA3duO4a0O4"), | 
			
		
	
		
			
				
					|  |  |  |  |     specs=CX9.specs | 
			
		
	
		
			
				
					|  |  |  |  |   ) | 
			
		
	
		
			
				
					|  |  |  |  |   CX5_2022 = MazdaPlatformConfig( | 
			
		
	
		
			
				
					|  |  |  |  |     "MAZDA CX-5 2022", | 
			
		
	
		
			
				
					|  |  |  |  |     MazdaCarInfo("Mazda CX-5 2022-24"), | 
			
		
	
		
			
				
					|  |  |  |  |     specs=CX5.specs, | 
			
		
	
		
			
				
					|  |  |  |  |   ) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | class LKAS_LIMITS: | 
			
		
	
	
		
			
				
					|  |  |  | @ -76,14 +102,5 @@ FW_QUERY_CONFIG = FwQueryConfig( | 
			
		
	
		
			
				
					|  |  |  |  | ) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | DBC = { | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX5: dbc_dict('mazda_2017', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX9: dbc_dict('mazda_2017', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.MAZDA3: dbc_dict('mazda_2017', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.MAZDA6: dbc_dict('mazda_2017', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX9_2021: dbc_dict('mazda_2017', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.CX5_2022: dbc_dict('mazda_2017', None), | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | # Gen 1 hardware: same CAN messages and same camera | 
			
		
	
		
			
				
					|  |  |  |  | GEN1 = {CAR.CX5, CAR.CX9, CAR.CX9_2021, CAR.MAZDA3, CAR.MAZDA6, CAR.CX5_2022} | 
			
		
	
		
			
				
					|  |  |  |  | CAR_INFO = CAR.create_carinfo_map() | 
			
		
	
		
			
				
					|  |  |  |  | DBC = CAR.create_dbc_map() | 
			
		
	
	
		
			
				
					|  |  |  | 
 |