|  |  | @ -127,9 +127,6 @@ def fingerprint(logcan, sendcan, num_pandas): | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   start_time = time.monotonic() |  |  |  |   start_time = time.monotonic() | 
			
		
	
		
		
			
				
					
					|  |  |  |   if not skip_fw_query: |  |  |  |   if not skip_fw_query: | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Vin query only reliably works through OBDII |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     bus = 1 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     cached_params = params.get("CarParamsCache") |  |  |  |     cached_params = params.get("CarParamsCache") | 
			
		
	
		
		
			
				
					
					|  |  |  |     if cached_params is not None: |  |  |  |     if cached_params is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |       with car.CarParams.from_bytes(cached_params) as cached_params: |  |  |  |       with car.CarParams.from_bytes(cached_params) as cached_params: | 
			
		
	
	
		
		
			
				
					|  |  | @ -139,20 +136,21 @@ def fingerprint(logcan, sendcan, num_pandas): | 
			
		
	
		
		
			
				
					
					|  |  |  |     if cached_params is not None and len(cached_params.carFw) > 0 and \ |  |  |  |     if cached_params is not None and len(cached_params.carFw) > 0 and \ | 
			
		
	
		
		
			
				
					
					|  |  |  |        cached_params.carVin is not VIN_UNKNOWN and not disable_fw_cache: |  |  |  |        cached_params.carVin is not VIN_UNKNOWN and not disable_fw_cache: | 
			
		
	
		
		
			
				
					
					|  |  |  |       cloudlog.warning("Using cached CarParams") |  |  |  |       cloudlog.warning("Using cached CarParams") | 
			
		
	
		
		
			
				
					
					|  |  |  |       vin, vin_rx_addr = cached_params.carVin, 0 |  |  |  |       vin_rx_addr, vin_rx_bus, vin = -1, -1, cached_params.carVin | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       car_fw = list(cached_params.carFw) |  |  |  |       car_fw = list(cached_params.carFw) | 
			
		
	
		
		
			
				
					
					|  |  |  |       cached = True |  |  |  |       cached = True | 
			
		
	
		
		
			
				
					
					|  |  |  |     else: |  |  |  |     else: | 
			
		
	
		
		
			
				
					
					|  |  |  |       cloudlog.warning("Getting VIN & FW versions") |  |  |  |       cloudlog.warning("Getting VIN & FW versions") | 
			
		
	
		
		
			
				
					
					|  |  |  |       set_obd_multiplexing(params, True) |  |  |  |       set_obd_multiplexing(params, True) | 
			
		
	
		
		
			
				
					
					|  |  |  |       vin_rx_addr, vin = get_vin(logcan, sendcan, bus) |  |  |  |       # Vin query only reliably works through OBDII | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       vin_rx_addr, vin_rx_bus, vin = get_vin(logcan, sendcan, (1, 0)) | 
			
		
	
		
		
			
				
					
					|  |  |  |       ecu_rx_addrs = get_present_ecus(logcan, sendcan, num_pandas=num_pandas) |  |  |  |       ecu_rx_addrs = get_present_ecus(logcan, sendcan, num_pandas=num_pandas) | 
			
		
	
		
		
			
				
					
					|  |  |  |       car_fw = get_fw_versions_ordered(logcan, sendcan, ecu_rx_addrs, num_pandas=num_pandas) |  |  |  |       car_fw = get_fw_versions_ordered(logcan, sendcan, ecu_rx_addrs, num_pandas=num_pandas) | 
			
		
	
		
		
			
				
					
					|  |  |  |       cached = False |  |  |  |       cached = False | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     exact_fw_match, fw_candidates = match_fw_to_car(car_fw) |  |  |  |     exact_fw_match, fw_candidates = match_fw_to_car(car_fw) | 
			
		
	
		
		
			
				
					
					|  |  |  |   else: |  |  |  |   else: | 
			
		
	
		
		
			
				
					
					|  |  |  |     vin, vin_rx_addr = VIN_UNKNOWN, 0 |  |  |  |     vin_rx_addr, vin_rx_bus, vin = -1, -1, VIN_UNKNOWN | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     exact_fw_match, fw_candidates, car_fw = True, set(), [] |  |  |  |     exact_fw_match, fw_candidates, car_fw = True, set(), [] | 
			
		
	
		
		
			
				
					
					|  |  |  |     cached = False |  |  |  |     cached = False | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -187,8 +185,8 @@ def fingerprint(logcan, sendcan, num_pandas): | 
			
		
	
		
		
			
				
					
					|  |  |  |     source = car.CarParams.FingerprintSource.fixed |  |  |  |     source = car.CarParams.FingerprintSource.fixed | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   cloudlog.event("fingerprinted", car_fingerprint=car_fingerprint, source=source, fuzzy=not exact_match, cached=cached, |  |  |  |   cloudlog.event("fingerprinted", car_fingerprint=car_fingerprint, source=source, fuzzy=not exact_match, cached=cached, | 
			
		
	
		
		
			
				
					
					|  |  |  |                  fw_count=len(car_fw), ecu_responses=list(ecu_rx_addrs), vin_rx_addr=vin_rx_addr, fingerprints=finger, |  |  |  |                  fw_count=len(car_fw), ecu_responses=list(ecu_rx_addrs), vin_rx_addr=vin_rx_addr, vin_rx_bus=vin_rx_bus, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                  fw_query_time=fw_query_time, error=True) |  |  |  |                  fingerprints=finger, fw_query_time=fw_query_time, error=True) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   return car_fingerprint, finger, vin, car_fw, source, exact_match |  |  |  |   return car_fingerprint, finger, vin, car_fw, source, exact_match | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |