|
|
@ -1,9 +1,8 @@ |
|
|
|
from dataclasses import dataclass, field |
|
|
|
from dataclasses import dataclass, field |
|
|
|
from enum import StrEnum |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from cereal import car |
|
|
|
from cereal import car |
|
|
|
from panda.python import uds |
|
|
|
from panda.python import uds |
|
|
|
from openpilot.selfdrive.car import AngleRateLimit, dbc_dict |
|
|
|
from openpilot.selfdrive.car import AngleRateLimit, CarSpecs, DbcDict, PlatformConfig, Platforms, dbc_dict |
|
|
|
from openpilot.selfdrive.car.docs_definitions import CarInfo, CarHarness, CarParts |
|
|
|
from openpilot.selfdrive.car.docs_definitions import CarInfo, CarHarness, CarParts |
|
|
|
from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries |
|
|
|
from openpilot.selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries |
|
|
|
|
|
|
|
|
|
|
@ -20,29 +19,52 @@ class CarControllerParams: |
|
|
|
pass |
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CAR(StrEnum): |
|
|
|
|
|
|
|
XTRAIL = "NISSAN X-TRAIL 2017" |
|
|
|
|
|
|
|
LEAF = "NISSAN LEAF 2018" |
|
|
|
|
|
|
|
# Leaf with ADAS ECU found behind instrument cluster instead of glovebox |
|
|
|
|
|
|
|
# Currently the only known difference between them is the inverted seatbelt signal. |
|
|
|
|
|
|
|
LEAF_IC = "NISSAN LEAF 2018 Instrument Cluster" |
|
|
|
|
|
|
|
ROGUE = "NISSAN ROGUE 2019" |
|
|
|
|
|
|
|
ALTIMA = "NISSAN ALTIMA 2020" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass |
|
|
|
@dataclass |
|
|
|
class NissanCarInfo(CarInfo): |
|
|
|
class NissanCarInfo(CarInfo): |
|
|
|
package: str = "ProPILOT Assist" |
|
|
|
package: str = "ProPILOT Assist" |
|
|
|
car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.nissan_a])) |
|
|
|
car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.nissan_a])) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CAR_INFO: dict[str, NissanCarInfo | list[NissanCarInfo] | None] = { |
|
|
|
@dataclass(frozen=True) |
|
|
|
CAR.XTRAIL: NissanCarInfo("Nissan X-Trail 2017"), |
|
|
|
class NissanCarSpecs(CarSpecs): |
|
|
|
CAR.LEAF: NissanCarInfo("Nissan Leaf 2018-23", video_link="https://youtu.be/vaMbtAh_0cY"), |
|
|
|
centerToFrontRatio: float = 0.44 |
|
|
|
CAR.LEAF_IC: None, # same platforms |
|
|
|
steerRatio: float = 17. |
|
|
|
CAR.ROGUE: NissanCarInfo("Nissan Rogue 2018-20"), |
|
|
|
|
|
|
|
CAR.ALTIMA: NissanCarInfo("Nissan Altima 2019-20", car_parts=CarParts.common([CarHarness.nissan_b])), |
|
|
|
|
|
|
|
} |
|
|
|
@dataclass(frozen=True) |
|
|
|
|
|
|
|
class NissanPlaformConfig(PlatformConfig): |
|
|
|
|
|
|
|
dbc_dict: DbcDict = field(default_factory=lambda: dbc_dict('nissan_x_trail_2017_generated', None)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CAR(Platforms): |
|
|
|
|
|
|
|
XTRAIL = NissanPlaformConfig( |
|
|
|
|
|
|
|
"NISSAN X-TRAIL 2017", |
|
|
|
|
|
|
|
NissanCarInfo("Nissan X-Trail 2017"), |
|
|
|
|
|
|
|
specs=NissanCarSpecs(mass=1610, wheelbase=2.705) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
LEAF = NissanPlaformConfig( |
|
|
|
|
|
|
|
"NISSAN LEAF 2018", |
|
|
|
|
|
|
|
NissanCarInfo("Nissan Leaf 2018-23", video_link="https://youtu.be/vaMbtAh_0cY"), |
|
|
|
|
|
|
|
dbc_dict=dbc_dict('nissan_leaf_2018_generated', None), |
|
|
|
|
|
|
|
specs=NissanCarSpecs(mass=1610, wheelbase=2.705) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
# Leaf with ADAS ECU found behind instrument cluster instead of glovebox |
|
|
|
|
|
|
|
# Currently the only known difference between them is the inverted seatbelt signal. |
|
|
|
|
|
|
|
LEAF_IC = LEAF.override(platform_str="NISSAN LEAF 2018 Instrument Cluster", car_info=None) |
|
|
|
|
|
|
|
ROGUE = NissanPlaformConfig( |
|
|
|
|
|
|
|
"NISSAN ROGUE 2019", |
|
|
|
|
|
|
|
NissanCarInfo("Nissan Rogue 2018-20"), |
|
|
|
|
|
|
|
specs=NissanCarSpecs(mass=1610, wheelbase=2.705) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
ALTIMA = NissanPlaformConfig( |
|
|
|
|
|
|
|
"NISSAN ALTIMA 2020", |
|
|
|
|
|
|
|
NissanCarInfo("Nissan Altima 2019-20", car_parts=CarParts.common([CarHarness.nissan_b])), |
|
|
|
|
|
|
|
specs=NissanCarSpecs(mass=1492, wheelbase=2.824) |
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CAR_INFO = CAR.create_carinfo_map() |
|
|
|
|
|
|
|
DBC = CAR.create_dbc_map() |
|
|
|
|
|
|
|
|
|
|
|
# Default diagnostic session |
|
|
|
# Default diagnostic session |
|
|
|
NISSAN_DIAGNOSTIC_REQUEST_KWP = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL, 0x81]) |
|
|
|
NISSAN_DIAGNOSTIC_REQUEST_KWP = bytes([uds.SERVICE_TYPE.DIAGNOSTIC_SESSION_CONTROL, 0x81]) |
|
|
@ -88,11 +110,3 @@ FW_QUERY_CONFIG = FwQueryConfig( |
|
|
|
), |
|
|
|
), |
|
|
|
]], |
|
|
|
]], |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
DBC = { |
|
|
|
|
|
|
|
CAR.XTRAIL: dbc_dict('nissan_x_trail_2017_generated', None), |
|
|
|
|
|
|
|
CAR.LEAF: dbc_dict('nissan_leaf_2018_generated', None), |
|
|
|
|
|
|
|
CAR.LEAF_IC: dbc_dict('nissan_leaf_2018_generated', None), |
|
|
|
|
|
|
|
CAR.ROGUE: dbc_dict('nissan_x_trail_2017_generated', None), |
|
|
|
|
|
|
|
CAR.ALTIMA: dbc_dict('nissan_x_trail_2017_generated', None), |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|