#!/usr/bin/env python3
# simple script to get a vehicle fingerprint.
# Instructions:
# - connect to a Panda
# - run selfdrive/boardd/boardd
# - launching this script
# Note: it's very important that the car is in stock mode, in order to collect a complete fingerprint
# - since some messages are published at low frequency, keep this script running for at least 30s,
# until all messages are received at least once
import cereal . messaging as messaging
logcan = messaging . sub_sock ( ' can ' )
msgs = { }
while True :
lc = messaging . recv_sock ( logcan , True )
if lc is None :
continue
for c in lc . can :
# read also msgs sent by EON on CAN bus 0x80 and filter out the
# addr with more than 11 bits
if c . src % 0x80 == 0 and c . address < 0x800 and c . address not in ( 0x7df , 0x7e0 , 0x7e8 ) :
msgs [ c . address ] = len ( c . dat )
fingerprint = ' , ' . join ( " %d : %d " % v for v in sorted ( msgs . items ( ) ) )
print ( f " number of messages { len ( msgs ) } : " )
print ( f " fingerprint { fingerprint } " )