@ -15,13 +15,6 @@ from openpilot.selfdrive.car import gen_empty_fingerprint
FRAME_FINGERPRINT = 100 # 1s
def get_one_can ( logcan ) :
while True :
can = messaging . recv_one_retry ( logcan )
if len ( can . can ) > 0 :
return can
def load_interfaces ( brand_names ) :
ret = { }
for brand_name in brand_names :
@ -48,7 +41,7 @@ interface_names = _get_interface_names()
interfaces = load_interfaces ( interface_names )
def can_fingerprint ( next_ can: Callable ) - > tuple [ str | None , dict [ int , dict ] ] :
def can_fingerprint ( can_recv : Callable ) - > tuple [ str | None , dict [ int , dict ] ] :
finger = gen_empty_fingerprint ( )
candidate_cars = { i : all_legacy_fingerprint_cars ( ) for i in [ 0 , 1 ] } # attempt fingerprint on both bus 0 and 1
frame = 0
@ -56,9 +49,10 @@ def can_fingerprint(next_can: Callable) -> tuple[str | None, dict[int, dict]]:
done = False
while not done :
a = next_can ( )
for can in a . can :
# can_recv() may return zero or multiple packets, so we increment frame for each one we receive
can_packets = can_recv ( )
for can_packet in can_packets :
for can in can_packet . can :
# The fingerprint dict is generated for all buses, this way the car interface
# can use it to detect a (valid) multipanda setup and initialize accordingly
if can . src < 128 :
@ -139,7 +133,7 @@ def fingerprint(logcan, sendcan, set_obd_multiplexing, num_pandas, cached_params
# CAN fingerprint
# drain CAN socket so we get the latest messages
messaging . drain_sock_raw ( logcan )
car_fingerprint , finger = can_fingerprint ( lambda : get_one_can ( logcan ) )
car_fingerprint , finger = can_fingerprint ( lambda : messaging . drain_sock ( logcan , wait_for_one = True ) )
exact_match = True
source = car . CarParams . FingerprintSource . can