diff --git a/docs/CARS.md b/docs/CARS.md
index 12e93c850e..35cd035311 100644
--- a/docs/CARS.md
+++ b/docs/CARS.md
@@ -188,14 +188,14 @@ A supported vehicle is one that just works when you install a comma device. Ever
|Toyota|RAV4 Hybrid 2019-21|All|
|
|
|
|
|Toyota|RAV4 Hybrid 2022|All|
|
|
|
|
|Toyota|Sienna 2018-20|All|
[3](#footnotes)|
|
|
|
-|Volkswagen|Arteon 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
-|Volkswagen|Arteon eHybrid 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
-|Volkswagen|Arteon R 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Arteon 2018-22[7,8](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Arteon eHybrid 2020-22[7,8](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Arteon R 2020-22[7,8](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Atlas 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Atlas Cross Sport 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|California 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Caravelle 2020[7](#footnotes)|Driver Assistance|
|
|
|
|
-|Volkswagen|CC 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|CC 2018-22[7,8](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|e-Golf 2014-20|Driver Assistance|
|
|
|
|
|Volkswagen|Golf 2015-20[8](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Golf Alltrack 2015-19|Driver Assistance|
|
|
|
|
@@ -206,9 +206,9 @@ A supported vehicle is one that just works when you install a comma device. Ever
|Volkswagen|Golf SportsVan 2015-20|Driver Assistance|
|
|
|
|
|Volkswagen|Jetta 2018-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Jetta GLI 2021-22[7](#footnotes)|Driver Assistance|
|
|
|
|
-|Volkswagen|Passat 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Passat 2015-22[6,7,8](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Passat Alltrack 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
-|Volkswagen|Passat GTE 2015-22[7](#footnotes)|Driver Assistance|
|
|
|
|
+|Volkswagen|Passat GTE 2015-22[7,8](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Polo 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|Polo GTI 2020-22[7](#footnotes)|Driver Assistance|
|
|
|
|
|Volkswagen|T-Cross 2021[7](#footnotes)|Driver Assistance|
|
|
|
|
diff --git a/selfdrive/car/docs_definitions.py b/selfdrive/car/docs_definitions.py
index 01473e4cc3..015646972d 100644
--- a/selfdrive/car/docs_definitions.py
+++ b/selfdrive/car/docs_definitions.py
@@ -2,7 +2,7 @@ import re
from cereal import car
from collections import namedtuple
-from dataclasses import dataclass
+from dataclasses import dataclass, field
from enum import Enum
from typing import Dict, List, Optional, Tuple, Union, no_type_check
@@ -37,13 +37,9 @@ TierColumns = (Column.FSR_LONGITUDINAL, Column.FSR_STEERING, Column.STEERING_TOR
CarFootnote = namedtuple("CarFootnote", ["text", "column", "star"], defaults=[None])
-def get_footnote(footnotes: Optional[List[Enum]], column: Column) -> Optional[Enum]:
- # Returns applicable footnote given current column
- if footnotes is not None:
- for fn in footnotes:
- if fn.value.column == column:
- return fn
- return None
+def get_footnotes(footnotes: List[Enum], column: Column) -> List[Enum]:
+ # Returns applicable footnotes given current column
+ return [fn for fn in footnotes if fn.value.column == column]
def split_name(name: str) -> Tuple[str, str, str]:
@@ -61,7 +57,7 @@ class CarInfo:
name: str
package: str
video_link: Optional[str] = None
- footnotes: Optional[List[Enum]] = None
+ footnotes: List[Enum] = field(default_factory=list)
min_steer_speed: Optional[float] = None
min_enable_speed: Optional[float] = None
harness: Optional[Enum] = None
@@ -106,9 +102,9 @@ class CarInfo:
self.all_footnotes = all_footnotes
for column in StarColumns:
# Demote if footnote specifies a star
- footnote = get_footnote(self.footnotes, column)
- if footnote is not None and footnote.value.star is not None:
- self.row[column] = footnote.value.star
+ for fn in get_footnotes(self.footnotes, column):
+ if fn.value.star is not None:
+ self.row[column] = fn.value.star
# openpilot ACC star doesn't count for tiers
full_stars = [s for col, s in self.row.items() if col in TierColumns].count(Star.FULL)
@@ -129,9 +125,10 @@ class CarInfo:
elif column == Column.MODEL and len(self.years):
item += f" {self.years}"
- footnote = get_footnote(self.footnotes, column)
- if footnote is not None:
- item += footnote_tag.format(self.all_footnotes[footnote])
+ footnotes = get_footnotes(self.footnotes, column)
+ if len(footnotes):
+ sups = sorted([self.all_footnotes[fn] for fn in footnotes])
+ item += footnote_tag.format(f'{",".join(map(str, sups))}')
return item