|
|
|
@ -75,6 +75,10 @@ interface_names = _get_interface_names() |
|
|
|
|
interfaces = load_interfaces(interface_names) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def only_toyota_left(candidate_cars): |
|
|
|
|
return all(("TOYOTA" in c or "LEXUS" in c) for c in candidate_cars) and len(candidate_cars) > 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# **** for use live only **** |
|
|
|
|
def fingerprint(logcan, sendcan): |
|
|
|
|
fixed_fingerprint = os.environ.get('FINGERPRINT', "") |
|
|
|
@ -134,13 +138,19 @@ def fingerprint(logcan, sendcan): |
|
|
|
|
finger[can.src][can.address] = len(can.dat) |
|
|
|
|
|
|
|
|
|
for b in candidate_cars: |
|
|
|
|
# Include bus 2 for toyotas to disambiguate cars using camera messages |
|
|
|
|
# (ideally should be done for all cars but we can't for Honda Bosch) |
|
|
|
|
# Ignore extended messages and VIN query response. |
|
|
|
|
if can.src == b and can.address < 0x800 and can.address not in (0x7df, 0x7e0, 0x7e8): |
|
|
|
|
if (can.src == b or (only_toyota_left(candidate_cars[b]) and can.src == 2)) and \ |
|
|
|
|
can.address < 0x800 and can.address not in (0x7df, 0x7e0, 0x7e8): |
|
|
|
|
candidate_cars[b] = eliminate_incompatible_cars(can, candidate_cars[b]) |
|
|
|
|
|
|
|
|
|
# if we only have one car choice and the time since we got our first |
|
|
|
|
# message has elapsed, exit |
|
|
|
|
for b in candidate_cars: |
|
|
|
|
# Toyota needs higher time to fingerprint, since DSU does not broadcast immediately |
|
|
|
|
if only_toyota_left(candidate_cars[b]): |
|
|
|
|
frame_fingerprint = 100 # 1s |
|
|
|
|
if len(candidate_cars[b]) == 1 and frame > frame_fingerprint: |
|
|
|
|
# fingerprint done |
|
|
|
|
car_fingerprint = candidate_cars[b][0] |
|
|
|
|