diff --git a/docs/CARS_generated.md b/docs/CARS_generated.md
index b7a910d163..7b8aeaacb9 100644
--- a/docs/CARS_generated.md
+++ b/docs/CARS_generated.md
@@ -188,16 +188,13 @@ Tier Criteria:
|Volkswagen|Caravelle 20206|Driver Assistance|
|
|
|
|
|
-1When disconnecting the Driver Support Unit (DSU), openpilot ACC will replace stock ACC. ***NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).***
+1When disconnecting the Driver Support Unit (DSU), openpilot Adaptive Cruise Control (ACC) will replace stock Adaptive Cruise Control (ACC). NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).
228mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.
-3When disabling the radar, openpilot ACC will replace stock ACC. ***NOTE: disabling the radar disables Automatic Emergency Braking (AEB).***
-4Requires an [OBD-II car harness](https://comma.ai/shop/products/comma-car-harness) and [community built ASCM harness](https://github.com/commaai/openpilot/wiki/GM#hardware). ***NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).***
-5Not including the China market Kamiq, which is based on the (currently) unsupported PQ34 platform.
-6Not including the USA/China market Passat, which is based on the (currently) unsupported PQ35/NMS platform.
-7Model-years 2021 and beyond may have a new camera harness design, which isn't yet available from the comma store. Before ordering,
-remove the Lane Assist camera cover and check to see if the connector is black (older design) or light brown (newer design). For the newer design,
-in the interim, choose "VW J533 Development" from the vehicle drop-down for a harness that integrates at the CAN gateway inside the dashboard.
-Community Maintained Cars and Features are not verified by comma to meet our [safety model](SAFETY.md). Be extra cautious using them.
+3Requires 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).
+4Not including the China market Kamiq, which is based on the (currently) unsupported PQ34 platform.
+5Not including the USA/China market Passat, which is based on the (currently) unsupported PQ35/NMS platform.
+6Model-years 2021 and beyond may have a new camera harness design, which isn't yet available from the comma store. Before ordering, remove the Lane Assist camera cover and check to see if the connector is black (older design) or light brown (newer design). For the newer design, in the interim, choose "VW J533 Development" from the vehicle drop-down for a harness that integrates at the CAN gateway inside the dashboard.
+7An inaccurate steering wheel angle sensor makes precise control difficult.
## Community Maintained Cars
Although they're not upstream, the community has openpilot running on other makes and models. See the 'Community Supported Models' section of each make [on our wiki](https://wiki.comma.ai/).
\ No newline at end of file
diff --git a/docs/CARS_template.md b/docs/CARS_template.md
index 40a482301b..55304cb550 100644
--- a/docs/CARS_template.md
+++ b/docs/CARS_template.md
@@ -27,16 +27,9 @@ Tier Criteria:
{% endfor %}
-1When disconnecting the Driver Support Unit (DSU), openpilot ACC will replace stock ACC. ***NOTE: disconnecting the DSU disables Automatic Emergency Braking (AEB).***
-228mph for Camry 4CYL L, 4CYL LE and 4CYL SE which don't have Full-Speed Range Dynamic Radar Cruise Control.
-3When disabling the radar, openpilot ACC will replace stock ACC. ***NOTE: disabling the radar disables Automatic Emergency Braking (AEB).***
-4Requires an [OBD-II car harness](https://comma.ai/shop/products/comma-car-harness) and [community built ASCM harness](https://github.com/commaai/openpilot/wiki/GM#hardware). ***NOTE: disconnecting the ASCM disables Automatic Emergency Braking (AEB).***
-5Not including the China market Kamiq, which is based on the (currently) unsupported PQ34 platform.
-6Not including the USA/China market Passat, which is based on the (currently) unsupported PQ35/NMS platform.
-7Model-years 2021 and beyond may have a new camera harness design, which isn't yet available from the comma store. Before ordering,
-remove the Lane Assist camera cover and check to see if the connector is black (older design) or light brown (newer design). For the newer design,
-in the interim, choose "VW J533 Development" from the vehicle drop-down for a harness that integrates at the CAN gateway inside the dashboard.
-Community Maintained Cars and Features are not verified by comma to meet our [safety model](SAFETY.md). Be extra cautious using them.
+{% for exception in exceptions %}
+{{loop.index}}{{exception}}
+{% endfor %}
## Community Maintained Cars
Although they're not upstream, the community has openpilot running on other makes and models. See the 'Community Supported Models' section of each make [on our wiki](https://wiki.comma.ai/).
diff --git a/docs/cars.py b/docs/cars.py
index d5e007ab6d..c27f8b8fb2 100755
--- a/docs/cars.py
+++ b/docs/cars.py
@@ -138,8 +138,9 @@ class Car:
def get_tiered_cars():
- # Keep track of cars sorted by make, model name, and year
+ # Keep track of cars while sorting by make, model name, and year
tiered_cars = {tier: SortedList(key=lambda car: car.make + car.model) for tier in Tier}
+
for _, models in get_interface_attr("CAR_INFO").items():
for model, car_info in models.items():
# Hyundai exception: all have openpilot longitudinal
@@ -158,7 +159,7 @@ def get_tiered_cars():
car = Car(_car_info, CP)
tiered_cars[car.tier].add(car)
- # Return tier name and car rows
+ # Return tier name and car rows for each tier
for tier, cars in tiered_cars.items():
yield [tier.name.title(), map(lambda car: car.row, cars)]
@@ -168,7 +169,8 @@ def generate_cars_md(tiered_cars):
with open(template_fn, "r") as f:
template = jinja2.Template(f.read(), trim_blocks=True, lstrip_blocks=True) # TODO: remove lstrip_blocks if not needed
- return template.render(tiers=tiered_cars, columns=[column.value for column in Column])
+ exceptions = [exception.text for exception in CAR_EXCEPTIONS]
+ return template.render(tiers=tiered_cars, columns=[column.value for column in Column], exceptions=exceptions)
if __name__ == "__main__":