|  |  |  | @ -48,6 +48,8 @@ class CAR: | 
			
		
	
		
			
				
					|  |  |  |  |   FORESTER = "SUBARU FORESTER 2019" | 
			
		
	
		
			
				
					|  |  |  |  |   OUTBACK = "SUBARU OUTBACK 6TH GEN" | 
			
		
	
		
			
				
					|  |  |  |  |   LEGACY = "SUBARU LEGACY 7TH GEN" | 
			
		
	
		
			
				
					|  |  |  |  |   FORESTER_2022 = "SUBARU FORESTER 2022" | 
			
		
	
		
			
				
					|  |  |  |  |   OUTBACK_2023 = "SUBARU OUTBACK 7TH GEN" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   # Pre-global | 
			
		
	
		
			
				
					|  |  |  |  |   FORESTER_PREGLOBAL = "SUBARU FORESTER 2017 - 2018" | 
			
		
	
	
		
			
				
					|  |  |  | @ -88,6 +90,8 @@ CAR_INFO: Dict[str, Union[SubaruCarInfo, List[SubaruCarInfo]]] = { | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.LEGACY_PREGLOBAL: SubaruCarInfo("Subaru Legacy 2015-18"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.OUTBACK_PREGLOBAL: SubaruCarInfo("Subaru Outback 2015-17"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.OUTBACK_PREGLOBAL_2018: SubaruCarInfo("Subaru Outback 2018-19"), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.FORESTER_2022: SubaruCarInfo("Subaru Forester 2022", "All", car_parts=CarParts.common([CarHarness.subaru_c])), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.OUTBACK_2023: SubaruCarInfo("Subaru Outback 2023", "All", car_parts=CarParts.common([CarHarness.subaru_d])), | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | SUBARU_VERSION_REQUEST = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER]) + \ | 
			
		
	
	
		
			
				
					|  |  |  | @ -101,6 +105,11 @@ FW_QUERY_CONFIG = FwQueryConfig( | 
			
		
	
		
			
				
					|  |  |  |  |       [StdQueries.TESTER_PRESENT_REQUEST, SUBARU_VERSION_REQUEST], | 
			
		
	
		
			
				
					|  |  |  |  |       [StdQueries.TESTER_PRESENT_RESPONSE, SUBARU_VERSION_RESPONSE], | 
			
		
	
		
			
				
					|  |  |  |  |     ), | 
			
		
	
		
			
				
					|  |  |  |  |     # Some Eyesight modules fail on TESTER_PRESENT_REQUEST | 
			
		
	
		
			
				
					|  |  |  |  |     Request( | 
			
		
	
		
			
				
					|  |  |  |  |       [SUBARU_VERSION_REQUEST], | 
			
		
	
		
			
				
					|  |  |  |  |       [SUBARU_VERSION_RESPONSE], | 
			
		
	
		
			
				
					|  |  |  |  |     ), | 
			
		
	
		
			
				
					|  |  |  |  |   ], | 
			
		
	
		
			
				
					|  |  |  |  | ) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -538,6 +547,52 @@ FW_VERSIONS = { | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xa5\xfe\xf8@\x00', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |   }, | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.FORESTER_2022: { | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.abs, 0x7b0, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xa3 !x\x00', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xa3 !v\x00', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xa3 "v\x00', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xa3 "x\x00', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.eps, 0x746, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'-\xc0%0', | 
			
		
	
		
			
				
					|  |  |  |  |       b'-\xc0\x040', | 
			
		
	
		
			
				
					|  |  |  |  |       b'=\xc0%\x02', | 
			
		
	
		
			
				
					|  |  |  |  |       b'=\xc04\x02', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.fwdCamera, 0x787, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\x04!\x01\x1eD\x07!\x00\x04,' | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.engine, 0x7e0, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xd5"a0\x07', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xd5"`0\x07', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xf1"aq\x07', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xf1"`q\x07', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.transmission, 0x7e1, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\x1d\x86B0\x00', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\x1d\xf6B0\x00', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\x1e\x86B0\x00', | 
			
		
	
		
			
				
					|  |  |  |  |       b'\x1e\xf6D0\x00', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |   }, | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.OUTBACK_2023: { | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.abs, 0x7b0, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xa1 #\x17\x00', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.eps, 0x746, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'+\xc0\x12\x11\x00', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.fwdCamera, 0x787, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\t!\x08\x046\x05!\x08\x01/', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.engine, 0x7a2, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xed,\xa2q\x07', | 
			
		
	
		
			
				
					|  |  |  |  |     ], | 
			
		
	
		
			
				
					|  |  |  |  |     (Ecu.transmission, 0x7a3, None): [ | 
			
		
	
		
			
				
					|  |  |  |  |       b'\xa8\x8e\xf41\x00', | 
			
		
	
		
			
				
					|  |  |  |  |     ] | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | DBC = { | 
			
		
	
	
		
			
				
					|  |  |  | @ -545,7 +600,9 @@ DBC = { | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.IMPREZA: dbc_dict('subaru_global_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.IMPREZA_2020: dbc_dict('subaru_global_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.FORESTER: dbc_dict('subaru_global_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.FORESTER_2022: dbc_dict('subaru_global_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.OUTBACK: dbc_dict('subaru_global_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.OUTBACK_2023: dbc_dict('subaru_global_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.LEGACY: dbc_dict('subaru_global_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.FORESTER_PREGLOBAL: dbc_dict('subaru_forester_2017_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.LEGACY_PREGLOBAL: dbc_dict('subaru_outback_2015_generated', None), | 
			
		
	
	
		
			
				
					|  |  |  | @ -553,5 +610,6 @@ DBC = { | 
			
		
	
		
			
				
					|  |  |  |  |   CAR.OUTBACK_PREGLOBAL_2018: dbc_dict('subaru_outback_2019_generated', None), | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | GLOBAL_GEN2 = (CAR.OUTBACK, CAR.LEGACY) | 
			
		
	
		
			
				
					|  |  |  |  | PREGLOBAL_CARS = (CAR.FORESTER_PREGLOBAL, CAR.LEGACY_PREGLOBAL, CAR.OUTBACK_PREGLOBAL, CAR.OUTBACK_PREGLOBAL_2018) | 
			
		
	
		
			
				
					|  |  |  |  | LKAS_ANGLE = {CAR.FORESTER_2022, CAR.OUTBACK_2023} | 
			
		
	
		
			
				
					|  |  |  |  | GLOBAL_GEN2 = {CAR.OUTBACK, CAR.LEGACY, CAR.OUTBACK_2023} | 
			
		
	
		
			
				
					|  |  |  |  | PREGLOBAL_CARS = {CAR.FORESTER_PREGLOBAL, CAR.LEGACY_PREGLOBAL, CAR.OUTBACK_PREGLOBAL, CAR.OUTBACK_PREGLOBAL_2018} | 
			
		
	
	
		
			
				
					|  |  |  | 
 |