from collections import defaultdict
from dataclasses import dataclass
from enum import Enum
from typing import Dict , List , Set , Union
from cereal import car
from selfdrive . car import AngleRateLimit , dbc_dict
from selfdrive . car . docs_definitions import CarInfo , Harness
from selfdrive . car . fw_query_definitions import FwQueryConfig , Request , StdQueries
Ecu = car . CarParams . Ecu
class CarControllerParams :
# Messages: Lane_Assist_Data1, LateralMotionControl
STEER_STEP = 5
# Message: ACCDATA
ACC_CONTROL_STEP = 2
# Message: IPMA_Data
LKAS_UI_STEP = 100
# Message: ACCDATA_3
ACC_UI_STEP = 5
# Message: Steering_Data_FD1, but send twice as fast
BUTTONS_STEP = 10 / 2
CURVATURE_MAX = 0.02 # Max curvature for steering command, m^-1
STEER_DRIVER_ALLOWANCE = 0.8 # Driver intervention threshold, Nm
# Curvature rate limits
# TODO: unify field names used by curvature and angle control cars
ANGLE_RATE_LIMIT_UP = AngleRateLimit ( speed_bp = [ 5 , 15 , 25 ] , angle_v = [ 0.005 , 0.00056 , 0.0002 ] )
ANGLE_RATE_LIMIT_DOWN = AngleRateLimit ( speed_bp = [ 5 , 15 , 25 ] , angle_v = [ 0.008 , 0.00089 , 0.00032 ] )
ACCEL_MAX = 2.0 # m/s^s max acceleration
ACCEL_MIN = - 3.5 # m/s^s max deceleration
def __init__ ( self , CP ) :
pass
class CANBUS :
main = 0
radar = 1
camera = 2
class CAR :
BRONCO_SPORT_MK1 = " FORD BRONCO SPORT 1ST GEN "
ESCAPE_MK4 = " FORD ESCAPE 4TH GEN "
EXPLORER_MK6 = " FORD EXPLORER 6TH GEN "
FOCUS_MK4 = " FORD FOCUS 4TH GEN "
MAVERICK_MK1 = " FORD MAVERICK 1ST GEN "
CANFD_CARS : Set [ str ] = set ( )
class RADAR :
DELPHI_ESR = ' ford_fusion_2018_adas '
DELPHI_MRR = ' FORD_CADS '
DBC : Dict [ str , Dict [ str , str ] ] = defaultdict ( lambda : dbc_dict ( " ford_lincoln_base_pt " , RADAR . DELPHI_MRR ) )
@dataclass
class FordCarInfo ( CarInfo ) :
package : str = " Co-Pilot360 Assist+ "
harness : Enum = Harness . ford_q3
CAR_INFO : Dict [ str , Union [ CarInfo , List [ CarInfo ] ] ] = {
CAR . BRONCO_SPORT_MK1 : FordCarInfo ( " Ford Bronco Sport 2021-22 " ) ,
CAR . ESCAPE_MK4 : [
FordCarInfo ( " Ford Escape 2020-21 " ) ,
FordCarInfo ( " Ford Kuga 2020-21 " , " Driver Assistance Pack " ) ,
] ,
CAR . EXPLORER_MK6 : [
FordCarInfo ( " Ford Explorer 2020-22 " ) ,
FordCarInfo ( " Lincoln Aviator 2021 " , " Co-Pilot360 Plus " ) ,
] ,
CAR . FOCUS_MK4 : FordCarInfo ( " Ford Focus EU 2019 " , " Driver Assistance Pack " ) ,
CAR . MAVERICK_MK1 : FordCarInfo ( " Ford Maverick 2022 " , " Co-Pilot360 Assist " ) ,
}
FW_QUERY_CONFIG = FwQueryConfig (
requests = [
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 ] ,
) ,
] ,
)
FW_VERSIONS = {
CAR . BRONCO_SPORT_MK1 : {
( Ecu . eps , 0x730 , None ) : [
b ' LX6C-14D003-AH \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LX6C-14D003-AK \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . abs , 0x760 , None ) : [
b ' LX6C-2D053-RD \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LX6C-2D053-RE \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdRadar , 0x764 , None ) : [
b ' LB5T-14D049-AB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdCamera , 0x706 , None ) : [
b ' M1PT-14F397-AC \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . engine , 0x7E0 , None ) : [
b ' M1PA-14C204-GF \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' N1PA-14C204-AC \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . shiftByWire , 0x732 , None ) : [
b ' LX6P-14G395-AD \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' PZ1P-14G395-AB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
} ,
CAR . ESCAPE_MK4 : {
( Ecu . eps , 0x730 , None ) : [
b ' LX6C-14D003-AF \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LX6C-14D003-AH \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . abs , 0x760 , None ) : [
b ' LX6C-2D053-NS \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LX6C-2D053-NY \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LX6C-2D053-SA \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdRadar , 0x764 , None ) : [
b ' LB5T-14D049-AB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdCamera , 0x706 , None ) : [
b ' LJ6T-14F397-AD \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LJ6T-14F397-AE \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . engine , 0x7E0 , None ) : [
b ' LX6A-14C204-BJV \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LX6A-14C204-ESG \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' MX6A-14C204-BEF \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . shiftByWire , 0x732 , None ) : [
b ' LX6P-14G395-AB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LX6P-14G395-AD \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
} ,
CAR . EXPLORER_MK6 : {
( Ecu . eps , 0x730 , None ) : [
b ' L1MC-14D003-AK \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' L1MC-14D003-AL \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' M1MC-14D003-AB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . abs , 0x760 , None ) : [
b ' L1MC-2D053-BB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' L1MC-2D053-BF \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' L1MC-2D053-KB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdRadar , 0x764 , None ) : [
b ' LB5T-14D049-AB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdCamera , 0x706 , None ) : [
b ' LB5T-14F397-AE \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LB5T-14F397-AF \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' LC5T-14F397-AH \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . engine , 0x7E0 , None ) : [
b ' LB5A-14C204-EAC \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' MB5A-14C204-MD \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' MB5A-14C204-RC \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' NB5A-14C204-HB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . shiftByWire , 0x732 , None ) : [
b ' L1MP-14C561-AB \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' L1MP-14G395-AD \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' L1MP-14G395-AE \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' L1MP-14G395-JB \x00 \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 ' ,
] ,
( Ecu . abs , 0x760 , None ) : [
b ' JX61-2D053-CJ \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdRadar , 0x764 , None ) : [
b ' JX7T-14D049-AC \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdCamera , 0x706 , None ) : [
b ' JX7T-14F397-AH \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . engine , 0x7E0 , None ) : [
b ' JX6A-14C204-BPL \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . shiftByWire , 0x732 , None ) : [
] ,
} ,
CAR . MAVERICK_MK1 : {
( Ecu . eps , 0x730 , None ) : [
b ' NZ6C-14D003-AL \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . abs , 0x760 , None ) : [
b ' NZ6C-2D053-AG \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdRadar , 0x764 , None ) : [
b ' NZ6T-14D049-AA \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . fwdCamera , 0x706 , None ) : [
b ' NZ6T-14F397-AC \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . engine , 0x7E0 , None ) : [
b ' NZ6A-14C204-AAA \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' NZ6A-14C204-PA \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
b ' NZ6A-14C204-ZA \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
( Ecu . shiftByWire , 0x732 , None ) : [
b ' NZ6P-14G395-AD \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 ' ,
] ,
} ,
}