diff --git a/docs/CARS.md b/docs/CARS.md
index ea1efc969b..b9dbf88242 100644
--- a/docs/CARS.md
+++ b/docs/CARS.md
@@ -34,6 +34,177 @@ How We Rate The Cars
**All supported cars can move between the tiers as support changes.**
+## Gold Cars
+
+|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|Actively Maintained|
+|---|---|---|:---:|:---:|:---:|:---:|:---:|
+|Genesis|G70 2020|All|
|
|
|
|
|
+|Hyundai|Palisade 2020-21|All|
|
|
|
|
|
+|Hyundai|Santa Fe 2019-20|All|
|
|
|
|
|
+|Hyundai|Sonata 2020-22|All|
|
|
|
|
|
+|Hyundai|Sonata Hybrid 2021-22|All|
|
|
|
|
|
+|Kia|Niro Electric 2019-22|All|
|
|
|
|
|
+|Kia|Telluride 2020|SCC + LKAS|
|
|
|
|
|
+|Lexus|ES 2019-21|All|
|
|
|
|
|
+|Lexus|ES Hybrid 2019-21|All|
|
|
|
|
|
+|Lexus|NX 2020|All|
|
|
|
|
|
+|Lexus|RX 2020-21|All|
|
|
|
|
|
+|Lexus|RX Hybrid 2020-21|All|
|
|
|
|
|
+|Lexus|UX Hybrid 2019-21|All|
|
|
|
|
|
+|Toyota|Alphard 2019-20|All|
|
|
|
|
|
+|Toyota|Avalon 2022|All|
|
|
|
|
|
+|Toyota|Camry 2021-22|All|
|
[7](#Footnotes)|
|
|
|
+|Toyota|Camry Hybrid 2021-22|All|
|
|
|
|
|
+|Toyota|Corolla 2020-22|All|
|
|
|
|
|
+|Toyota|Corolla Hatchback 2019-22|All|
|
|
|
|
|
+|Toyota|Corolla Hybrid 2020-22|All|
|
|
|
|
|
+|Toyota|Highlander 2020-22|All|
|
|
|
|
|
+|Toyota|Highlander Hybrid 2020-22|All|
|
|
|
|
|
+|Toyota|Mirai 2021|All|
|
|
|
|
|
+|Toyota|Prius 2021-22|All|
|
|
|
|
|
+|Toyota|Prius Prime 2021-22|All|
|
|
|
|
|
+|Toyota|RAV4 2019-21|All|
|
|
|
|
|
+|Toyota|RAV4 Hybrid 2019-21|All|
|
|
|
|
|
+
+## Silver Cars
+
+|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|Actively Maintained|
+|---|---|---|:---:|:---:|:---:|:---:|:---:|
+|Audi|A3 2014-19|ACC + Lane Assist|
|
|
|
|
|
+|Audi|A3 Sportback e-tron 2017-18|ACC + Lane Assist|
|
|
|
|
|
+|Audi|Q2 2018|ACC + Lane Assist|
|
|
|
|
|
+|Audi|Q3 2020-21|ACC + Lane Assist|
|
|
|
|
|
+|Audi|S3 2015-17|ACC + Lane Assist|
|
|
|
|
|
+|Genesis|G70 2018|All|
|
|
|
|
|
+|Genesis|G80 2018|All|
|
|
|
|
|
+|Hyundai|Elantra 2021-22|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Elantra Hybrid 2021|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Ioniq Electric 2020|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Ioniq Hybrid 2020-22|SCC + LFA|
|
|
|
|
|
+|Hyundai|Ioniq Plug-In Hybrid 2020-21|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Kona 2020|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Kona Electric 2018-19|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Kona Hybrid 2020|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Santa Fe 2021-22|All|
|
|
|
|
|
+|Hyundai|Santa Fe Hybrid 2022|All|
|
|
|
|
|
+|Hyundai|Santa Fe Plug-In Hybrid 2022|All|
|
|
|
|
|
+|Hyundai|Sonata 2018-19|SCC + LKAS|
|
|
|
|
|
+|Kia|Ceed 2019|SCC + LKAS|
|
|
|
|
|
+|Kia|Forte 2018-21|SCC + LKAS|
|
|
|
|
|
+|Kia|K5 2021-22|SCC + LFA|
|
|
|
|
|
+|Kia|Niro Hybrid 2021-22|SCC + LKAS|
|
|
|
|
|
+|Kia|Optima 2019|SCC + LKAS|
|
|
|
|
|
+|Kia|Seltos 2021|SCC + LKAS|
|
|
|
|
|
+|Kia|Sorento 2018-19|SCC + LKAS|
|
|
|
|
|
+|Kia|Stinger 2018|SCC + LKAS|
|
|
|
|
|
+|Lexus|CT Hybrid 2017-18|LSS|
[6](#Footnotes)|
|
|
|
|
+|Lexus|ES Hybrid 2017-18|LSS|
[6](#Footnotes)|
|
|
|
|
+|Lexus|NX 2018-19|All|
[6](#Footnotes)|
|
|
|
|
+|Lexus|NX Hybrid 2018-19|All|
[6](#Footnotes)|
|
|
|
|
+|Lexus|RX 2016-18|All|
[6](#Footnotes)|
|
|
|
|
+|Lexus|RX Hybrid 2016-19|All|
[6](#Footnotes)|
|
|
|
|
+|SEAT|Ateca 2018|Driver Assistance|
|
|
|
|
|
+|SEAT|Leon 2014-20|Driver Assistance|
|
|
|
|
|
+|Toyota|Avalon 2019-21|TSS-P|
[6](#Footnotes)|
|
|
|
|
+|Toyota|Avalon Hybrid 2019-21|TSS-P|
[6](#Footnotes)|
|
|
|
|
+|Toyota|C-HR 2017-21|All|
|
|
|
|
|
+|Toyota|C-HR Hybrid 2017-19|All|
|
|
|
|
|
+|Toyota|Camry 2018-20|All|
|
[7](#Footnotes)|
|
|
|
+|Toyota|Camry Hybrid 2018-20|All|
|
[7](#Footnotes)|
|
|
|
+|Toyota|Highlander 2017-19|All|
[6](#Footnotes)|
|
|
|
|
+|Toyota|Highlander Hybrid 2017-19|All|
[6](#Footnotes)|
|
|
|
|
+|Toyota|RAV4 Hybrid 2016-18|TSS-P|
[6](#Footnotes)|
|
|
|
|
+|Toyota|Sienna 2018-20|All|
[6](#Footnotes)|
|
|
|
|
+|Volkswagen|Arteon 2018, 2021[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Atlas 2018-19, 2022[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Golf 2015-20|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Golf Alltrack 2017-18|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Golf GTE 2016|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Golf GTI 2018-20|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Golf R 2016-19|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Golf SportWagen 2015|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Golf SportsVan 2016|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Jetta 2018-21|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Jetta GLI 2021|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Passat 2016-18[4](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Polo 2020|Driver Assistance|
|
|
|
|
|
+|Volkswagen|T-Cross 2021[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|T-Roc 2021[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Taos 2022[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Tiguan 2020-22[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Touran 2017|Driver Assistance|
|
|
|
|
|
+|Volkswagen|e-Golf 2014, 2019-20|Driver Assistance|
|
|
|
|
|
+|Škoda|Kamiq 2021[3](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Škoda|Karoq 2019|Driver Assistance|
|
|
|
|
|
+|Škoda|Kodiaq 2018-19|Driver Assistance|
|
|
|
|
|
+|Škoda|Octavia 2015, 2018-19|Driver Assistance|
|
|
|
|
|
+|Škoda|Octavia RS 2016|Driver Assistance|
|
|
|
|
|
+|Škoda|Scala 2020|Driver Assistance|
|
|
|
|
|
+|Škoda|Superb 2015-18|Driver Assistance|
|
|
|
|
|
+
+## Bronze Cars
+
+|Make|Model|Supported Package|openpilot ACC|Stop and Go|Steer to 0|Steering Torque|Actively Maintained|
+|---|---|---|:---:|:---:|:---:|:---:|:---:|
+|Acura|ILX 2016-19|AcuraWatch Plus|
|
|
|
|
|
+|Acura|RDX 2016-18|AcuraWatch Plus|
|
|
|
|
|
+|Acura|RDX 2019-21|All|
|
|
|
|
|
+|Cadillac|Escalade ESV 2016[2](#Footnotes)|ACC + LKAS|
|
|
|
|
|
+|Chevrolet|Volt 2017-18[2](#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|
|
|
|
|
|
+|GMC|Acadia 2018[2](#Footnotes)|Adaptive Cruise|
|
|
|
|
|
+|Genesis|G90 2018|All|
|
|
|
|
|
+|Honda|Accord 2018-21|All|
|
|
|
|
|
+|Honda|Accord Hybrid 2018-21|All|
|
|
|
|
|
+|Honda|CR-V 2015-16|Touring|
|
|
|
|
|
+|Honda|CR-V 2017-21|Honda Sensing|
|
|
|
|
|
+|Honda|CR-V Hybrid 2017-19|Honda Sensing|
|
|
|
|
|
+|Honda|Civic 2016-18|Honda Sensing|
|
|
|
|
|
+|Honda|Civic 2019-20|All|
|
|
[1](#Footnotes)|
|
|
+|Honda|Civic Hatchback 2017-21|Honda Sensing|
|
|
|
|
|
+|Honda|Fit 2018-19|Honda Sensing|
|
|
|
|
|
+|Honda|Freed 2020|Honda Sensing|
|
|
|
|
|
+|Honda|HR-V 2019-20|Honda Sensing|
|
|
|
|
|
+|Honda|Insight 2019-21|All|
|
|
|
|
|
+|Honda|Inspire 2018|All|
|
|
|
|
|
+|Honda|Odyssey 2018-20|Honda Sensing|
|
|
|
|
|
+|Honda|Passport 2019-21|All|
|
|
|
|
|
+|Honda|Pilot 2016-21|Honda Sensing|
|
|
|
|
|
+|Honda|Ridgeline 2017-21|Honda Sensing|
|
|
|
|
|
+|Honda|e 2020|All|
|
|
|
|
|
+|Hyundai|Elantra 2017-19|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Genesis 2015-16|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Ioniq Electric 2019|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Ioniq Hybrid 2017-19|SCC + LKAS|
|
|
|
|
|
+|Hyundai|Veloster 2019-20|SCC + LKAS|
|
|
|
|
|
+|Jeep|Grand Cherokee 2016-18|Adaptive Cruise|
|
|
|
|
|
+|Jeep|Grand Cherokee 2019-20|Adaptive Cruise|
|
|
|
|
|
+|Kia|Niro Plug-In Hybrid 2019|SCC + LKAS|
|
|
|
|
|
+|Kia|Optima 2017|SCC + LKAS|
|
|
|
|
|
+|Lexus|IS 2017-19|All|
|
|
|
|
|
+|Lexus|RC 2020|All|
|
|
|
|
|
+|Mazda|CX-5 2022|All|
|
|
|
|
|
+|Mazda|CX-9 2021|All|
|
|
|
|
|
+|Nissan|Altima 2019-20|ProPILOT|
|
|
|
|
|
+|Nissan|Leaf 2018-22|ProPILOT|
|
|
|
|
|
+|Nissan|Rogue 2018-20|ProPILOT|
|
|
|
|
|
+|Nissan|X-Trail 2017|ProPILOT|
|
|
|
|
|
+|Subaru|Ascent 2019|EyeSight|
|
|
|
|
|
+|Subaru|Crosstrek 2018-20|EyeSight|
|
|
|
|
|
+|Subaru|Forester 2019-21|EyeSight|
|
|
|
|
|
+|Subaru|Impreza 2017-19|EyeSight|
|
|
|
|
|
+|Toyota|Avalon 2016-18|TSS-P|
[6](#Footnotes)|
|
|
|
|
+|Toyota|Corolla 2017-19|All|
[6](#Footnotes)|
|
|
|
|
+|Toyota|Prius 2016-20|TSS-P|
[6](#Footnotes)|
|
|
[8](#Footnotes)|
|
+|Toyota|Prius Prime 2017-20|All|
[6](#Footnotes)|
|
|
[8](#Footnotes)|
|
+|Toyota|Prius v 2017|TSS-P|
[6](#Footnotes)|
|
|
[8](#Footnotes)|
|
+|Toyota|RAV4 2016-18|TSS-P|
[6](#Footnotes)|
|
|
|
|
+|Volkswagen|California 2021[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+|Volkswagen|Caravelle 2020[5](#Footnotes)|Driver Assistance|
|
|
|
|
|
+
12019 Honda Civic 1.6L Diesel Sedan does not have ALC below 12mph.
2Requires an [OBD-II](https://comma.ai/shop/products/comma-car-harness) car harness and [community built ASCM harness](https://github.com/commaai/openpilot/wiki/GM#hardware). NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).
diff --git a/selfdrive/car/docs.py b/selfdrive/car/docs.py
index c9516b0660..445197e9e1 100755
--- a/selfdrive/car/docs.py
+++ b/selfdrive/car/docs.py
@@ -6,7 +6,7 @@ from enum import Enum
from typing import Dict, Iterator, List, Tuple
from common.basedir import BASEDIR
-from selfdrive.car.docs_definitions import Column, Star, Tier
+from selfdrive.car.docs_definitions import Column, RowItem, Star, Tier
from selfdrive.car.car_helpers import interfaces, get_interface_attr
from selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR as HKG_RADAR_START_ADDR
from selfdrive.car.tests.routes import non_tested_cars
@@ -23,11 +23,9 @@ def get_all_footnotes():
ALL_FOOTNOTES: Dict[Enum, int] = get_all_footnotes()
CARS_MD_OUT = os.path.join(BASEDIR, "docs", "CARS.md")
CARS_MD_TEMPLATE = os.path.join(BASEDIR, "selfdrive", "car", "CARS_template.md")
-# CARS_MD_OUT = os.path.join(BASEDIR, "docs", "vehicles.vue")
-# CARS_MD_TEMPLATE = os.path.join(BASEDIR, "docs", "vehicles_template.vue")
-def get_tier_car_rows() -> Iterator[Tuple[str, List[str]]]: # TODO: update typing
+def get_tier_car_rows() -> List[Tuple[Tier, List[RowItem]]]:
tier_car_rows: Dict[Tier, list] = {tier: [] for tier in Tier}
for models in get_interface_attr("CAR_INFO").values():
@@ -48,12 +46,14 @@ def get_tier_car_rows() -> Iterator[Tuple[str, List[str]]]: # TODO: update typi
tier = {5: Tier.GOLD, 4: Tier.SILVER}.get(stars.count(Star.FULL), Tier.BRONZE)
tier_car_rows[tier].append(_car_info.get_row(ALL_FOOTNOTES, stars))
- # Return tier title and car rows for each tier
+ # Return tier enum and car rows for each tier
+ tiers = []
for tier, car_rows in tier_car_rows.items():
- yield tier, sorted(car_rows, key=lambda x: x[0].text + x[1].text)
+ tiers.append((tier, sorted(car_rows, key=lambda x: x[0].text + x[1].text)))
+ return tiers
-def generate_cars_md(tier_car_rows: Iterator[Tuple[str, List[str]]], template_fn: str) -> str:
+def generate_cars_md(tier_car_rows: List[Tuple[Tier, List[RowItem]]], template_fn: str) -> str:
with open(template_fn, "r") as f:
template = jinja2.Template(f.read(), trim_blocks=True, lstrip_blocks=True)