@ -4,12 +4,12 @@ from collections.abc import Callable
from cereal import car
from cereal import car
from openpilot . common . params import Params
from openpilot . common . params import Params
from openpilot . selfdrive . car import carlog
from openpilot . selfdrive . car . interfaces import get_interface_attr
from openpilot . selfdrive . car . interfaces import get_interface_attr
from openpilot . selfdrive . car . fingerprints import eliminate_incompatible_cars , all_legacy_fingerprint_cars
from openpilot . selfdrive . car . fingerprints import eliminate_incompatible_cars , all_legacy_fingerprint_cars
from openpilot . selfdrive . car . vin import get_vin , is_valid_vin , VIN_UNKNOWN
from openpilot . selfdrive . car . vin import get_vin , is_valid_vin , VIN_UNKNOWN
from openpilot . selfdrive . car . fw_versions import get_fw_versions_ordered , get_present_ecus , match_fw_to_car , set_obd_multiplexing
from openpilot . selfdrive . car . fw_versions import get_fw_versions_ordered , get_present_ecus , match_fw_to_car , set_obd_multiplexing
from openpilot . selfdrive . car . mock . values import CAR as MOCK
from openpilot . selfdrive . car . mock . values import CAR as MOCK
from openpilot . common . swaglog import cloudlog
import cereal . messaging as messaging
import cereal . messaging as messaging
from openpilot . selfdrive . car import gen_empty_fingerprint
from openpilot . selfdrive . car import gen_empty_fingerprint
from openpilot . system . version import get_build_metadata
from openpilot . system . version import get_build_metadata
@ -127,12 +127,12 @@ 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 :
cloud log . warning ( " Using cached CarParams " )
car log . warning ( " Using cached CarParams " )
vin_rx_addr , vin_rx_bus , vin = - 1 , - 1 , cached_params . carVin
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 :
cloud log . warning ( " Getting VIN & FW versions " )
car log . warning ( " Getting VIN & FW versions " )
# enable OBD multiplexing for VIN query
# enable OBD multiplexing for VIN query
# NOTE: this takes ~0.1s and is relied on to allow sendcan subscriber to connect in time
# NOTE: this takes ~0.1s and is relied on to allow sendcan subscriber to connect in time
set_obd_multiplexing ( params , True )
set_obd_multiplexing ( params , True )
@ -149,9 +149,9 @@ def fingerprint(logcan, sendcan, num_pandas):
cached = False
cached = False
if not is_valid_vin ( vin ) :
if not is_valid_vin ( vin ) :
cloudlog . event ( " Malformed VIN " , vin = vin , error = True )
carlog . error ( { " event " : " Malformed VIN " , " vin " : vin } )
vin = VIN_UNKNOWN
vin = VIN_UNKNOWN
cloud log . warning ( " VIN %s " , vin )
car log . warning ( " VIN %s " , vin )
params . put ( " CarVin " , vin )
params . put ( " CarVin " , vin )
# disable OBD multiplexing for CAN fingerprinting and potential ECU knockouts
# disable OBD multiplexing for CAN fingerprinting and potential ECU knockouts
@ -178,9 +178,9 @@ def fingerprint(logcan, sendcan, num_pandas):
car_fingerprint = fixed_fingerprint
car_fingerprint = fixed_fingerprint
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 ,
carlog . error ( { " event " : " fingerprinted " , " car_fingerprint " : car_fingerprint , " source " : source , " fuzzy " : not exact_match ,
fw_count = len ( car_fw ) , ecu_responses = list ( ecu_rx_addrs ) , vin_rx_addr = vin_rx_addr , vin_rx_bus = vin_rx_bus ,
" cached " : cached , " fw_count " : len ( car_fw ) , " ecu_responses " : list ( ecu_rx_addrs ) , " vin_rx_addr " : vin_rx_addr ,
fingerprints = repr ( finger ) , fw_query_time = fw_query_time , error = True )
" vin_rx_bus " : vin_rx_bus , " fingerprints " : repr ( finger ) , " fw_query_time " : fw_query_time } )
return car_fingerprint , finger , vin , car_fw , source , exact_match
return car_fingerprint , finger , vin , car_fw , source , exact_match
@ -194,7 +194,7 @@ def get_car(logcan, sendcan, experimental_long_allowed, num_pandas=1):
candidate , fingerprints , vin , car_fw , source , exact_match = fingerprint ( logcan , sendcan , num_pandas )
candidate , fingerprints , vin , car_fw , source , exact_match = fingerprint ( logcan , sendcan , num_pandas )
if candidate is None :
if candidate is None :
cloudlog . event ( " car doesn ' t match any fingerprints " , fingerprints = repr ( fingerprints ) , error = True )
carlog . error ( { " event " : " car doesn ' t match any fingerprints " , " fingerprints " : repr ( fingerprints ) } )
candidate = " MOCK "
candidate = " MOCK "
CarInterface , _ , _ = interfaces [ candidate ]
CarInterface , _ , _ = interfaces [ candidate ]