diff --git a/docs/CARS.md b/docs/CARS.md
index d41a112468..7e40120250 100644
--- a/docs/CARS.md
+++ b/docs/CARS.md
@@ -44,7 +44,9 @@ How We Rate The Cars
|Hyundai|Santa Fe 2019-20|All|
|
|
|
|
|
|Hyundai|Sonata 2020-22|All|
|
|
|
|
|
|Hyundai|Sonata Hybrid 2020-22|All|
|
|
|
|
|
-|Kia|Niro Electric 2019-22|All|
|
|
|
|
|
+|Kia|Niro Electric 2019-20|All|
|
|
|
|
|
+|Kia|Niro Electric 2021|All|
|
|
|
|
|
+|Kia|Niro Electric 2022|All|
|
|
|
|
|
|Kia|Telluride 2020|SCC + LKAS|
|
|
|
|
|
|Lexus|ES 2019-21|All|
|
|
|
|
|
|Lexus|ES Hybrid 2019-22|All|
|
|
|
|
|
@@ -95,12 +97,15 @@ How We Rate The Cars
|Hyundai|Sonata 2018-19|SCC + LKAS|
|
|
|
|
|
|Hyundai|Tucson Diesel 2019|SCC + LKAS|
|
|
|
|
|
|Kia|Ceed 2019|SCC + LKAS|
|
|
|
|
|
-|Kia|Forte 2018-21|SCC + LKAS|
|
|
|
|
|
+|Kia|Forte 2018|SCC + LKAS|
|
|
|
|
|
+|Kia|Forte 2019-21|SCC + LKAS|
|
|
|
|
|
|Kia|K5 2021-22|SCC + LFA|
|
|
|
|
|
-|Kia|Niro Hybrid 2021-22|SCC + LKAS|
|
|
|
|
|
+|Kia|Niro Hybrid 2021|SCC + LKAS|
|
|
|
|
|
+|Kia|Niro Hybrid 2022|SCC + LKAS|
|
|
|
|
|
|Kia|Optima 2019|SCC + LKAS|
|
|
|
|
|
|Kia|Seltos 2021|SCC + LKAS|
|
|
|
|
|
-|Kia|Sorento 2018-19|SCC + LKAS|
|
|
|
|
|
+|Kia|Sorento 2018|SCC + LKAS|
|
|
|
|
|
+|Kia|Sorento 2019|SCC + LKAS|
|
|
|
|
|
|Kia|Stinger 2018|SCC + LKAS|
|
|
|
|
|
|Lexus|CT Hybrid 2017-18|LSS|
[3](#footnotes)|
|
|
|
|
|Lexus|ES Hybrid 2017-18|LSS|
[3](#footnotes)|
|
|
|
|
@@ -159,14 +164,14 @@ How We Rate The Cars
|Acura|ILX 2016-19|AcuraWatch Plus|
|
|
|
|
|
|Acura|RDX 2016-18|AcuraWatch Plus|
|
|
|
|
|
|Acura|RDX 2019-21|All|
|
|
|
|
|
-|Cadillac|Escalade ESV 2016[1](#footnotes)|ACC + LKAS|
|
|
|
|
|
+|Cadillac|Escalade ESV 2016[1](#footnotes)|ACC + LKAS|
|
|
|
|
|
|Chevrolet|Volt 2017-18[1](#footnotes)|Adaptive Cruise|
|
|
|
|
|
|Chrysler|Pacifica 2017-18|Adaptive Cruise|
|
|
|
|
|
|Chrysler|Pacifica 2020|Adaptive Cruise|
|
|
|
|
|
|Chrysler|Pacifica Hybrid 2017-18|Adaptive Cruise|
|
|
|
|
|
|Chrysler|Pacifica Hybrid 2019-21|Adaptive Cruise|
|
|
|
|
|
|Genesis|G90 2018|All|
|
|
|
|
|
-|GMC|Acadia 2018[1](#footnotes)|Adaptive Cruise|
|
|
|
|
|
+|GMC|Acadia 2018[1](#footnotes)|Adaptive Cruise|
|
|
|
|
|
|Honda|Accord 2018-21|All|
|
|
|
|
|
|Honda|Accord Hybrid 2018-21|All|
|
|
|
|
|
|Honda|Civic 2016-18|Honda Sensing|
|
|
|
|
|
diff --git a/selfdrive/car/body/values.py b/selfdrive/car/body/values.py
index 04de0ef2e3..a009b40bc9 100644
--- a/selfdrive/car/body/values.py
+++ b/selfdrive/car/body/values.py
@@ -2,7 +2,7 @@ from typing import Dict
from cereal import car
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarInfo
+from selfdrive.car.docs_definitions import CarInfo, Harness
Ecu = car.CarParams.Ecu
SPEED_FROM_RPM = 0.008587
@@ -18,7 +18,7 @@ class CAR:
BODY = "COMMA BODY"
CAR_INFO: Dict[str, CarInfo] = {
- CAR.BODY: CarInfo("comma body", package="All", good_torque=True),
+ CAR.BODY: CarInfo("comma body", package="All", good_torque=True, harness=Harness.none),
}
FW_VERSIONS = {
diff --git a/selfdrive/car/chrysler/values.py b/selfdrive/car/chrysler/values.py
index 3716caf5bf..01923f2ae7 100644
--- a/selfdrive/car/chrysler/values.py
+++ b/selfdrive/car/chrysler/values.py
@@ -1,11 +1,13 @@
from dataclasses import dataclass
+from enum import Enum
from typing import Dict, List, Union
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarInfo
+from selfdrive.car.docs_definitions import CarInfo, Harness
from cereal import car
Ecu = car.CarParams.Ecu
+
class CarControllerParams:
STEER_MAX = 261 # 262 faults
STEER_DELTA_UP = 3 # 3 is stock. 100 is fine. 200 is too much it seems
@@ -20,12 +22,13 @@ class CAR:
PACIFICA_2018 = "CHRYSLER PACIFICA 2018" # includes 2017 Pacifica
PACIFICA_2020 = "CHRYSLER PACIFICA 2020"
JEEP_CHEROKEE = "JEEP GRAND CHEROKEE V6 2018" # includes 2017 Trailhawk
- JEEP_CHEROKEE_2019 = "JEEP GRAND CHEROKEE 2019" # includes 2020 Trailhawk
+ JEEP_CHEROKEE_2019 = "JEEP GRAND CHEROKEE 2019" # includes 2020 Trailhawk
@dataclass
class ChryslerCarInfo(CarInfo):
package: str = "Adaptive Cruise"
+ harness: Enum = Harness.fca
CAR_INFO: Dict[str, Union[ChryslerCarInfo, List[ChryslerCarInfo]]] = {
diff --git a/selfdrive/car/docs.py b/selfdrive/car/docs.py
index 64d4dbfef4..8fb1547f06 100755
--- a/selfdrive/car/docs.py
+++ b/selfdrive/car/docs.py
@@ -65,7 +65,8 @@ def generate_cars_md(all_car_info: List[CarInfo], template_fn: str) -> str:
template = jinja2.Template(f.read(), trim_blocks=True, lstrip_blocks=True)
footnotes = [fn.value.text for fn in ALL_FOOTNOTES]
- return template.render(tiers=sort_by_tier(all_car_info), footnotes=footnotes, Star=Star, Column=Column)
+ return template.render(tiers=sort_by_tier(all_car_info), all_car_info=all_car_info,
+ footnotes=footnotes, Star=Star, Column=Column)
if __name__ == "__main__":
diff --git a/selfdrive/car/docs_definitions.py b/selfdrive/car/docs_definitions.py
index 1ca2205ce5..3046f5c9e3 100644
--- a/selfdrive/car/docs_definitions.py
+++ b/selfdrive/car/docs_definitions.py
@@ -50,13 +50,16 @@ class CarInfo:
min_steer_speed: Optional[float] = None
min_enable_speed: Optional[float] = None
good_torque: bool = False
+ harness: Optional[Enum] = None
def init(self, CP: car.CarParams, non_tested_cars: List[str], all_footnotes: Dict[Enum, int]):
# TODO: set all the min steer speeds in carParams and remove this
min_steer_speed = CP.minSteerSpeed
if self.min_steer_speed is not None:
min_steer_speed = self.min_steer_speed
- assert CP.minSteerSpeed == 0, f"Minimum steer speed set in both CarInfo and CarParams for {CP.carFingerprint}"
+ assert CP.minSteerSpeed == 0, f"{CP.carFingerprint}: Minimum steer speed set in both CarInfo and CarParams"
+
+ assert self.harness is not None, f"{CP.carFingerprint}: Need to specify car harness"
# TODO: set all the min enable speeds in carParams correctly and remove this
min_enable_speed = CP.minEnableSpeed
@@ -74,7 +77,7 @@ class CarInfo:
Column.FSR_LONGITUDINAL: min_enable_speed <= 0.,
Column.FSR_STEERING: min_steer_speed <= 0.,
Column.STEERING_TORQUE: self.good_torque,
- Column.MAINTAINED: CP.carFingerprint not in non_tested_cars,
+ Column.MAINTAINED: CP.carFingerprint not in non_tested_cars and self.harness is not Harness.none,
}
if CP.notCar:
@@ -104,3 +107,34 @@ class CarInfo:
item += footnote_tag.format(self.all_footnotes[footnote])
return item
+
+
+class Harness(Enum):
+ nidec = "Honda Nidec"
+ bosch = "Honda Bosch"
+ toyota = "Toyota"
+ subaru = "Subaru"
+ fca = "FCA"
+ vw = "VW"
+ j533 = "J533"
+ hyundai_a = "Hyundai A"
+ hyundai_b = "Hyundai B"
+ hyundai_c = "Hyundai C"
+ hyundai_d = "Hyundai D"
+ hyundai_e = "Hyundai E"
+ hyundai_f = "Hyundai F"
+ hyundai_g = "Hyundai G"
+ hyundai_h = "Hyundai H"
+ hyundai_i = "Hyundai I"
+ hyundai_j = "Hyundai J"
+ hyundai_k = "Hyundai K"
+ hyundai_l = "Hyundai L"
+ hyundai_m = "Hyundai M"
+ hyundai_n = "Hyundai N"
+ hyundai_o = "Hyundai O"
+ custom = "Developer"
+ obd_ii = "OBD-II"
+ nissan_a = "Nissan A"
+ nissan_b = "Nissan B"
+ mazda = "Mazda"
+ none = "None"
diff --git a/selfdrive/car/gm/values.py b/selfdrive/car/gm/values.py
index 65d42579d3..8ef33e8297 100644
--- a/selfdrive/car/gm/values.py
+++ b/selfdrive/car/gm/values.py
@@ -1,9 +1,10 @@
+from dataclasses import dataclass
from enum import Enum
from typing import Dict, List, Union
from cereal import car
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column
+from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column, Harness
Ecu = car.CarParams.Ecu
@@ -62,14 +63,20 @@ class Footnote(Enum):
Column.MODEL)
-CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = {
- CAR.HOLDEN_ASTRA: CarInfo("Holden Astra 2017", "Adaptive Cruise"),
- CAR.VOLT: CarInfo("Chevrolet Volt 2017-18", "Adaptive Cruise", footnotes=[Footnote.OBD_II], min_enable_speed=0),
- CAR.CADILLAC_ATS: CarInfo("Cadillac ATS Premium Performance 2018", "Adaptive Cruise"),
- CAR.MALIBU: CarInfo("Chevrolet Malibu Premier 2017", "Adaptive Cruise"),
- CAR.ACADIA: CarInfo("GMC Acadia 2018", "Adaptive Cruise", video_link="https://www.youtube.com/watch?v=0ZN6DdsBUZo", footnotes=[Footnote.OBD_II]),
- CAR.BUICK_REGAL: CarInfo("Buick Regal Essence 2018", "Adaptive Cruise"),
- CAR.ESCALADE_ESV: CarInfo("Cadillac Escalade ESV 2016", "ACC + LKAS", footnotes=[Footnote.OBD_II]),
+@dataclass
+class GMCarInfo(CarInfo):
+ package: str = "Adaptive Cruise"
+ harness: Enum = Harness.none
+
+
+CAR_INFO: Dict[str, Union[GMCarInfo, List[GMCarInfo]]] = {
+ CAR.HOLDEN_ASTRA: GMCarInfo("Holden Astra 2017", harness=Harness.custom),
+ CAR.VOLT: GMCarInfo("Chevrolet Volt 2017-18", footnotes=[Footnote.OBD_II], min_enable_speed=0, harness=Harness.custom),
+ CAR.CADILLAC_ATS: GMCarInfo("Cadillac ATS Premium Performance 2018"),
+ CAR.MALIBU: GMCarInfo("Chevrolet Malibu Premier 2017", harness=Harness.custom),
+ CAR.ACADIA: GMCarInfo("GMC Acadia 2018", video_link="https://www.youtube.com/watch?v=0ZN6DdsBUZo", footnotes=[Footnote.OBD_II]),
+ CAR.BUICK_REGAL: GMCarInfo("Buick Regal Essence 2018"),
+ CAR.ESCALADE_ESV: GMCarInfo("Cadillac Escalade ESV 2016", "ACC + LKAS", footnotes=[Footnote.OBD_II]),
}
diff --git a/selfdrive/car/honda/values.py b/selfdrive/car/honda/values.py
index 64c7dd8420..d575c0518d 100644
--- a/selfdrive/car/honda/values.py
+++ b/selfdrive/car/honda/values.py
@@ -5,7 +5,7 @@ from typing import Dict, List, Union
from cereal import car
from common.conversions import Conversions as CV
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column
+from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column, Harness
Ecu = car.CarParams.Ecu
VisualAlert = car.CarControl.HUDControl.VisualAlert
@@ -108,31 +108,31 @@ class HondaCarInfo(CarInfo):
CAR_INFO: Dict[str, Union[HondaCarInfo, List[HondaCarInfo]]] = {
CAR.ACCORD: [
- HondaCarInfo("Honda Accord 2018-21", "All", video_link="https://www.youtube.com/watch?v=mrUwlj3Mi58", min_steer_speed=3. * CV.MPH_TO_MS),
- HondaCarInfo("Honda Inspire 2018", "All", min_steer_speed=3. * CV.MPH_TO_MS),
+ HondaCarInfo("Honda Accord 2018-21", "All", video_link="https://www.youtube.com/watch?v=mrUwlj3Mi58", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch),
+ HondaCarInfo("Honda Inspire 2018", "All", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch),
],
- CAR.ACCORDH: HondaCarInfo("Honda Accord Hybrid 2018-21", "All", min_steer_speed=3. * CV.MPH_TO_MS),
- CAR.CIVIC: HondaCarInfo("Honda Civic 2016-18"),
+ CAR.ACCORDH: HondaCarInfo("Honda Accord Hybrid 2018-21", "All", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch),
+ CAR.CIVIC: HondaCarInfo("Honda Civic 2016-18", harness=Harness.nidec),
CAR.CIVIC_BOSCH: [
- HondaCarInfo("Honda Civic 2019-20", "All", video_link="https://www.youtube.com/watch?v=4Iz1Mz5LGF8", footnotes=[Footnote.CIVIC_DIESEL], min_steer_speed=2. * CV.MPH_TO_MS),
- HondaCarInfo("Honda Civic Hatchback 2017-21"),
+ HondaCarInfo("Honda Civic 2019-20", "All", video_link="https://www.youtube.com/watch?v=4Iz1Mz5LGF8", footnotes=[Footnote.CIVIC_DIESEL], min_steer_speed=2. * CV.MPH_TO_MS, harness=Harness.bosch),
+ HondaCarInfo("Honda Civic Hatchback 2017-21", harness=Harness.bosch),
],
- CAR.ACURA_ILX: HondaCarInfo("Acura ILX 2016-19", "AcuraWatch Plus", min_steer_speed=25. * CV.MPH_TO_MS),
- CAR.CRV: HondaCarInfo("Honda CR-V 2015-16", "Touring"),
- CAR.CRV_5G: HondaCarInfo("Honda CR-V 2017-21"),
+ CAR.ACURA_ILX: HondaCarInfo("Acura ILX 2016-19", "AcuraWatch Plus", min_steer_speed=25. * CV.MPH_TO_MS, harness=Harness.nidec),
+ CAR.CRV: HondaCarInfo("Honda CR-V 2015-16", "Touring", harness=Harness.nidec),
+ CAR.CRV_5G: HondaCarInfo("Honda CR-V 2017-21", harness=Harness.bosch),
# CAR.CRV_EU: HondaCarInfo("Honda CR-V EU", "Touring"), # Euro version of CRV Touring
- CAR.CRV_HYBRID: HondaCarInfo("Honda CR-V Hybrid 2017-19"),
- CAR.FIT: HondaCarInfo("Honda Fit 2018-19"),
- CAR.FREED: HondaCarInfo("Honda Freed 2020"),
- CAR.HRV: HondaCarInfo("Honda HR-V 2019-20"),
- CAR.ODYSSEY: HondaCarInfo("Honda Odyssey 2018-20", min_steer_speed=0.),
- CAR.ACURA_RDX: HondaCarInfo("Acura RDX 2016-18", "AcuraWatch Plus"),
- CAR.ACURA_RDX_3G: HondaCarInfo("Acura RDX 2019-21", "All", min_steer_speed=3. * CV.MPH_TO_MS),
- CAR.PILOT: HondaCarInfo("Honda Pilot 2016-21"),
- CAR.PASSPORT: HondaCarInfo("Honda Passport 2019-21", "All"),
- CAR.RIDGELINE: HondaCarInfo("Honda Ridgeline 2017-22"),
- CAR.INSIGHT: HondaCarInfo("Honda Insight 2019-21", "All", min_steer_speed=3. * CV.MPH_TO_MS),
- CAR.HONDA_E: HondaCarInfo("Honda e 2020", "All", min_steer_speed=3. * CV.MPH_TO_MS),
+ CAR.CRV_HYBRID: HondaCarInfo("Honda CR-V Hybrid 2017-19", harness=Harness.bosch),
+ CAR.FIT: HondaCarInfo("Honda Fit 2018-19", harness=Harness.nidec),
+ CAR.FREED: HondaCarInfo("Honda Freed 2020", harness=Harness.nidec),
+ CAR.HRV: HondaCarInfo("Honda HR-V 2019-20", harness=Harness.nidec),
+ CAR.ODYSSEY: HondaCarInfo("Honda Odyssey 2018-20", min_steer_speed=0., harness=Harness.nidec),
+ CAR.ACURA_RDX: HondaCarInfo("Acura RDX 2016-18", "AcuraWatch Plus", harness=Harness.nidec),
+ CAR.ACURA_RDX_3G: HondaCarInfo("Acura RDX 2019-21", "All", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch),
+ CAR.PILOT: HondaCarInfo("Honda Pilot 2016-21", harness=Harness.nidec),
+ CAR.PASSPORT: HondaCarInfo("Honda Passport 2019-21", "All", harness=Harness.nidec),
+ CAR.RIDGELINE: HondaCarInfo("Honda Ridgeline 2017-22", harness=Harness.nidec),
+ CAR.INSIGHT: HondaCarInfo("Honda Insight 2019-21", "All", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch),
+ CAR.HONDA_E: HondaCarInfo("Honda e 2020", "All", min_steer_speed=3. * CV.MPH_TO_MS, harness=Harness.bosch),
}
diff --git a/selfdrive/car/hyundai/values.py b/selfdrive/car/hyundai/values.py
index 1a20ab6d6b..c1a3b534c8 100644
--- a/selfdrive/car/hyundai/values.py
+++ b/selfdrive/car/hyundai/values.py
@@ -4,7 +4,7 @@ from typing import Dict, List, Union
from cereal import car
from common.conversions import Conversions as CV
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarInfo
+from selfdrive.car.docs_definitions import CarInfo, Harness
Ecu = car.CarParams.Ecu
# Steer torque limits
@@ -82,53 +82,66 @@ class HyundaiCarInfo(CarInfo):
CAR_INFO: Dict[str, Union[HyundaiCarInfo, List[HyundaiCarInfo]]] = {
- CAR.ELANTRA: HyundaiCarInfo("Hyundai Elantra 2017-19", min_enable_speed=19 * CV.MPH_TO_MS),
- CAR.ELANTRA_2021: HyundaiCarInfo("Hyundai Elantra 2021-22", video_link="https://youtu.be/_EdYQtV52-c"),
- CAR.ELANTRA_HEV_2021: HyundaiCarInfo("Hyundai Elantra Hybrid 2021-22", video_link="https://youtu.be/_EdYQtV52-c"),
- CAR.HYUNDAI_GENESIS: HyundaiCarInfo("Hyundai Genesis 2015-16", min_enable_speed=19 * CV.MPH_TO_MS),
- CAR.IONIQ: HyundaiCarInfo("Hyundai Ioniq Hybrid 2017-19"),
- CAR.IONIQ_HEV_2022: HyundaiCarInfo("Hyundai Ioniq Hybrid 2020-22", "SCC + LFA"),
- CAR.IONIQ_EV_LTD: HyundaiCarInfo("Hyundai Ioniq Electric 2019"),
- CAR.IONIQ_EV_2020: HyundaiCarInfo("Hyundai Ioniq Electric 2020"),
- CAR.IONIQ_PHEV_2019: HyundaiCarInfo("Hyundai Ioniq Plug-in Hybrid 2019", "SCC + LKAS"),
- CAR.IONIQ_PHEV: HyundaiCarInfo("Hyundai Ioniq Plug-in Hybrid 2020-21"),
- CAR.KONA: HyundaiCarInfo("Hyundai Kona 2020"),
- CAR.KONA_EV: HyundaiCarInfo("Hyundai Kona Electric 2018-21"),
- CAR.KONA_HEV: HyundaiCarInfo("Hyundai Kona Hybrid 2020"),
- CAR.SANTA_FE: HyundaiCarInfo("Hyundai Santa Fe 2019-20", "All"),
- CAR.SANTA_FE_2022: HyundaiCarInfo("Hyundai Santa Fe 2021-22", "All"),
- CAR.SANTA_FE_HEV_2022: HyundaiCarInfo("Hyundai Santa Fe Hybrid 2022", "All"),
- CAR.SANTA_FE_PHEV_2022: HyundaiCarInfo("Hyundai Santa Fe Plug-in Hybrid 2022", "All"),
- CAR.SONATA: HyundaiCarInfo("Hyundai Sonata 2020-22", "All", video_link="https://www.youtube.com/watch?v=ix63r9kE3Fw"),
- CAR.SONATA_LF: HyundaiCarInfo("Hyundai Sonata 2018-19"),
- CAR.TUCSON_DIESEL_2019: HyundaiCarInfo("Hyundai Tucson Diesel 2019", "SCC + LKAS"),
+ CAR.ELANTRA: HyundaiCarInfo("Hyundai Elantra 2017-19", min_enable_speed=19 * CV.MPH_TO_MS, harness=Harness.hyundai_b),
+ CAR.ELANTRA_2021: HyundaiCarInfo("Hyundai Elantra 2021-22", video_link="https://youtu.be/_EdYQtV52-c", harness=Harness.hyundai_k),
+ CAR.ELANTRA_HEV_2021: HyundaiCarInfo("Hyundai Elantra Hybrid 2021-22", video_link="https://youtu.be/_EdYQtV52-c", harness=Harness.hyundai_k),
+ CAR.HYUNDAI_GENESIS: HyundaiCarInfo("Hyundai Genesis 2015-16", min_enable_speed=19 * CV.MPH_TO_MS, harness=Harness.hyundai_j),
+ CAR.IONIQ: HyundaiCarInfo("Hyundai Ioniq Hybrid 2017-19", harness=Harness.hyundai_c),
+ CAR.IONIQ_HEV_2022: HyundaiCarInfo("Hyundai Ioniq Hybrid 2020-22", "SCC + LFA", harness=Harness.hyundai_h),
+ CAR.IONIQ_EV_LTD: HyundaiCarInfo("Hyundai Ioniq Electric 2019", harness=Harness.hyundai_c),
+ CAR.IONIQ_EV_2020: HyundaiCarInfo("Hyundai Ioniq Electric 2020", harness=Harness.hyundai_h),
+ CAR.IONIQ_PHEV_2019: HyundaiCarInfo("Hyundai Ioniq Plug-in Hybrid 2019", harness=Harness.hyundai_c),
+ CAR.IONIQ_PHEV: HyundaiCarInfo("Hyundai Ioniq Plug-in Hybrid 2020-21", harness=Harness.hyundai_h),
+ CAR.KONA: HyundaiCarInfo("Hyundai Kona 2020", harness=Harness.hyundai_b),
+ CAR.KONA_EV: HyundaiCarInfo("Hyundai Kona Electric 2018-21", harness=Harness.hyundai_g),
+ CAR.KONA_HEV: HyundaiCarInfo("Hyundai Kona Hybrid 2020", harness=Harness.hyundai_i),
+ CAR.SANTA_FE: HyundaiCarInfo("Hyundai Santa Fe 2019-20", "All", harness=Harness.hyundai_d),
+ CAR.SANTA_FE_2022: HyundaiCarInfo("Hyundai Santa Fe 2021-22", "All", harness=Harness.hyundai_l),
+ CAR.SANTA_FE_HEV_2022: HyundaiCarInfo("Hyundai Santa Fe Hybrid 2022", "All", harness=Harness.hyundai_l),
+ CAR.SANTA_FE_PHEV_2022: HyundaiCarInfo("Hyundai Santa Fe Plug-in Hybrid 2022", "All", harness=Harness.hyundai_l),
+ CAR.SONATA: HyundaiCarInfo("Hyundai Sonata 2020-22", "All", video_link="https://www.youtube.com/watch?v=ix63r9kE3Fw", harness=Harness.hyundai_a),
+ CAR.SONATA_LF: HyundaiCarInfo("Hyundai Sonata 2018-19", harness=Harness.hyundai_e),
+ CAR.TUCSON_DIESEL_2019: HyundaiCarInfo("Hyundai Tucson Diesel 2019", harness=Harness.hyundai_l),
CAR.PALISADE: [
- HyundaiCarInfo("Hyundai Palisade 2020-21", "All", video_link="https://youtu.be/TAnDqjF4fDY?t=456"),
- HyundaiCarInfo("Kia Telluride 2020"),
+ HyundaiCarInfo("Hyundai Palisade 2020-21", "All", video_link="https://youtu.be/TAnDqjF4fDY?t=456", harness=Harness.hyundai_h),
+ HyundaiCarInfo("Kia Telluride 2020", harness=Harness.hyundai_h),
],
- CAR.VELOSTER: HyundaiCarInfo("Hyundai Veloster 2019-20", min_enable_speed=5. * CV.MPH_TO_MS),
- CAR.SONATA_HYBRID: HyundaiCarInfo("Hyundai Sonata Hybrid 2020-22", "All"),
+ CAR.VELOSTER: HyundaiCarInfo("Hyundai Veloster 2019-20", min_enable_speed=5. * CV.MPH_TO_MS, harness=Harness.hyundai_e),
+ CAR.SONATA_HYBRID: HyundaiCarInfo("Hyundai Sonata Hybrid 2020-22", "All", harness=Harness.hyundai_a),
# Kia
- CAR.KIA_FORTE: HyundaiCarInfo("Kia Forte 2018-21"),
- CAR.KIA_K5_2021: HyundaiCarInfo("Kia K5 2021-22", "SCC + LFA"),
- CAR.KIA_NIRO_EV: HyundaiCarInfo("Kia Niro Electric 2019-22", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo"),
- CAR.KIA_NIRO_HEV: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2019", min_enable_speed=10. * CV.MPH_TO_MS),
- CAR.KIA_NIRO_HEV_2021: HyundaiCarInfo("Kia Niro Hybrid 2021-22"),
+ CAR.KIA_FORTE: [
+ HyundaiCarInfo("Kia Forte 2018", harness=Harness.hyundai_b),
+ HyundaiCarInfo("Kia Forte 2019-21", harness=Harness.hyundai_g),
+ ],
+ CAR.KIA_K5_2021: HyundaiCarInfo("Kia K5 2021-22", "SCC + LFA", harness=Harness.hyundai_a),
+ CAR.KIA_NIRO_EV: [
+ HyundaiCarInfo("Kia Niro Electric 2019-20", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", harness=Harness.hyundai_f),
+ HyundaiCarInfo("Kia Niro Electric 2021", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", harness=Harness.hyundai_c),
+ HyundaiCarInfo("Kia Niro Electric 2022", "All", video_link="https://www.youtube.com/watch?v=lT7zcG6ZpGo", harness=Harness.hyundai_h),
+ ],
+ CAR.KIA_NIRO_HEV: HyundaiCarInfo("Kia Niro Plug-in Hybrid 2019", min_enable_speed=10. * CV.MPH_TO_MS, harness=Harness.hyundai_c),
+ CAR.KIA_NIRO_HEV_2021: [
+ HyundaiCarInfo("Kia Niro Hybrid 2021", harness=Harness.hyundai_f), # TODO: could be hyundai_d, verify
+ HyundaiCarInfo("Kia Niro Hybrid 2022", harness=Harness.hyundai_h),
+ ],
CAR.KIA_OPTIMA: [
- HyundaiCarInfo("Kia Optima 2017", min_steer_speed=32. * CV.MPH_TO_MS),
- HyundaiCarInfo("Kia Optima 2019"),
+ HyundaiCarInfo("Kia Optima 2017", min_steer_speed=32. * CV.MPH_TO_MS, harness=Harness.hyundai_b),
+ HyundaiCarInfo("Kia Optima 2019", harness=Harness.hyundai_g),
+ ],
+ CAR.KIA_SELTOS: HyundaiCarInfo("Kia Seltos 2021", harness=Harness.hyundai_a),
+ CAR.KIA_SORENTO: [
+ HyundaiCarInfo("Kia Sorento 2018", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", harness=Harness.hyundai_c),
+ HyundaiCarInfo("Kia Sorento 2019", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8", harness=Harness.hyundai_e),
],
- CAR.KIA_SELTOS: HyundaiCarInfo("Kia Seltos 2021"),
- CAR.KIA_SORENTO: HyundaiCarInfo("Kia Sorento 2018-19", video_link="https://www.youtube.com/watch?v=Fkh3s6WHJz8"),
- CAR.KIA_STINGER: HyundaiCarInfo("Kia Stinger 2018", video_link="https://www.youtube.com/watch?v=MJ94qoofYw0"),
- CAR.KIA_CEED: HyundaiCarInfo("Kia Ceed 2019"),
+ CAR.KIA_STINGER: HyundaiCarInfo("Kia Stinger 2018", video_link="https://www.youtube.com/watch?v=MJ94qoofYw0", harness=Harness.hyundai_c),
+ CAR.KIA_CEED: HyundaiCarInfo("Kia Ceed 2019", harness=Harness.hyundai_e),
# Genesis
- CAR.GENESIS_G70: HyundaiCarInfo("Genesis G70 2018", "All"),
- CAR.GENESIS_G70_2020: HyundaiCarInfo("Genesis G70 2020", "All"),
- CAR.GENESIS_G80: HyundaiCarInfo("Genesis G80 2018", "All"),
- CAR.GENESIS_G90: HyundaiCarInfo("Genesis G90 2018", "All"),
+ CAR.GENESIS_G70: HyundaiCarInfo("Genesis G70 2018", "All", harness=Harness.hyundai_f),
+ CAR.GENESIS_G70_2020: HyundaiCarInfo("Genesis G70 2020", "All", harness=Harness.hyundai_f),
+ CAR.GENESIS_G80: HyundaiCarInfo("Genesis G80 2018", "All", harness=Harness.hyundai_h),
+ CAR.GENESIS_G90: HyundaiCarInfo("Genesis G90 2018", "All", harness=Harness.hyundai_c),
}
class Buttons:
diff --git a/selfdrive/car/mazda/values.py b/selfdrive/car/mazda/values.py
index a196b82a9e..5c80303dbc 100644
--- a/selfdrive/car/mazda/values.py
+++ b/selfdrive/car/mazda/values.py
@@ -1,8 +1,9 @@
from dataclasses import dataclass
+from enum import Enum
from typing import Dict, List, Union
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarInfo
+from selfdrive.car.docs_definitions import CarInfo, Harness
from cereal import car
Ecu = car.CarParams.Ecu
@@ -31,6 +32,7 @@ class CAR:
@dataclass
class MazdaCarInfo(CarInfo):
package: str = "All"
+ harness: Enum = Harness.mazda
CAR_INFO: Dict[str, Union[MazdaCarInfo, List[MazdaCarInfo]]] = {
diff --git a/selfdrive/car/nissan/values.py b/selfdrive/car/nissan/values.py
index 51ee7b5286..7c025ad6d6 100644
--- a/selfdrive/car/nissan/values.py
+++ b/selfdrive/car/nissan/values.py
@@ -1,8 +1,9 @@
from dataclasses import dataclass
from typing import Dict, List, Union
+from enum import Enum
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarInfo
+from selfdrive.car.docs_definitions import CarInfo, Harness
from cereal import car
Ecu = car.CarParams.Ecu
@@ -28,13 +29,14 @@ class CAR:
@dataclass
class NissanCarInfo(CarInfo):
package: str = "ProPILOT"
+ harness: Enum = Harness.nissan_a
CAR_INFO: Dict[str, Union[NissanCarInfo, List[NissanCarInfo]]] = {
CAR.XTRAIL: NissanCarInfo("Nissan X-Trail 2017"),
CAR.LEAF: NissanCarInfo("Nissan Leaf 2018-22"),
CAR.ROGUE: NissanCarInfo("Nissan Rogue 2018-20"),
- CAR.ALTIMA: NissanCarInfo("Nissan Altima 2019-20"),
+ CAR.ALTIMA: NissanCarInfo("Nissan Altima 2019-20", harness=Harness.nissan_b),
}
FINGERPRINTS = {
diff --git a/selfdrive/car/subaru/values.py b/selfdrive/car/subaru/values.py
index 2aca2af576..6e81fcb1b3 100644
--- a/selfdrive/car/subaru/values.py
+++ b/selfdrive/car/subaru/values.py
@@ -1,11 +1,14 @@
from dataclasses import dataclass
+from enum import Enum
from typing import Dict, List, Union
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarInfo
+from selfdrive.car.docs_definitions import CarInfo, Harness
from cereal import car
+
Ecu = car.CarParams.Ecu
+
class CarControllerParams:
def __init__(self, CP):
if CP.carFingerprint == CAR.IMPREZA_2020:
@@ -34,6 +37,7 @@ class CAR:
@dataclass
class SubaruCarInfo(CarInfo):
package: str = "EyeSight"
+ harness: Enum = Harness.subaru
CAR_INFO: Dict[str, Union[SubaruCarInfo, List[SubaruCarInfo]]] = {
diff --git a/selfdrive/car/toyota/values.py b/selfdrive/car/toyota/values.py
index e3cb0b091b..e047396c7b 100644
--- a/selfdrive/car/toyota/values.py
+++ b/selfdrive/car/toyota/values.py
@@ -6,7 +6,7 @@ from typing import Dict, List, Union
from cereal import car
from common.conversions import Conversions as CV
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column, Star
+from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column, Harness, Star
Ecu = car.CarParams.Ecu
MIN_ACC_SPEED = 19. * CV.MPH_TO_MS
@@ -100,6 +100,7 @@ class Footnote(Enum):
class ToyotaCarInfo(CarInfo):
package: str = "All"
good_torque: bool = True
+ harness: Enum = Harness.toyota
CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = {
diff --git a/selfdrive/car/volkswagen/values.py b/selfdrive/car/volkswagen/values.py
index 3555b29082..abba70fbba 100755
--- a/selfdrive/car/volkswagen/values.py
+++ b/selfdrive/car/volkswagen/values.py
@@ -5,13 +5,14 @@ from typing import Dict, List, Union
from cereal import car
from selfdrive.car import dbc_dict
-from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column
+from selfdrive.car.docs_definitions import CarFootnote, CarInfo, Column, Harness
Ecu = car.CarParams.Ecu
NetworkLocation = car.CarParams.NetworkLocation
TransmissionType = car.CarParams.TransmissionType
GearShifter = car.CarState.GearShifter
+
class CarControllerParams:
HCA_STEP = 2 # HCA_01 message frequency 50Hz
LDW_STEP = 10 # LDW_02 message frequency 10Hz
@@ -30,13 +31,16 @@ class CarControllerParams:
STEER_DRIVER_MULTIPLIER = 3 # weight driver torque heavily
STEER_DRIVER_FACTOR = 1 # from dbc
+
class CANBUS:
pt = 0
cam = 2
+
class DBC_FILES:
mqb = "vw_mqb_2010" # Used for all cars with MQB-style CAN messaging
+
DBC = defaultdict(lambda: dbc_dict(DBC_FILES.mqb, None)) # type: Dict[str, Dict[str, str]]
BUTTON_STATES = {
@@ -60,6 +64,7 @@ MQB_LDW_MESSAGES = {
"laneAssistDeactivated": 10, # "Lane Assist deactivated." silent with persistent icon afterward
}
+
# Check the 7th and 8th characters of the VIN before adding a new CAR. If the
# chassis code is already listed below, don't add a new CAR, just add to the
# FW_VERSIONS for that existing CAR.
@@ -110,11 +115,12 @@ class Footnote(Enum):
class VWCarInfo(CarInfo):
package: str = "Driver Assistance"
good_torque: bool = True
+ harness: Enum = Harness.vw
CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = {
- CAR.ARTEON_MK1: VWCarInfo("Volkswagen Arteon 2018, 2021", footnotes=[Footnote.VW_HARNESS]),
- CAR.ATLAS_MK1: VWCarInfo("Volkswagen Atlas 2018-19, 2022", footnotes=[Footnote.VW_HARNESS]),
+ CAR.ARTEON_MK1: VWCarInfo("Volkswagen Arteon 2018, 2021", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
+ CAR.ATLAS_MK1: VWCarInfo("Volkswagen Atlas 2018-19, 2022", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
CAR.GOLF_MK7: [
VWCarInfo("Volkswagen e-Golf 2014, 2018-20"),
VWCarInfo("Volkswagen Golf 2015-20"),
@@ -131,15 +137,15 @@ CAR_INFO: Dict[str, Union[VWCarInfo, List[VWCarInfo]]] = {
],
CAR.PASSAT_MK8: VWCarInfo("Volkswagen Passat 2016-18", footnotes=[Footnote.PASSAT]),
CAR.POLO_MK6: VWCarInfo("Volkswagen Polo 2020"),
- CAR.TAOS_MK1: VWCarInfo("Volkswagen Taos 2022", footnotes=[Footnote.VW_HARNESS]),
- CAR.TCROSS_MK1: VWCarInfo("Volkswagen T-Cross 2021", footnotes=[Footnote.VW_HARNESS]),
- CAR.TIGUAN_MK2: VWCarInfo("Volkswagen Tiguan 2019-22", footnotes=[Footnote.VW_HARNESS]),
+ CAR.TAOS_MK1: VWCarInfo("Volkswagen Taos 2022", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
+ CAR.TCROSS_MK1: VWCarInfo("Volkswagen T-Cross 2021", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
+ CAR.TIGUAN_MK2: VWCarInfo("Volkswagen Tiguan 2019-22", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
CAR.TOURAN_MK2: VWCarInfo("Volkswagen Touran 2017"),
CAR.TRANSPORTER_T61: [
- VWCarInfo("Volkswagen Caravelle 2020", footnotes=[Footnote.VW_HARNESS]),
- VWCarInfo("Volkswagen California 2021", footnotes=[Footnote.VW_HARNESS]),
+ VWCarInfo("Volkswagen Caravelle 2020", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
+ VWCarInfo("Volkswagen California 2021", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
],
- CAR.TROC_MK1: VWCarInfo("Volkswagen T-Roc 2021", footnotes=[Footnote.VW_HARNESS]),
+ CAR.TROC_MK1: VWCarInfo("Volkswagen T-Roc 2021", footnotes=[Footnote.VW_HARNESS], harness=Harness.j533),
CAR.AUDI_A3_MK3: [
VWCarInfo("Audi A3 2014-19", "ACC + Lane Assist"),
VWCarInfo("Audi A3 Sportback e-tron 2017-18", "ACC + Lane Assist"),