diff --git a/docs/CARS.md b/docs/CARS.md index 1b37c7a17a..3a55860ec2 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -30,8 +30,8 @@ A supported vehicle is one that just works when you install a comma device. Ever |Audi|Q3 2020-21|ACC + Lane Assist||||| |Audi|RS3 2018|ACC + Lane Assist||||| |Audi|S3 2015-17|ACC + Lane Assist||||| -|Cadillac[](#footnotes)|Escalade ESV 2016[1](#footnotes)|ACC + LKAS[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Chevrolet[](#footnotes)|Volt 2017-18[1](#footnotes)|Adaptive Cruise[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Cadillac|Escalade ESV 2016[1](#footnotes)|ACC + LKAS||||| +|Chevrolet|Volt 2017-18[1](#footnotes)|Adaptive Cruise||||| |Chrysler|Pacifica 2017-18|Adaptive Cruise||||| |Chrysler|Pacifica 2019-20|Adaptive Cruise||||| |Chrysler|Pacifica 2021|All||||| @@ -42,11 +42,11 @@ A supported vehicle is one that just works when you install a comma device. Ever |Genesis|G70 2020|All||||| |Genesis|G80 2017-19|All||||| |Genesis|G90 2017-18|All||||| -|GMC[](#footnotes)|Acadia 2018[1](#footnotes)|Adaptive Cruise[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|GMC|Acadia 2018[1](#footnotes)|Adaptive Cruise||||| |Honda|Accord 2018-22|All||||| |Honda|Accord Hybrid 2018-22|All||||| |Honda|Civic 2016-18|Honda Sensing||||| -|Honda[](#footnotes)|Civic 2019-21[](#footnotes)|All[](#footnotes)|[](#footnotes)|[](#footnotes)|[2](#footnotes)|[](#footnotes)| +|Honda|Civic 2019-21|All|||[2](#footnotes)|| |Honda|Civic 2022|All||||| |Honda|Civic Hatchback 2017-21|Honda Sensing||||| |Honda|Civic Hatchback 2022|All||||| @@ -107,19 +107,19 @@ A supported vehicle is one that just works when you install a comma device. Ever |Kia|Sorento 2019|SCC + LKAS||||| |Kia|Stinger 2018-20|SCC + LKAS||||| |Kia|Telluride 2020|SCC + LKAS||||| -|Lexus[](#footnotes)|CT Hybrid 2017-18[](#footnotes)|LSS[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Lexus|CT Hybrid 2017-18|LSS|[3](#footnotes)|||| |Lexus|ES 2019-22|All||||| -|Lexus[](#footnotes)|ES Hybrid 2017-18[](#footnotes)|LSS[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Lexus|ES Hybrid 2017-18|LSS|[3](#footnotes)|||| |Lexus|ES Hybrid 2019-22|All||||| |Lexus|IS 2017-19|All||||| -|Lexus[](#footnotes)|NX 2018-19[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Lexus|NX 2018-19|All|[3](#footnotes)|||| |Lexus|NX 2020-21|All||||| -|Lexus[](#footnotes)|NX Hybrid 2018-19[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Lexus|NX Hybrid 2018-19|All|[3](#footnotes)|||| |Lexus|NX Hybrid 2020-21|All||||| |Lexus|RC 2017-20|All||||| -|Lexus[](#footnotes)|RX 2016-18[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Lexus|RX 2016-18|All|[3](#footnotes)|||| |Lexus|RX 2020-22|All||||| -|Lexus[](#footnotes)|RX Hybrid 2016-19[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Lexus|RX Hybrid 2016-19|All|[3](#footnotes)|||| |Lexus|RX Hybrid 2020-21|All||||| |Lexus|UX Hybrid 2019-22|All||||| |Mazda|CX-5 2022|All||||| @@ -139,7 +139,7 @@ A supported vehicle is one that just works when you install a comma device. Ever |Subaru|Impreza 2020-22|EyeSight||||| |Subaru|XV 2018-19|EyeSight||||| |Subaru|XV 2020-21|EyeSight||||| -|Škoda[](#footnotes)|Kamiq 2021[5](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Škoda|Kamiq 2021[5](#footnotes)|Driver Assistance||||| |Škoda|Karoq 2019|Driver Assistance||||| |Škoda|Kodiaq 2018-19|Driver Assistance||||| |Škoda|Octavia 2015, 2018-19|Driver Assistance||||| @@ -148,74 +148,74 @@ A supported vehicle is one that just works when you install a comma device. Ever |Škoda|Superb 2015-18|Driver Assistance||||| |Toyota|Alphard 2019-20|All||||| |Toyota|Alphard Hybrid 2021|All||||| -|Toyota[](#footnotes)|Avalon 2016[](#footnotes)|TSS-P[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|Avalon 2017-18[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|Avalon 2019-21[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Avalon 2016|TSS-P|[3](#footnotes)|||| +|Toyota|Avalon 2017-18|All|[3](#footnotes)|||| +|Toyota|Avalon 2019-21|All|[3](#footnotes)|||| |Toyota|Avalon 2022|All||||| -|Toyota[](#footnotes)|Avalon Hybrid 2019-21[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Avalon Hybrid 2019-21|All|[3](#footnotes)|||| |Toyota|Avalon Hybrid 2022|All||||| |Toyota|C-HR 2017-21|All||||| |Toyota|C-HR Hybrid 2017-19|All||||| -|Toyota[](#footnotes)|Camry 2018-20[](#footnotes)|All[](#footnotes)|[](#footnotes)|[4](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|Camry 2021-22[](#footnotes)|All[](#footnotes)|[](#footnotes)|[4](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|Camry Hybrid 2018-20[](#footnotes)|All[](#footnotes)|[](#footnotes)|[4](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Camry 2018-20|All||[4](#footnotes)||| +|Toyota|Camry 2021-22|All||[4](#footnotes)||| +|Toyota|Camry Hybrid 2018-20|All||[4](#footnotes)||| |Toyota|Camry Hybrid 2021-22|All||||| -|Toyota[](#footnotes)|Corolla 2017-19[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Corolla 2017-19|All|[3](#footnotes)|||| |Toyota|Corolla 2020-22|All||||| |Toyota|Corolla Cross (Non-US only) 2020-21|All||||| |Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All||||| |Toyota|Corolla Hatchback 2019-22|All||||| |Toyota|Corolla Hybrid 2020-22|All||||| -|Toyota[](#footnotes)|Highlander 2017-19[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Highlander 2017-19|All|[3](#footnotes)|||| |Toyota|Highlander 2020-22|All||||| -|Toyota[](#footnotes)|Highlander Hybrid 2017-19[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Highlander Hybrid 2017-19|All|[3](#footnotes)|||| |Toyota|Highlander Hybrid 2020-22|All||||| |Toyota|Mirai 2021|All||||| -|Toyota[](#footnotes)|Prius 2016[](#footnotes)|TSS-P[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|Prius 2017-20[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Prius 2016|TSS-P|[3](#footnotes)|||| +|Toyota|Prius 2017-20|All|[3](#footnotes)|||| |Toyota|Prius 2021-22|All||||| -|Toyota[](#footnotes)|Prius Prime 2017-20[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Prius Prime 2017-20|All|[3](#footnotes)|||| |Toyota|Prius Prime 2021-22|All||||| -|Toyota[](#footnotes)|Prius v 2017[](#footnotes)|TSS-P[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|RAV4 2016[](#footnotes)|TSS-P[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|RAV4 2017-18[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Prius v 2017|TSS-P|[3](#footnotes)|||| +|Toyota|RAV4 2016|TSS-P|[3](#footnotes)|||| +|Toyota|RAV4 2017-18|All|[3](#footnotes)|||| |Toyota|RAV4 2019-21|All||||| |Toyota|RAV4 2022|All||||| -|Toyota[](#footnotes)|RAV4 Hybrid 2016[](#footnotes)|TSS-P[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Toyota[](#footnotes)|RAV4 Hybrid 2017-18[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|RAV4 Hybrid 2016|TSS-P|[3](#footnotes)|||| +|Toyota|RAV4 Hybrid 2017-18|All|[3](#footnotes)|||| |Toyota|RAV4 Hybrid 2019-21|All||||| |Toyota|RAV4 Hybrid 2022|All||||| -|Toyota[](#footnotes)|Sienna 2018-20[](#footnotes)|All[](#footnotes)|[3](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Arteon 2018-22[7,8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Arteon eHybrid 2020-22[7,8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Arteon R 2020-22[7,8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Atlas 2018-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Atlas Cross Sport 2021-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|California 2021[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Caravelle 2020[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|CC 2018-22[7,8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Toyota|Sienna 2018-20|All|[3](#footnotes)|||| +|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,8](#footnotes)|Driver Assistance||||| |Volkswagen|e-Golf 2014-20|Driver Assistance||||| -|Volkswagen[](#footnotes)|Golf 2015-20[8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Volkswagen|Golf 2015-20[8](#footnotes)|Driver Assistance||||| |Volkswagen|Golf Alltrack 2015-19|Driver Assistance||||| |Volkswagen|Golf GTD 2015-20|Driver Assistance||||| |Volkswagen|Golf GTE 2015-20|Driver Assistance||||| |Volkswagen|Golf GTI 2015-21|Driver Assistance||||| -|Volkswagen[](#footnotes)|Golf R 2015-19[8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Volkswagen|Golf R 2015-19[8](#footnotes)|Driver Assistance||||| |Volkswagen|Golf SportsVan 2015-20|Driver Assistance||||| -|Volkswagen[](#footnotes)|Jetta 2018-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Jetta GLI 2021-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Passat 2015-22[7,6,8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Passat Alltrack 2015-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Passat GTE 2015-22[7,8](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Polo 2020-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Polo GTI 2020-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|T-Cross 2021[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|T-Roc 2021[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Taos 2022[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Teramont 2018-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Teramont Cross Sport 2021-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Teramont X 2021-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| -|Volkswagen[](#footnotes)|Tiguan 2019-22[7](#footnotes)|Driver Assistance[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)|[](#footnotes)| +|Volkswagen|Jetta 2018-22[7](#footnotes)|Driver Assistance||||| +|Volkswagen|Jetta GLI 2021-22[7](#footnotes)|Driver Assistance||||| +|Volkswagen|Passat 2015-22[7,6,8](#footnotes)|Driver Assistance||||| +|Volkswagen|Passat Alltrack 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||||| +|Volkswagen|T-Roc 2021[7](#footnotes)|Driver Assistance||||| +|Volkswagen|Taos 2022[7](#footnotes)|Driver Assistance||||| +|Volkswagen|Teramont 2018-22[7](#footnotes)|Driver Assistance||||| +|Volkswagen|Teramont Cross Sport 2021-22[7](#footnotes)|Driver Assistance||||| +|Volkswagen|Teramont X 2021-22[7](#footnotes)|Driver Assistance||||| +|Volkswagen|Tiguan 2019-22[7](#footnotes)|Driver Assistance||||| |Volkswagen|Touran 2017|Driver Assistance||||| diff --git a/selfdrive/car/docs_definitions.py b/selfdrive/car/docs_definitions.py index 71e40c910d..4307beafd6 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,11 +37,9 @@ TierColumns = (Column.FSR_LONGITUDINAL, Column.FSR_STEERING, Column.STEERING_TOR CarFootnote = namedtuple("CarFootnote", ["text", "column", "star"], defaults=[None]) -def get_footnotes(footnotes: Optional[List[Enum]], column: Column) -> Optional[List[Enum]]: +def get_footnotes(footnotes: List[Enum], column: Column) -> List[Enum]: # Returns applicable footnotes given current column - if footnotes is not None: - return [fn for fn in footnotes if fn.value.column == column] - return None + return [fn for fn in footnotes if fn.value.column == column] def split_name(name: str) -> Tuple[str, str, str]: @@ -59,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 @@ -104,11 +102,9 @@ class CarInfo: self.all_footnotes = all_footnotes for column in StarColumns: # Demote if footnote specifies a star - footnotes = get_footnotes(self.footnotes, column) - if footnotes is not None: - for fn in footnotes: - if fn.value.star is not None: - self.row[column] = fn.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) @@ -130,7 +126,7 @@ class CarInfo: item += f" {self.years}" footnotes = get_footnotes(self.footnotes, column) - if footnotes is not None: + if len(footnotes): item += footnote_tag.format(",".join([str(self.all_footnotes[fn]) for fn in footnotes])) return item