|
|
|
@ -1,7 +1,7 @@ |
|
|
|
|
from collections import defaultdict |
|
|
|
|
from dataclasses import dataclass, field |
|
|
|
|
from enum import Enum |
|
|
|
|
from typing import Dict, List, Set, Union |
|
|
|
|
from typing import Dict, List, Union |
|
|
|
|
|
|
|
|
|
from cereal import car |
|
|
|
|
from selfdrive.car import AngleRateLimit, dbc_dict |
|
|
|
@ -44,11 +44,12 @@ class CAR: |
|
|
|
|
BRONCO_SPORT_MK1 = "FORD BRONCO SPORT 1ST GEN" |
|
|
|
|
ESCAPE_MK4 = "FORD ESCAPE 4TH GEN" |
|
|
|
|
EXPLORER_MK6 = "FORD EXPLORER 6TH GEN" |
|
|
|
|
F_150_MK14 = "FORD F-150 14TH GEN" |
|
|
|
|
FOCUS_MK4 = "FORD FOCUS 4TH GEN" |
|
|
|
|
MAVERICK_MK1 = "FORD MAVERICK 1ST GEN" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CANFD_CARS: Set[str] = set() |
|
|
|
|
CANFD_CARS = {CAR.F_150_MK14} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RADAR: |
|
|
|
@ -58,6 +59,9 @@ class RADAR: |
|
|
|
|
|
|
|
|
|
DBC: Dict[str, Dict[str, str]] = defaultdict(lambda: dbc_dict("ford_lincoln_base_pt", RADAR.DELPHI_MRR)) |
|
|
|
|
|
|
|
|
|
# F-150 radar is not yet supported |
|
|
|
|
DBC[CAR.F_150_MK14] = dbc_dict("ford_lincoln_base_pt", None) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Footnote(Enum): |
|
|
|
|
FOCUS = CarFootnote( |
|
|
|
@ -87,6 +91,7 @@ CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = { |
|
|
|
|
FordCarInfo("Ford Explorer 2020-22"), |
|
|
|
|
FordCarInfo("Lincoln Aviator 2020-21", "Co-Pilot360 Plus"), |
|
|
|
|
], |
|
|
|
|
CAR.F_150_MK14: FordCarInfo("Ford F-150 2023", "Co-Pilot360 Active 2.0"), |
|
|
|
|
CAR.FOCUS_MK4: FordCarInfo("Ford Focus 2018", "Adaptive Cruise Control with Lane Centering", footnotes=[Footnote.FOCUS]), |
|
|
|
|
CAR.MAVERICK_MK1: FordCarInfo("Ford Maverick 2022-23", "Co-Pilot360 Assist"), |
|
|
|
|
} |
|
|
|
@ -96,13 +101,17 @@ FW_QUERY_CONFIG = FwQueryConfig( |
|
|
|
|
Request( |
|
|
|
|
[StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], |
|
|
|
|
[StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], |
|
|
|
|
whitelist_ecus=[Ecu.engine], |
|
|
|
|
), |
|
|
|
|
Request( |
|
|
|
|
[StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], |
|
|
|
|
[StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], |
|
|
|
|
bus=0, |
|
|
|
|
whitelist_ecus=[Ecu.eps, Ecu.abs, Ecu.fwdRadar, Ecu.fwdCamera, Ecu.shiftByWire], |
|
|
|
|
), |
|
|
|
|
Request( |
|
|
|
|
[StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST], |
|
|
|
|
[StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE], |
|
|
|
|
bus=0, |
|
|
|
|
auxiliary=True, |
|
|
|
|
), |
|
|
|
|
], |
|
|
|
|
extra_ecus=[ |
|
|
|
@ -197,6 +206,23 @@ FW_VERSIONS = { |
|
|
|
|
b'NB5A-14C204-HB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
CAR.F_150_MK14: { |
|
|
|
|
(Ecu.eps, 0x730, None): [ |
|
|
|
|
b'ML3V-14D003-BC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', |
|
|
|
|
], |
|
|
|
|
(Ecu.abs, 0x760, None): [ |
|
|
|
|
b'PL34-2D053-CA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', |
|
|
|
|
], |
|
|
|
|
(Ecu.fwdRadar, 0x764, None): [ |
|
|
|
|
b'ML3T-14D049-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', |
|
|
|
|
], |
|
|
|
|
(Ecu.fwdCamera, 0x706, None): [ |
|
|
|
|
b'PJ6T-14H102-ABJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', |
|
|
|
|
], |
|
|
|
|
(Ecu.engine, 0x7E0, None): [ |
|
|
|
|
b'PL3A-14C204-BRB\x00\x00\x00\x00\x00\x00\x00\x00\x00', |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
CAR.FOCUS_MK4: { |
|
|
|
|
(Ecu.eps, 0x730, None): [ |
|
|
|
|
b'JX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', |
|
|
|
|