diff --git a/docs/CARS.md b/docs/CARS.md new file mode 100644 index 0000000000..4ba4d6ad3c --- /dev/null +++ b/docs/CARS.md @@ -0,0 +1,393 @@ + + +# Support Information for 336 Known Cars + +|Make|Model|Package|Support Level| +|---|---|---|:---:| +|Acura|ILX 2016-19|AcuraWatch Plus|[Upstream](#upstream)| +|Acura|RDX 2016-18|AcuraWatch Plus|[Upstream](#upstream)| +|Acura|RDX 2019-22|All|[Upstream](#upstream)| +|Audi|A3 2014-19|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Audi|A3 Sportback e-tron 2017-18|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Audi|A4 2016-24|All|[Not compatible](#flexray)| +|Audi|A5 2016-24|All|[Not compatible](#flexray)| +|Audi|Q2 2018|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Audi|Q3 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Audi|Q5 2017-24|All|[Not compatible](#flexray)| +|Audi|RS3 2018|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Audi|S3 2015-17|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Chevrolet|Bolt EUV 2022-23|Premier or Premier Redline Trim without Super Cruise Package|[Upstream](#upstream)| +|Chevrolet|Bolt EV 2022-23|2LT Trim with Adaptive Cruise Control Package|[Upstream](#upstream)| +|Chevrolet|Equinox 2019-22|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Chevrolet|Silverado 1500 2020-21|Safety Package II|[Upstream](#upstream)| +|Chevrolet|Trailblazer 2021-22|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Chrysler|Pacifica 2017-18|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Chrysler|Pacifica 2019-20|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Chrysler|Pacifica 2021-23|All|[Upstream](#upstream)| +|Chrysler|Pacifica Hybrid 2017-18|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Chrysler|Pacifica Hybrid 2019-24|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|comma|body|All|[Upstream](#upstream)| +|CUPRA|Ateca 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Dodge|Durango 2020-21|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Ford|Bronco Sport 2021-23|Co-Pilot360 Assist+|[Upstream](#upstream)| +|Ford|Escape 2020-22|Co-Pilot360 Assist+|[Upstream](#upstream)| +|Ford|Escape Hybrid 2020-22|Co-Pilot360 Assist+|[Upstream](#upstream)| +|Ford|Escape Plug-in Hybrid 2020-22|Co-Pilot360 Assist+|[Upstream](#upstream)| +|Ford|Explorer 2020-23|Co-Pilot360 Assist+|[Upstream](#upstream)| +|Ford|Explorer Hybrid 2020-23|Co-Pilot360 Assist+|[Upstream](#upstream)| +|Ford|F-150 2022-23|Co-Pilot360 Active 2.0|[Under review](#under-review)| +|Ford|F-150 Hybrid 2022-23|Co-Pilot360 Active 2.0|[Under review](#under-review)| +|Ford|F-150 Lightning 2021-23|Co-Pilot360 Active 2.0|[Under review](#under-review)| +|Ford|Focus 2018|Adaptive Cruise Control with Lane Centering|[Upstream](#upstream)| +|Ford|Focus Hybrid 2018|Adaptive Cruise Control with Lane Centering|[Upstream](#upstream)| +|Ford|Kuga 2020-22|Adaptive Cruise Control with Lane Centering|[Upstream](#upstream)| +|Ford|Kuga Hybrid 2020-22|Adaptive Cruise Control with Lane Centering|[Upstream](#upstream)| +|Ford|Kuga Plug-in Hybrid 2020-22|Adaptive Cruise Control with Lane Centering|[Upstream](#upstream)| +|Ford|Maverick 2022|LARIAT Luxury|[Upstream](#upstream)| +|Ford|Maverick 2023-24|Co-Pilot360 Assist|[Upstream](#upstream)| +|Ford|Maverick Hybrid 2022|LARIAT Luxury|[Upstream](#upstream)| +|Ford|Maverick Hybrid 2023-24|Co-Pilot360 Assist|[Upstream](#upstream)| +|Ford|Mustang Mach-E 2021-23|Co-Pilot360 Active 2.0|[Under review](#under-review)| +|Ford|Ranger 2024|Adaptive Cruise Control with Lane Centering|[Under review](#under-review)| +|Genesis|G70 2018|All|[Upstream](#upstream)| +|Genesis|G70 2019-21|All|[Upstream](#upstream)| +|Genesis|G70 2022-23|All|[Upstream](#upstream)| +|Genesis|G80 2017|All|[Upstream](#upstream)| +|Genesis|G80 2018-19|All|[Upstream](#upstream)| +|Genesis|G80 (2.5T Advanced Trim, with HDA II) 2024|Highway Driving Assist II|[Upstream](#upstream)| +|Genesis|G90 2017-20|All|[Upstream](#upstream)| +|Genesis|GV60 (Advanced Trim) 2023|All|[Upstream](#upstream)| +|Genesis|GV60 (Performance Trim) 2022-23|All|[Upstream](#upstream)| +|Genesis|GV70 (2.5T Trim, without HDA II) 2022-23|All|[Upstream](#upstream)| +|Genesis|GV70 (3.5T Trim, without HDA II) 2022-23|All|[Upstream](#upstream)| +|Genesis|GV70 Electrified (with HDA II) 2023|Highway Driving Assist II|[Upstream](#upstream)| +|Genesis|GV80 2023|All|[Upstream](#upstream)| +|GMC|Sierra 1500 2020-21|Driver Alert Package II|[Upstream](#upstream)| +|Honda|Accord 2018-22|All|[Upstream](#upstream)| +|Honda|Accord Hybrid 2018-22|All|[Upstream](#upstream)| +|Honda|Civic 2016-18|Honda Sensing|[Upstream](#upstream)| +|Honda|Civic 2019-21|All|[Upstream](#upstream)| +|Honda|Civic 2022-24|All|[Upstream](#upstream)| +|Honda|Civic Hatchback 2017-21|Honda Sensing|[Upstream](#upstream)| +|Honda|Civic Hatchback 2022-24|All|[Upstream](#upstream)| +|Honda|CR-V 2015-16|Touring Trim|[Upstream](#upstream)| +|Honda|CR-V 2017-22|Honda Sensing|[Upstream](#upstream)| +|Honda|CR-V Hybrid 2017-21|Honda Sensing|[Upstream](#upstream)| +|Honda|e 2020|All|[Upstream](#upstream)| +|Honda|Fit 2018-20|Honda Sensing|[Upstream](#upstream)| +|Honda|Freed 2020|Honda Sensing|[Upstream](#upstream)| +|Honda|HR-V 2019-22|Honda Sensing|[Upstream](#upstream)| +|Honda|HR-V 2023|All|[Upstream](#upstream)| +|Honda|Insight 2019-22|All|[Upstream](#upstream)| +|Honda|Inspire 2018|All|[Upstream](#upstream)| +|Honda|Odyssey 2018-20|Honda Sensing|[Upstream](#upstream)| +|Honda|Passport 2019-23|All|[Upstream](#upstream)| +|Honda|Pilot 2016-22|Honda Sensing|[Upstream](#upstream)| +|Honda|Ridgeline 2017-24|Honda Sensing|[Upstream](#upstream)| +|Hyundai|Azera 2022|All|[Upstream](#upstream)| +|Hyundai|Azera Hybrid 2019|All|[Upstream](#upstream)| +|Hyundai|Azera Hybrid 2020|All|[Upstream](#upstream)| +|Hyundai|Custin 2023|All|[Upstream](#upstream)| +|Hyundai|Elantra 2017-18|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Elantra 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Elantra 2021-23|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Elantra GT 2017-19|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Elantra Hybrid 2021-23|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Genesis 2015-16|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|i30 2017-19|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Ioniq 5 (Non-US only) 2022-24|All|[Upstream](#upstream)| +|Hyundai|Ioniq 5 (with HDA II) 2022-24|Highway Driving Assist II|[Upstream](#upstream)| +|Hyundai|Ioniq 5 (without HDA II) 2022-24|Highway Driving Assist|[Upstream](#upstream)| +|Hyundai|Ioniq 6 (with HDA II) 2023-24|Highway Driving Assist II|[Upstream](#upstream)| +|Hyundai|Ioniq Electric 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Ioniq Electric 2020|All|[Upstream](#upstream)| +|Hyundai|Ioniq Hybrid 2017-19|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Ioniq Hybrid 2020-22|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Ioniq Plug-in Hybrid 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Ioniq Plug-in Hybrid 2020-22|All|[Upstream](#upstream)| +|Hyundai|Kona 2020|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Kona Electric 2018-21|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Kona Electric 2022-23|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Kona Electric (with HDA II, Korea only) 2023|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Kona Hybrid 2020|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Palisade 2020-22|All|[Upstream](#upstream)| +|Hyundai|Palisade 2023-24|HDA2|[Community](#community)| +|Hyundai|Santa Cruz 2022-24|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Santa Fe 2019-20|All|[Upstream](#upstream)| +|Hyundai|Santa Fe 2021-23|All|[Upstream](#upstream)| +|Hyundai|Santa Fe Hybrid 2022-23|All|[Upstream](#upstream)| +|Hyundai|Santa Fe Plug-in Hybrid 2022-23|All|[Upstream](#upstream)| +|Hyundai|Sonata 2018-19|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Sonata 2020-23|All|[Upstream](#upstream)| +|Hyundai|Sonata Hybrid 2020-23|All|[Upstream](#upstream)| +|Hyundai|Staria 2023|All|[Upstream](#upstream)| +|Hyundai|Tucson 2021|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Tucson 2022|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Tucson 2023-24|All|[Upstream](#upstream)| +|Hyundai|Tucson Diesel 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Hyundai|Tucson Hybrid 2022-24|All|[Upstream](#upstream)| +|Hyundai|Tucson Plug-in Hybrid 2024|All|[Upstream](#upstream)| +|Hyundai|Veloster 2019-20|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Jeep|Grand Cherokee 2016-18|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Jeep|Grand Cherokee 2019-21|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Kia|Carnival 2022-24|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Carnival (China only) 2023|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Ceed 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|EV6 (Southeast Asia only) 2022-24|All|[Upstream](#upstream)| +|Kia|EV6 (with HDA II) 2022-24|Highway Driving Assist II|[Upstream](#upstream)| +|Kia|EV6 (without HDA II) 2022-24|Highway Driving Assist|[Upstream](#upstream)| +|Kia|Forte 2019-21|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Forte 2022-23|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|K5 2021-24|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|K5 Hybrid 2020-22|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|K8 Hybrid (with HDA II) 2023|Highway Driving Assist II|[Upstream](#upstream)| +|Kia|Niro EV 2019|All|[Upstream](#upstream)| +|Kia|Niro EV 2020|All|[Upstream](#upstream)| +|Kia|Niro EV 2021|All|[Upstream](#upstream)| +|Kia|Niro EV 2022|All|[Upstream](#upstream)| +|Kia|Niro EV 2023|All|[Upstream](#upstream)| +|Kia|Niro Hybrid 2018|All|[Upstream](#upstream)| +|Kia|Niro Hybrid 2021|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Niro Hybrid 2022|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Niro Hybrid 2023|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Niro Plug-in Hybrid 2018-19|All|[Upstream](#upstream)| +|Kia|Niro Plug-in Hybrid 2020|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Niro Plug-in Hybrid 2021|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Niro Plug-in Hybrid 2022|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Optima 2017|Advanced Smart Cruise Control|[Upstream](#upstream)| +|Kia|Optima 2019-20|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Optima Hybrid 2017|Advanced Smart Cruise Control|[Dashcam mode](#dashcam)| +|Kia|Optima Hybrid 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Seltos 2021|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Sorento 2018|Advanced Smart Cruise Control & LKAS|[Upstream](#upstream)| +|Kia|Sorento 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Sorento 2021-23|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Sorento Hybrid 2021-23|All|[Upstream](#upstream)| +|Kia|Sorento Plug-in Hybrid 2022-23|All|[Upstream](#upstream)| +|Kia|Sportage 2023-24|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Sportage Hybrid 2023|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Stinger 2018-20|Smart Cruise Control (SCC)|[Upstream](#upstream)| +|Kia|Stinger 2022-23|All|[Upstream](#upstream)| +|Kia|Telluride 2020-22|All|[Upstream](#upstream)| +|Kia|Telluride 2023-24|HDA2|[Community](#community)| +|Lexus|CT Hybrid 2017-18|Lexus Safety System+|[Upstream](#upstream)| +|Lexus|ES 2017-18|All|[Upstream](#upstream)| +|Lexus|ES 2019-24|All|[Upstream](#upstream)| +|Lexus|ES Hybrid 2017-18|All|[Upstream](#upstream)| +|Lexus|ES Hybrid 2019-24|All|[Upstream](#upstream)| +|Lexus|GS F 2016|All|[Upstream](#upstream)| +|Lexus|IS 2017-19|All|[Upstream](#upstream)| +|Lexus|IS 2022-23|All|[Upstream](#upstream)| +|Lexus|LC 2024|All|[Upstream](#upstream)| +|Lexus|NS 2022-25|Any|[Not compatible](#can-bus-security)| +|Lexus|NX 2018-19|All|[Upstream](#upstream)| +|Lexus|NX 2020-21|All|[Upstream](#upstream)| +|Lexus|NX Hybrid 2018-19|All|[Upstream](#upstream)| +|Lexus|NX Hybrid 2020-21|All|[Upstream](#upstream)| +|Lexus|RC 2018-20|All|[Upstream](#upstream)| +|Lexus|RX 2016|Lexus Safety System+|[Upstream](#upstream)| +|Lexus|RX 2017-19|All|[Upstream](#upstream)| +|Lexus|RX 2020-22|All|[Upstream](#upstream)| +|Lexus|RX Hybrid 2016|Lexus Safety System+|[Upstream](#upstream)| +|Lexus|RX Hybrid 2017-19|All|[Upstream](#upstream)| +|Lexus|RX Hybrid 2020-22|All|[Upstream](#upstream)| +|Lexus|UX Hybrid 2019-23|All|[Upstream](#upstream)| +|Lincoln|Aviator 2020-23|Co-Pilot360 Plus|[Upstream](#upstream)| +|Lincoln|Aviator Plug-in Hybrid 2020-23|Co-Pilot360 Plus|[Upstream](#upstream)| +|MAN|eTGE 2020-24|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|MAN|TGE 2017-24|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Mazda|3 2017-18|All|[Dashcam mode](#dashcam)| +|Mazda|6 2017-20|All|[Dashcam mode](#dashcam)| +|Mazda|CX-5 2017-21|All|[Dashcam mode](#dashcam)| +|Mazda|CX-5 2022-24|All|[Upstream](#upstream)| +|Mazda|CX-9 2016-20|All|[Dashcam mode](#dashcam)| +|Mazda|CX-9 2021-23|All|[Upstream](#upstream)| +|Nissan|Altima 2019-20|ProPILOT Assist|[Upstream](#upstream)| +|Nissan|Leaf 2018-23|ProPILOT Assist|[Upstream](#upstream)| +|Nissan|Rogue 2018-20|ProPILOT Assist|[Upstream](#upstream)| +|Nissan|X-Trail 2017|ProPILOT Assist|[Upstream](#upstream)| +|Ram|1500 2019-24|Adaptive Cruise Control (ACC)|[Upstream](#upstream)| +|Ram|2500 2020-24|Adaptive Cruise Control (ACC)|[Dashcam mode](#dashcam)| +|Ram|3500 2019-22|Adaptive Cruise Control (ACC)|[Dashcam mode](#dashcam)| +|SEAT|Alhambra 2018-20|Adaptive Cruise Control (ACC) & Lane Assist|[Dashcam mode](#dashcam)| +|SEAT|Ateca 2016-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|SEAT|Leon 2014-20|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Subaru|Ascent 2019-21|All|[Upstream](#upstream)| +|Subaru|Ascent 2023|All|[Dashcam mode](#dashcam)| +|Subaru|Crosstrek 2018-19|EyeSight Driver Assistance|[Upstream](#upstream)| +|Subaru|Crosstrek 2020-23|EyeSight Driver Assistance|[Upstream](#upstream)| +|Subaru|Crosstrek Hybrid 2020|EyeSight Driver Assistance|[Dashcam mode](#dashcam)| +|Subaru|Forester 2017-18|EyeSight Driver Assistance|[Dashcam mode](#dashcam)| +|Subaru|Forester 2019-21|All|[Upstream](#upstream)| +|Subaru|Forester 2022-24|All|[Dashcam mode](#dashcam)| +|Subaru|Forester Hybrid 2020|EyeSight Driver Assistance|[Dashcam mode](#dashcam)| +|Subaru|Impreza 2017-19|EyeSight Driver Assistance|[Upstream](#upstream)| +|Subaru|Impreza 2020-22|EyeSight Driver Assistance|[Upstream](#upstream)| +|Subaru|Legacy 2015-18|EyeSight Driver Assistance|[Dashcam mode](#dashcam)| +|Subaru|Legacy 2020-22|All|[Upstream](#upstream)| +|Subaru|Outback 2015-17|EyeSight Driver Assistance|[Dashcam mode](#dashcam)| +|Subaru|Outback 2018-19|EyeSight Driver Assistance|[Dashcam mode](#dashcam)| +|Subaru|Outback 2020-22|All|[Upstream](#upstream)| +|Subaru|Outback 2023|All|[Dashcam mode](#dashcam)| +|Subaru|Solterra 2023-25|Any|[Not compatible](#can-bus-security)| +|Subaru|XV 2018-19|EyeSight Driver Assistance|[Upstream](#upstream)| +|Subaru|XV 2020-21|EyeSight Driver Assistance|[Upstream](#upstream)| +|Škoda|Fabia 2022-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Kamiq 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Karoq 2019-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Kodiaq 2017-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Octavia 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Octavia RS 2016|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Octavia Scout 2017-19|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Scala 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Škoda|Superb 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Tesla|Model 3|All|[Dashcam mode](#dashcam)| +|Tesla|Model Y|All|[Dashcam mode](#dashcam)| +|Toyota|Alphard 2019-20|All|[Upstream](#upstream)| +|Toyota|Alphard Hybrid 2021|All|[Upstream](#upstream)| +|Toyota|Avalon 2016|Toyota Safety Sense P|[Upstream](#upstream)| +|Toyota|Avalon 2017-18|All|[Upstream](#upstream)| +|Toyota|Avalon 2019-21|All|[Upstream](#upstream)| +|Toyota|Avalon 2022|All|[Upstream](#upstream)| +|Toyota|Avalon Hybrid 2019-21|All|[Upstream](#upstream)| +|Toyota|Avalon Hybrid 2022|All|[Upstream](#upstream)| +|Toyota|bZ4x 2023-25|Any|[Not compatible](#can-bus-security)| +|Toyota|C-HR 2017-20|All|[Upstream](#upstream)| +|Toyota|C-HR 2021|All|[Upstream](#upstream)| +|Toyota|C-HR Hybrid 2017-20|All|[Upstream](#upstream)| +|Toyota|C-HR Hybrid 2021-22|All|[Upstream](#upstream)| +|Toyota|Camry 2018-20|All|[Upstream](#upstream)| +|Toyota|Camry 2021-24|All|[Upstream](#upstream)| +|Toyota|Camry 2025|Any|[Not compatible](#can-bus-security)| +|Toyota|Camry Hybrid 2018-20|All|[Upstream](#upstream)| +|Toyota|Camry Hybrid 2021-24|All|[Upstream](#upstream)| +|Toyota|Corolla 2017-19|All|[Upstream](#upstream)| +|Toyota|Corolla 2020-22|All|[Upstream](#upstream)| +|Toyota|Corolla Cross 2022-25|Any|[Not compatible](#can-bus-security)| +|Toyota|Corolla Cross (Non-US only) 2020-23|All|[Upstream](#upstream)| +|Toyota|Corolla Cross Hybrid (Non-US only) 2020-22|All|[Upstream](#upstream)| +|Toyota|Corolla Hatchback 2019-22|All|[Upstream](#upstream)| +|Toyota|Corolla Hybrid 2020-22|All|[Upstream](#upstream)| +|Toyota|Corolla Hybrid (South America only) 2020-23|All|[Upstream](#upstream)| +|Toyota|Highlander 2017-19|All|[Upstream](#upstream)| +|Toyota|Highlander 2020-23|All|[Upstream](#upstream)| +|Toyota|Highlander 2025|Any|[Not compatible](#can-bus-security)| +|Toyota|Highlander Hybrid 2017-19|All|[Upstream](#upstream)| +|Toyota|Highlander Hybrid 2020-23|All|[Upstream](#upstream)| +|Toyota|Mirai 2021|All|[Upstream](#upstream)| +|Toyota|Prius 2016|Toyota Safety Sense P|[Upstream](#upstream)| +|Toyota|Prius 2017-20|All|[Upstream](#upstream)| +|Toyota|Prius 2021-22|All|[Upstream](#upstream)| +|Toyota|Prius Prime 2017-20|All|[Upstream](#upstream)| +|Toyota|Prius Prime 2021-22|All|[Upstream](#upstream)| +|Toyota|Prius v 2017|Toyota Safety Sense P|[Upstream](#upstream)| +|Toyota|RAV4 2016|Toyota Safety Sense P|[Upstream](#upstream)| +|Toyota|RAV4 2017-18|All|[Upstream](#upstream)| +|Toyota|RAV4 2019-21|All|[Upstream](#upstream)| +|Toyota|RAV4 2022|All|[Upstream](#upstream)| +|Toyota|RAV4 2023-24|All|[Upstream](#upstream)| +|Toyota|RAV4 Hybrid 2016|Toyota Safety Sense P|[Upstream](#upstream)| +|Toyota|RAV4 Hybrid 2017-18|All|[Upstream](#upstream)| +|Toyota|RAV4 Hybrid 2019-21|All|[Upstream](#upstream)| +|Toyota|RAV4 Hybrid 2022|All|[Upstream](#upstream)| +|Toyota|RAV4 Hybrid 2023-24|All|[Upstream](#upstream)| +|Toyota|RAV4 Prime 2021-23|Any|[Community](#community)| +|Toyota|RAV4 Prime 2024-25|Any|[Not compatible](#can-bus-security)| +|Toyota|Sequoia 2023-25|Any|[Not compatible](#can-bus-security)| +|Toyota|Sienna 2018-20|All|[Upstream](#upstream)| +|Toyota|Sienna 2021-23|Any|[Community](#community)| +|Toyota|Sienna 2024-25|Any|[Not compatible](#can-bus-security)| +|Toyota|Tundra 2022-25|Any|[Not compatible](#can-bus-security)| +|Toyota|Venza 2021-25|Any|[Not compatible](#can-bus-security)| +|Volkswagen|Arteon 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Arteon eHybrid 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Arteon R 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Arteon Shooting Brake 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Atlas 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Atlas Cross Sport 2020-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Caddy 2019|Adaptive Cruise Control (ACC) & Lane Assist|[Dashcam mode](#dashcam)| +|Volkswagen|Caddy Maxi 2019|Adaptive Cruise Control (ACC) & Lane Assist|[Dashcam mode](#dashcam)| +|Volkswagen|California 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Caravelle 2020|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|CC 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Crafter 2017-24|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|e-Crafter 2018-24|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|e-Golf 2014-20|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Golf 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Golf Alltrack 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Golf GTD 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Golf GTE 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Golf GTI 2015-21|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Golf R 2015-19|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Golf SportsVan 2015-20|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Grand California 2019-24|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Jetta 2015-18|Adaptive Cruise Control (ACC) & Lane Assist|[Dashcam mode](#dashcam)| +|Volkswagen|Jetta 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Jetta GLI 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Passat 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Passat Alltrack 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Passat GTE 2015-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Passat NMS 2017-22|Adaptive Cruise Control (ACC) & Lane Assist|[Dashcam mode](#dashcam)| +|Volkswagen|Polo 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Polo GTI 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Sharan 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|[Dashcam mode](#dashcam)| +|Volkswagen|T-Cross 2021|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|T-Roc 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Taos 2022-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Teramont 2018-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Teramont Cross Sport 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Teramont X 2021-22|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Tiguan 2018-24|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Tiguan eHybrid 2021-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| +|Volkswagen|Touran 2016-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| + +# Types of Support + +**opendbc can support many more cars than it currently does.** There are a few reasons your car may not be supported. +If your car doesn't fit into any of the incompatibility criteria here, then there's a good chance it can be supported! +We're adding support for new cars all the time. **We don't have a roadmap for car support**, and in fact, most car +support comes from users like you! + +## Upstream + +A supported vehicle is one that just works when you install a comma device. All supported cars provide a better +experience than any stock system. Supported vehicles reference the US market unless otherwise specified. + +## Under Review + +A vehicle under review is one for which software support has been merged into upstream openpilot, but hasn't yet been +tested for drive quality and conformance with [comma safety guidelines](https://github.com/commaai/openpilot/blob/master/docs/SAFETY.md). +This is a normal part of the development and quality assurance process. This vehicle will not work when upstream +openpilot is installed, but custom forks may allow their use. + +## Custom + +Vehicles in this category are not considered plug-and-play. Software support is included in upstream openpilot, but +these vehicles might not have a harness in the comma store, or the physical install might be at an unusual or cumbersome +location, or they might need unusual configuration after install. + +## Dashcam + +Dashcam vehicles have software support in upstream openpilot, but will go into "dashcam mode" at startup and will not +engage. This may be due to known issues with driving safety or quality, or it may be a work in progress that isn't yet +ready for safety and quality review. + +## Community + +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/). + +## Incompatible + +### CAN Bus Security + +Vehicles with CAN security measures, such as AUTOSAR Secure Onboard Communication (SecOC) are not usable with openpilot +unless the owner can recover the message signing key and implement CAN message signing. Examples include certain newer +Toyota, and the GM Global B platform. + +### FlexRay + +All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a +CAN bus isn't the only way that the computers in your car can communicate. Most, if not all, vehicles from the following +manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars +may one day be supported, but we have no immediate plans to support FlexRay. \ No newline at end of file diff --git a/opendbc/car/CARS_template.md b/opendbc/car/CARS_template.md new file mode 100644 index 0000000000..2bc868cb04 --- /dev/null +++ b/opendbc/car/CARS_template.md @@ -0,0 +1,61 @@ + + +# Support Information for {{car_docs_with_extras | length}} Known Cars + +|{{ExtraCarsColumn | map(attribute='value') | join('|') | replace(hardware_col_name, wide_hardware_col_name)}}| +|---|---|---|{% for _ in range((ExtraCarsColumn | length) - 3) %}{{':---:|'}}{% endfor +%} +{% for car_docs in car_docs_with_extras %} +|{% for column in ExtraCarsColumn %}{{car_docs.get_extra_cars_column(column)}}|{% endfor %} + +{% endfor %} + +# Types of Support + +**opendbc can support many more cars than it currently does.** There are a few reasons your car may not be supported. +If your car doesn't fit into any of the incompatibility criteria here, then there's a good chance it can be supported! +We're adding support for new cars all the time. **We don't have a roadmap for car support**, and in fact, most car +support comes from users like you! + +## Upstream + +A supported vehicle is one that just works when you install a comma device. All supported cars provide a better +experience than any stock system. Supported vehicles reference the US market unless otherwise specified. + +## Under Review + +A vehicle under review is one for which software support has been merged into upstream openpilot, but hasn't yet been +tested for drive quality and conformance with [comma safety guidelines](https://github.com/commaai/openpilot/blob/master/docs/SAFETY.md). +This is a normal part of the development and quality assurance process. This vehicle will not work when upstream +openpilot is installed, but custom forks may allow their use. + +## Custom + +Vehicles in this category are not considered plug-and-play. Software support is included in upstream openpilot, but +these vehicles might not have a harness in the comma store, or the physical install might be at an unusual or cumbersome +location, or they might need unusual configuration after install. + +## Dashcam + +Dashcam vehicles have software support in upstream openpilot, but will go into "dashcam mode" at startup and will not +engage. This may be due to known issues with driving safety or quality, or it may be a work in progress that isn't yet +ready for safety and quality review. + +## Community + +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/). + +## Incompatible + +### CAN Bus Security + +Vehicles with CAN security measures, such as AUTOSAR Secure Onboard Communication (SecOC) are not usable with openpilot +unless the owner can recover the message signing key and implement CAN message signing. Examples include certain newer +Toyota, and the GM Global B platform. + +### FlexRay + +All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a +CAN bus isn't the only way that the computers in your car can communicate. Most, if not all, vehicles from the following +manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars +may one day be supported, but we have no immediate plans to support FlexRay. diff --git a/opendbc/car/__init__.py b/opendbc/car/__init__.py index 455d8c3803..32f53fcdee 100644 --- a/opendbc/car/__init__.py +++ b/opendbc/car/__init__.py @@ -1,14 +1,14 @@ # functions common among cars import logging from collections import namedtuple -from dataclasses import dataclass +from dataclasses import dataclass, field from enum import IntFlag, ReprEnum, EnumType from dataclasses import replace from panda import uds from opendbc.car import structs from opendbc.car.can_definitions import CanData -from opendbc.car.docs_definitions import CarDocs +from opendbc.car.docs_definitions import CarDocs, ExtraCarDocs from opendbc.car.common.numpy_fast import clip, interp # set up logging @@ -270,8 +270,8 @@ def __setattr__(self, *args, **kwargs): @dataclass(order=True) -class PlatformConfig(Freezable): - car_docs: list[CarDocs] +class PlatformConfigBase(Freezable): + car_docs: list[CarDocs] | list[ExtraCarDocs] specs: CarSpecs dbc_dict: DbcDict @@ -293,6 +293,20 @@ def __post_init__(self): self.init() +@dataclass(order=True) +class PlatformConfig(PlatformConfigBase): + car_docs: list[CarDocs] + specs: CarSpecs + dbc_dict: DbcDict + + +@dataclass(order=True) +class ExtraPlatformConfig(PlatformConfigBase): + car_docs: list[ExtraCarDocs] + specs: CarSpecs = CarSpecs(mass=0., wheelbase=0., steerRatio=0.) + dbc_dict: DbcDict = field(default_factory=lambda: dbc_dict('unknown', None)) + + class PlatformsType(EnumType): def __new__(metacls, cls, bases, classdict, *, boundary=None, _simple=False, **kwds): for key in classdict._member_names.keys(): @@ -303,7 +317,7 @@ def __new__(metacls, cls, bases, classdict, *, boundary=None, _simple=False, **k class Platforms(str, ReprEnum, metaclass=PlatformsType): - config: PlatformConfig + config: PlatformConfigBase def __new__(cls, platform_config: PlatformConfig): member = str.__new__(cls, platform_config.platform_str) diff --git a/opendbc/car/docs.py b/opendbc/car/docs.py old mode 100644 new mode 100755 index b44c873c3c..2681296e17 --- a/opendbc/car/docs.py +++ b/opendbc/car/docs.py @@ -1,13 +1,37 @@ +#!/usr/bin/env python3 +import argparse +import os +from typing import get_args + from collections import defaultdict import jinja2 from enum import Enum from natsort import natsorted +from opendbc.car.common.basedir import BASEDIR from opendbc.car import gen_empty_fingerprint from opendbc.car.structs import CarParams -from opendbc.car.docs_definitions import CarDocs, Column, CommonFootnote, PartType +from opendbc.car.docs_definitions import CarDocs, ExtraCarDocs, Column, ExtraCarsColumn, CommonFootnote, PartType from opendbc.car.car_helpers import interfaces, get_interface_attr -from opendbc.car.values import PLATFORMS +from opendbc.car.values import Platform, PLATFORMS +from opendbc.car.mock.values import CAR as MOCK +from opendbc.car.extra_cars import CAR as EXTRA + + +EXTRA_CARS_MD_OUT = os.path.join(BASEDIR, "../", "../", "docs", "CARS.md") +EXTRA_CARS_MD_TEMPLATE = os.path.join(BASEDIR, "CARS_template.md") + +ExtraPlatform = Platform | EXTRA +EXTRA_BRANDS = get_args(ExtraPlatform) +EXTRA_PLATFORMS: dict[str, ExtraPlatform] = {str(platform): platform for brand in EXTRA_BRANDS for platform in brand} + + +def get_params_for_docs(model, platform) -> CarParams: + cp_model, cp_platform = (model, platform) if model in interfaces else ("MOCK", MOCK.MOCK) + CP: CarParams = interfaces[cp_model][0].get_params(cp_platform, fingerprint=gen_empty_fingerprint(), + car_fw=[CarParams.CarFw(ecu=CarParams.Ecu.unknown)], + experimental_long=True, docs=True) + return CP def get_all_footnotes() -> dict[Enum, int]: @@ -17,16 +41,13 @@ def get_all_footnotes() -> dict[Enum, int]: return {fn: idx + 1 for idx, fn in enumerate(all_footnotes)} -def get_all_car_docs() -> list[CarDocs]: - all_car_docs: list[CarDocs] = [] - footnotes = get_all_footnotes() - for model, platform in PLATFORMS.items(): +def build_sorted_car_docs_list(platforms, footnotes=None, include_dashcam=False, include_custom=False): + collected_car_docs: list[CarDocs | ExtraCarDocs] = [] + for model, platform in platforms.items(): car_docs = platform.config.car_docs - # If available, uses experimental longitudinal limits for the docs - CP = interfaces[model][0].get_params(platform, fingerprint=gen_empty_fingerprint(), - car_fw=[CarParams.CarFw(ecu=CarParams.Ecu.unknown)], experimental_long=True, docs=True) + CP = get_params_for_docs(model, platform) - if CP.dashcamOnly or not len(car_docs): + if (CP.dashcamOnly and not include_dashcam) or not len(car_docs): continue # A platform can include multiple car models @@ -34,13 +55,24 @@ def get_all_car_docs() -> list[CarDocs]: if not hasattr(_car_docs, "row"): _car_docs.init_make(CP) _car_docs.init(CP, footnotes) - all_car_docs.append(_car_docs) + collected_car_docs.append(_car_docs) # Sort cars by make and model + year - sorted_cars: list[CarDocs] = natsorted(all_car_docs, key=lambda car: car.name.lower()) + sorted_cars = natsorted(collected_car_docs, key=lambda car: car.name.lower()) return sorted_cars +def get_all_car_docs() -> list[CarDocs]: + collected_footnotes = get_all_footnotes() + sorted_list: list[CarDocs] = build_sorted_car_docs_list(PLATFORMS, footnotes=collected_footnotes) + return sorted_list + + +def get_car_docs_with_extras() -> list[CarDocs | ExtraCarDocs]: + sorted_list: list[CarDocs] = build_sorted_car_docs_list(EXTRA_PLATFORMS, include_custom=True, include_dashcam=True) + return sorted_list + + def group_by_make(all_car_docs: list[CarDocs]) -> dict[str, list[CarDocs]]: sorted_car_docs = defaultdict(list) for car_docs in all_car_docs: @@ -57,3 +89,25 @@ def generate_cars_md(all_car_docs: list[CarDocs], template_fn: str) -> str: group_by_make=group_by_make, footnotes=footnotes, Column=Column) return cars_md + + +def generate_cars_md_with_extras(car_docs_with_extras: list[CarDocs | ExtraCarDocs], template_fn: str) -> str: + with open(template_fn) as f: + template = jinja2.Template(f.read(), trim_blocks=True, lstrip_blocks=True) + + cars_md: str = template.render(car_docs_with_extras=car_docs_with_extras, PartType=PartType, + group_by_make=group_by_make, ExtraCarsColumn=ExtraCarsColumn) + return cars_md + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Auto generates supportability info docs for all known cars", + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument("--template", default=EXTRA_CARS_MD_TEMPLATE, help="Override default template filename") + parser.add_argument("--out", default=EXTRA_CARS_MD_OUT, help="Override default generated filename") + args = parser.parse_args() + + with open(args.out, 'w') as f: + f.write(generate_cars_md_with_extras(get_car_docs_with_extras(), args.template)) + print(f"Generated and written to {args.out}") diff --git a/opendbc/car/docs_definitions.py b/opendbc/car/docs_definitions.py index 5e0fa28a00..3775e317d6 100644 --- a/opendbc/car/docs_definitions.py +++ b/opendbc/car/docs_definitions.py @@ -24,6 +24,22 @@ class Column(Enum): VIDEO = "Video" +class ExtraCarsColumn(Enum): + MAKE = "Make" + MODEL = "Model" + PACKAGE = "Package" + SUPPORT = "Support Level" + + +class SupportType(Enum): + UPSTREAM = "Upstream" # Actively maintained by comma, plug-and-play in release versions of openpilot + REVIEW = "Under review" # Dashcam, but planned for official support after safety validation + DASHCAM = "Dashcam mode" # Dashcam, but may be drivable in a community fork + COMMUNITY = "Community" # Not upstream, but available in a custom community fork, not validated by comma + CUSTOM = "Custom" # Upstream, but don't have a harness available or need an unusual custom install + INCOMPATIBLE = "Not compatible" # Known fundamental incompatibility such as Flexray or hydraulic power steering + + class Star(Enum): FULL = "full" HALF = "half" @@ -246,14 +262,25 @@ class CarDocs: # all the parts needed for the supported car car_parts: CarParts = field(default_factory=CarParts) + merged: bool = True + support_type: SupportType = SupportType.UPSTREAM + support_link: str | None = "#upstream" + def __post_init__(self): self.make, self.model, self.years = split_name(self.name) self.year_list = get_year_list(self.years) - def init(self, CP: CarParams, all_footnotes: dict[Enum, int]): + def init(self, CP: CarParams, all_footnotes=None): self.car_name = CP.carName self.car_fingerprint = CP.carFingerprint + if self.merged and CP.dashcamOnly: + if self.support_type != SupportType.REVIEW: + self.support_type = SupportType.DASHCAM + self.support_link = "#dashcam" + else: + self.support_link = "#under-review" + # longitudinal column op_long = "Stock" if CP.experimentalLongitudinalAvailable or CP.enableDsu: @@ -308,6 +335,18 @@ def display_func(parts): Column.VIDEO: self.video_link if self.video_link is not None else "", # replaced with an image and link from template in get_column } + if self.support_link is not None: + support_info = f"[{self.support_type.value}]({self.support_link})" + else: + support_info = self.support_type.value + + self.extra_cars_row: dict[Enum, str] = { + ExtraCarsColumn.MAKE: self.make, + ExtraCarsColumn.MODEL: self.model, + ExtraCarsColumn.PACKAGE: self.package, + ExtraCarsColumn.SUPPORT: support_info, + } + # Set steering torque star from max lateral acceleration assert CP.maxLateralAccel > 0.1 if CP.maxLateralAccel >= GOOD_TORQUE_THRESHOLD: @@ -368,3 +407,18 @@ def get_column(self, column: Column, star_icon: str, video_icon: str, footnote_t item += footnote_tag.format(f'{",".join(map(str, sups))}') return item + + def get_extra_cars_column(self, column: ExtraCarsColumn) -> str: + item: str = self.extra_cars_row[column] + if column == ExtraCarsColumn.MODEL and len(self.years): + item += f" {self.years}" + + return item + + +@dataclass +class ExtraCarDocs(CarDocs): + package: str = "Any" + merged: bool = False + support_type: SupportType = SupportType.INCOMPATIBLE + support_link: str | None = "#incompatible" diff --git a/opendbc/car/extra_cars.py b/opendbc/car/extra_cars.py new file mode 100644 index 0000000000..545b8e645d --- /dev/null +++ b/opendbc/car/extra_cars.py @@ -0,0 +1,62 @@ +from dataclasses import dataclass + +from opendbc.car import structs, Platforms, ExtraPlatformConfig +from opendbc.car.docs_definitions import ExtraCarDocs, SupportType + + +@dataclass +class CommunityCarDocs(ExtraCarDocs): + def init_make(self, CP: structs.CarParams): + self.support_type = SupportType.COMMUNITY + self.support_link = "#community" + + +@dataclass +class ToyotaSecurityCarDocs(ExtraCarDocs): + def init_make(self, CP: structs.CarParams): + self.support_type = SupportType.INCOMPATIBLE + self.support_link = "#can-bus-security" + + +@dataclass +class FlexRayCarDocs(ExtraCarDocs): + def init_make(self, CP: structs.CarParams): + self.support_type = SupportType.INCOMPATIBLE + self.support_link = "#flexray" + + +class CAR(Platforms): + config: ExtraPlatformConfig + + HYUNDAI_PALISADE_FACELIFT = ExtraPlatformConfig( + [ + CommunityCarDocs("Hyundai Palisade 2023-24", package="HDA2"), + CommunityCarDocs("Kia Telluride 2023-24", package="HDA2"), + ], + ) + + TOYOTA_SECURITY_CARS = ExtraPlatformConfig( + [ + ToyotaSecurityCarDocs("Subaru Solterra 2023-25"), + ToyotaSecurityCarDocs("Lexus NS 2022-25"), + ToyotaSecurityCarDocs("Toyota bZ4x 2023-25"), + ToyotaSecurityCarDocs("Toyota Camry 2025"), + ToyotaSecurityCarDocs("Toyota Corolla Cross 2022-25"), + ToyotaSecurityCarDocs("Toyota Highlander 2025"), + CommunityCarDocs("Toyota RAV4 Prime 2021-23"), + ToyotaSecurityCarDocs("Toyota RAV4 Prime 2024-25"), + ToyotaSecurityCarDocs("Toyota Sequoia 2023-25"), + CommunityCarDocs("Toyota Sienna 2021-23"), + ToyotaSecurityCarDocs("Toyota Sienna 2024-25"), + ToyotaSecurityCarDocs("Toyota Tundra 2022-25"), + ToyotaSecurityCarDocs("Toyota Venza 2021-25"), + ], + ) + + AUDI_FLEXRAY = ExtraPlatformConfig( + [ + FlexRayCarDocs("Audi A4 2016-24", package="All"), + FlexRayCarDocs("Audi A5 2016-24", package="All"), + FlexRayCarDocs("Audi Q5 2017-24", package="All"), + ], + ) diff --git a/opendbc/car/ford/values.py b/opendbc/car/ford/values.py index c3cc9b5641..6ea5177215 100644 --- a/opendbc/car/ford/values.py +++ b/opendbc/car/ford/values.py @@ -7,7 +7,7 @@ from opendbc.car import AngleRateLimit, CarSpecs, dbc_dict, DbcDict, PlatformConfig, Platforms from opendbc.car.structs import CarParams from opendbc.car.docs_definitions import CarFootnote, CarHarness, CarDocs, CarParts, Column, \ - Device + Device, SupportType from opendbc.car.fw_query_definitions import FwQueryConfig, LiveFwVersions, OfflineFwVersions, Request, StdQueries, p16 Ecu = CarParams.Ecu @@ -116,11 +116,11 @@ class CAR(Platforms): CarSpecs(mass=2050, wheelbase=3.025, steerRatio=16.8), ) FORD_F_150_MK14 = FordCANFDPlatformConfig( - [FordCarDocs("Ford F-150 2022-23", "Co-Pilot360 Active 2.0", hybrid=True)], + [FordCarDocs("Ford F-150 2022-23", "Co-Pilot360 Active 2.0", hybrid=True, support_type=SupportType.REVIEW)], CarSpecs(mass=2000, wheelbase=3.69, steerRatio=17.0), ) FORD_F_150_LIGHTNING_MK1 = FordCANFDPlatformConfig( - [FordCarDocs("Ford F-150 Lightning 2021-23", "Co-Pilot360 Active 2.0")], + [FordCarDocs("Ford F-150 Lightning 2021-23", "Co-Pilot360 Active 2.0", support_type=SupportType.REVIEW)], CarSpecs(mass=2948, wheelbase=3.70, steerRatio=16.9), ) FORD_FOCUS_MK4 = FordPlatformConfig( @@ -135,11 +135,11 @@ class CAR(Platforms): CarSpecs(mass=1650, wheelbase=3.076, steerRatio=17.0), ) FORD_MUSTANG_MACH_E_MK1 = FordCANFDPlatformConfig( - [FordCarDocs("Ford Mustang Mach-E 2021-23", "Co-Pilot360 Active 2.0")], + [FordCarDocs("Ford Mustang Mach-E 2021-23", "Co-Pilot360 Active 2.0", support_type=SupportType.REVIEW)], CarSpecs(mass=2200, wheelbase=2.984, steerRatio=17.0), # TODO: check steer ratio ) FORD_RANGER_MK2 = FordCANFDPlatformConfig( - [FordCarDocs("Ford Ranger 2024", "Adaptive Cruise Control with Lane Centering")], + [FordCarDocs("Ford Ranger 2024", "Adaptive Cruise Control with Lane Centering", support_type=SupportType.REVIEW)], CarSpecs(mass=2000, wheelbase=3.27, steerRatio=17.0), )