import os
_FINGERPRINTS = {
" ACURA ILX 2016 ACURAWATCH PLUS " : {
1024 L : 5 , 513 L : 5 , 1027 L : 5 , 1029 L : 8 , 929 L : 4 , 1057 L : 5 , 777 L : 8 , 1034 L : 5 , 1036 L : 8 , 398 L : 3 , 399 L : 7 , 145 L : 8 , 660 L : 8 , 985 L : 3 , 923 L : 2 , 542 L : 7 , 773 L : 7 , 800 L : 8 , 432 L : 7 , 419 L : 8 , 420 L : 8 , 1030 L : 5 , 422 L : 8 , 808 L : 8 , 428 L : 8 , 304 L : 8 , 819 L : 7 , 821 L : 5 , 57 L : 3 , 316 L : 8 , 545 L : 4 , 464 L : 8 , 1108 L : 8 , 597 L : 8 , 342 L : 6 , 983 L : 8 , 344 L : 8 , 804 L : 8 , 1039 L : 8 , 476 L : 4 , 892 L : 8 , 490 L : 8 , 1064 L : 7 , 882 L : 2 , 884 L : 7 , 887 L : 8 , 888 L : 8 , 380 L : 8 , 1365 L : 5 ,
# sent messages
0xe4 : 5 , 0x1fa : 8 , 0x200 : 3 , 0x30c : 8 , 0x33d : 5 ,
} ,
" HONDA CIVIC 2016 TOURING " : {
1024 L : 5 , 513 L : 5 , 1027 L : 5 , 1029 L : 8 , 777 L : 8 , 1036 L : 8 , 1039 L : 8 , 1424 L : 5 , 401 L : 8 , 148 L : 8 , 662 L : 4 , 985 L : 3 , 795 L : 8 , 773 L : 7 , 800 L : 8 , 545 L : 6 , 420 L : 8 , 806 L : 8 , 808 L : 8 , 1322 L : 5 , 427 L : 3 , 428 L : 8 , 304 L : 8 , 432 L : 7 , 57 L : 3 , 450 L : 8 , 929 L : 8 , 330 L : 8 , 1302 L : 8 , 464 L : 8 , 1361 L : 5 , 1108 L : 8 , 597 L : 8 , 470 L : 2 , 344 L : 8 , 804 L : 8 , 399 L : 7 , 476 L : 7 , 1633 L : 8 , 487 L : 4 , 892 L : 8 , 490 L : 8 , 493 L : 5 , 884 L : 8 , 891 L : 8 , 380 L : 8 , 1365 L : 5 ,
# sent messages
0xe4 : 5 , 0x1fa : 8 , 0x200 : 3 , 0x30c : 8 , 0x33d : 5 , 0x35e : 8 , 0x39f : 8 ,
} ,
" HONDA CR-V 2016 TOURING " : {
57 L : 3 , 145 L : 8 , 316 L : 8 , 340 L : 8 , 342 L : 6 , 344 L : 8 , 380 L : 8 , 398 L : 3 , 399 L : 6 , 401 L : 8 , 420 L : 8 , 422 L : 8 , 426 L : 8 , 432 L : 7 , 464 L : 8 , 474 L : 5 , 476 L : 4 , 487 L : 4 , 490 L : 8 , 493 L : 3 , 507 L : 1 , 542 L : 7 , 545 L : 4 , 597 L : 8 , 660 L : 8 , 661 L : 4 , 773 L : 7 , 777 L : 8 , 800 L : 8 , 804 L : 8 , 808 L : 8 , 882 L : 2 , 884 L : 7 , 888 L : 8 , 891 L : 8 , 892 L : 8 , 923 L : 2 , 929 L : 8 , 983 L : 8 , 985 L : 3 , 1024 L : 5 , 1027 L : 5 , 1029 L : 8 , 1033 L : 5 , 1036 L : 8 , 1039 L : 8 , 1057 L : 5 , 1064 L : 7 , 1108 L : 8 , 1125 L : 8 , 1296 L : 8 , 1365 L : 5 , 1424 L : 5 , 1600 L : 5 , 1601 L : 8 ,
# sent messages
0x194 : 4 , 0x1fa : 8 , 0x30c : 8 , 0x33d : 5 ,
} ,
" TOYOTA RAV4 2017 " : {
36 L : 8 , 37 L : 8 , 170 L : 8 , 180 L : 8 , 186 L : 4 , 426 L : 6 , 452 L : 8 , 464 L : 8 , 466 L : 8 , 467 L : 8 , 547 L : 8 , 548 L : 8 , 552 L : 4 , 562 L : 4 , 608 L : 8 , 610 L : 5 , 643 L : 7 , 705 L : 8 , 725 L : 2 , 740 L : 5 , 800 L : 8 , 835 L : 8 , 836 L : 8 , 849 L : 4 , 869 L : 7 , 870 L : 7 , 871 L : 2 , 896 L : 8 , 897 L : 8 , 900 L : 6 , 902 L : 6 , 905 L : 8 , 911 L : 8 , 916 L : 3 , 918 L : 7 , 921 L : 8 , 933 L : 8 , 944 L : 8 , 945 L : 8 , 951 L : 8 , 955 L : 4 , 956 L : 8 , 979 L : 2 , 998 L : 5 , 999 L : 7 , 1000 L : 8 , 1001 L : 8 , 1008 L : 2 , 1014 L : 8 , 1017 L : 8 , 1041 L : 8 , 1042 L : 8 , 1043 L : 8 , 1044 L : 8 , 1056 L : 8 , 1059 L : 1 , 1114 L : 8 , 1161 L : 8 , 1162 L : 8 , 1163 L : 8 , 1176 L : 8 , 1177 L : 8 , 1178 L : 8 , 1179 L : 8 , 1180 L : 8 , 1181 L : 8 , 1190 L : 8 , 1191 L : 8 , 1192 L : 8 , 1196 L : 8 , 1227 L : 8 , 1228 L : 8 , 1235 L : 8 , 1237 L : 8 , 1263 L : 8 , 1279 L : 8 , 1408 L : 8 , 1409 L : 8 , 1410 L : 8 , 1552 L : 8 , 1553 L : 8 , 1554 L : 8 , 1555 L : 8 , 1556 L : 8 , 1557 L : 8 , 1561 L : 8 , 1562 L : 8 , 1568 L : 8 , 1569 L : 8 , 1570 L : 8 , 1571 L : 8 , 1572 L : 8 , 1584 L : 8 , 1589 L : 8 , 1592 L : 8 , 1593 L : 8 , 1595 L : 8 , 1596 L : 8 , 1597 L : 8 , 1600 L : 8 , 1656 L : 8 , 1664 L : 8 , 1728 L : 8 , 1745 L : 8 , 1779 L : 8 , 1904 L : 8 , 1912 L : 8 , 1990 L : 8 , 1998 L : 8
} ,
}
# support additional internal only fingerprints
try :
from common . fingerprints_internal import add_additional_fingerprints
add_additional_fingerprints ( _FINGERPRINTS )
except ImportError :
pass
def eliminate_incompatible_cars ( msg , candidate_cars ) :
""" Removes cars that could not have sent msg.
Inputs :
msg : A cereal / log CanData message from the car .
candidate_cars : A list of cars to consider .
Returns :
A list containing the subset of candidate_cars that could have sent msg .
"""
compatible_cars = [ ]
for car_name in candidate_cars :
adr = msg . address
if msg . src != 0 or ( adr in _FINGERPRINTS [ car_name ] and
_FINGERPRINTS [ car_name ] [ adr ] == len ( msg . dat ) ) :
compatible_cars . append ( car_name )
else :
pass
#isin = adr in _FINGERPRINTS[car_name]
#print "eliminate", car_name, hex(adr), isin, len(msg.dat), msg.dat.encode("hex")
return compatible_cars
def all_known_cars ( ) :
""" Returns a list of all known car strings. """
return _FINGERPRINTS . keys ( )