Commit Graph

9243 Commits

Author SHA1 Message Date
Jason Wen 397bcf03a5 ui: Reset Access Tokens for all Map Services 2024-04-12 04:07:07 +00:00
DevTekVE f1dbb9a1ce LFS: Move to sunnypilot's public GitLab 2024-04-11 15:41:59 +00:00
Jason Wen 957071fd42 Ngrok: Add toggle to start/stop service manually 2024-04-11 05:05:37 +00:00
Jason Wen 2cbe1a7ec6 Toyota sdsu upstream hack 2024-04-08 21:32:53 +00:00
DevTekVE 2d705e826c sunnylink: Full sunnylink update with pairing, athena and more 2024-04-08 21:15:18 +00:00
Jason Wen 271968e763 ui: Only build installers on comma devices 2024-04-08 14:15:16 -04:00
DevTekVE 913f32a15c ui: Driving Model Selector description fixes 2024-04-06 16:18:29 +00:00
DevTekVE 7e3f8091c2 ui: Network refresh button 2024-04-06 16:17:21 +00:00
Jason Wen 6a8f434627 Map: Add back enabled for navigation path color change 2024-04-06 09:25:36 -04:00
Jason Wen 2d73059d79 sunnylink: Set User Agent to sunnypilot 2024-04-06 13:23:34 +00:00
DevTekVE 919f3d1c74 Lots of stabilization improvments for the model fetcher 2024-04-06 11:35:44 +00:00
Jason Wen 746d2b750c ui: Developer UI cleanup 2024-03-25 18:28:22 +00:00
Jason Wen 1f154928dc Translations: Prepare for sunnypilot custom texts 2024-03-14 04:39:33 +00:00
Jason Wen 5e775a1e66 Hyundai CAN: Fix Navi_HU check for cars that do not have this signal 2024-03-13 22:33:36 +00:00
Jason Wen ded3389721 FCA: Fix upstream merge conflicts 2024-03-13 22:32:22 +00:00
Jason Wen 5b9a397078 sunnylink: Config Backup 2024-03-13 19:50:00 +00:00
DevTekVE 28efb5388b sunnylink: Registration API 2024-03-13 18:29:58 +00:00
Jason Wen 7dc9d336b5 ui: Lead car chevron improvements 2024-03-12 14:55:25 +00:00
Jason Wen 0daa1e846b Map: Use latActive and longActive for navigation path color change 2024-03-12 00:06:02 -04:00
Jason Wen 7bfd2b81e1 Toyota: Fix upstream merge conflicts 2024-03-07 15:31:46 -05:00
Jason Wen 95c748b9f9 M-TSC: Re-enable in release 2024-03-04 22:41:31 -05:00
Jason Wen 95b224c155 NNLC: Add HONDA CLARITY 2018 2024-02-29 02:32:55 +00:00
Jason Wen ce4055ced6 FCR: Implement during the fingerprint stage 2024-02-27 21:57:14 -05:00
Jason Wen dbaba022a2 Fix upstream merge conflicts 2024-02-27 21:28:12 -05:00
Jason Wen f588a0367b Merge branch 'master' into sync-priv-20240227
# Conflicts:
#	panda
#	selfdrive/car/chrysler/values.py
#	selfdrive/car/ford/carstate.py
#	selfdrive/car/ford/interface.py
#	selfdrive/car/ford/values.py
#	selfdrive/car/interfaces.py
#	selfdrive/car/nissan/values.py
#	selfdrive/car/subaru/interface.py
#	selfdrive/car/volkswagen/interface.py
#	selfdrive/car/volkswagen/values.py
#	selfdrive/controls/radard.py
#	selfdrive/manager/process.py
#	selfdrive/modeld/modeld.py
2024-02-27 21:22:16 -05:00
Jason Wen 4d8c13ba42 Merge branch 'upstream/openpilot/master' into sync-20240224
# Conflicts:
#	cereal
#	common/params.cc
#	selfdrive/car/chrysler/interface.py
2024-02-27 21:01:40 -05:00
Shane Smiskol 56e343b3f1 Honda Accord: label non-essential ECUs (#31624)
* note non-essential ecus

* do accordh
2024-02-27 17:41:52 -08:00
Justin Newberry 19db56b1f6 tici tests: remove pytest.main (#31622)
pytest.main is bad!
2024-02-27 14:06:18 -08:00
Harald Schäfer c05b37979d Wheeled body (#31614)
* Wheeled body

* 100hz only for balance

* No carparams in locationd no more

* Update ref
2024-02-27 13:23:04 -08:00
Cameron Clough 0e41bf3474 Ford: fix As-Built request identifier (#31609)
Should be 0xDE00 not 0xDE
2024-02-27 10:59:27 -08:00
Justin Newberry d457ed9d50 chrysler: freeze dataclass + remove more from interface (#31613)
* fix

* fix
2024-02-27 10:23:13 -08:00
Justin Newberry 666c41d969 Chrylser: move to platform config (#31600)
* do chrysler

* chrysler specs

* cleanup

Co-authored-by: Shane Smiskol <shane@smiskol.com>

---------

Co-authored-by: Shane Smiskol <shane@smiskol.com>
2024-02-27 10:16:22 -08:00
Justin Newberry d3f0f76a7e Nissan: move to platform config (#31599)
* do nissan

* cleanup + fix
2024-02-27 10:16:06 -08:00
Shane Smiskol 3978e7e98c [bot] Fingerprints: add missing FW versions from new users (#31572)
* Export fingerprints

* get these FP in
2024-02-27 04:40:46 -08:00
Cameron Clough c724d1c86c Ford: log interesting module configuration data (#31569)
* Ford: log interesting module configuration data

Ford ECUs have what is called "As-Built Data" which is configured at the
factory/workshop to set what packages/features are enabled on the car.
But they also contain vehicle specific information (VIN, make, model,
weight, wheel base...), DTC information and driver preferences.

I dumped the CAN traffic for the FORScan diagnostic tool to see how it
requests this information from the ECUs.

<details>
<summary>FORScan communication with IPMA (camera)</summary>
<pre>
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': '0200'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'TESTER_PRESENT', 'hex': '00'}
{'addr': 1806, 'type': 'positive_response', 'service': 'TESTER_PRESENT', 'hex': '00'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f190'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de00'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de00020799dbaa10296516a440000000000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f113'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1\x13JX7T-19H406-CH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f1134a5837542d3139483430362d434800000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f188'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1\x88JX7T-14F397-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f1884a5837542d3134463339372d414800000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f120'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1 JX7T-14F397-BF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f1204a5837542d3134463339372d424600000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f121'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f124'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1$JX7T-14F398-AG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f1244a5837542d3134463339382d414700000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f125'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1%JX7T-14F398-BF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f1254a5837542d3134463339382d424600000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f126'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f10a'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f111'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1\x11JX7T-14F403-CA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f1114a5837542d3134463430332d434100000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f18c'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1\x8c182762191\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f18c31383237363231393100000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f162'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f110'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1\x10DS-JX7T-19H406-AD\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f11044532d4a5837542d3139483430362d414400000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': '0202'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'd100'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'd10001'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'd700'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'd70001010101'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'd701'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'd70101020000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'dd01'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'dd010102f8'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'f113'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'data': b'\xf1\x13JX7T-19H406-CH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'hex': 'f1134a5837542d3139483430362d434800000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'fd08'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'fd0800000500500100300000000000000000000000300000000000000000200100400300100200001200f00300500000000000000300c00b00400200000000000000000000000000000000200f01201e01501400a00200200400700d02501d01700700e06405005e05503401100a000000002002002001000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'fd09'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'fd09ffec0001fef60002'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de00'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de00020799dbaa10296516a440000000000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DTC_INFORMATION', 'hex': '028f'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DTC_INFORMATION', 'hex': '02ff50019768c253002cc401862cc418862c'}
... skip DTC requests ...
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de00'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de00020799dbaa10296516a440000000000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de01'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de01fd5616db5fffff557fe1f842080000000800000008000000080000000819bfe00f7c00000000000000000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de02'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de02800000008000000080000000800000008337fc00800000008000000080000000800000008337fc0000000000000000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de03'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de03fffc26c3800000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de04'}
{'addr': 1806, 'type': 'positive_response', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de04546a8c0000000000'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de05'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de06'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de07'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de08'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de09'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de0a'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de0b'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de0c'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de0d'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
{'addr': 1798, 'type': 'request', 'service': 'READ_DATA_BY_IDENTIFIER', 'hex': 'de0e'}
{'addr': 1806, 'type': 'negative_response', 'hex': '2231'}
</pre>
</details>

Using UDS service `READ_DATA_BY_IDENTIFIER`, we can read the As-Built
blocks from `0xDExx` with no diagnostic session/security access necessary.

I used [Online As-Built databases](https://cyanlabs.net/asbuilt-db/) and
various coding spreadsheets shared online to find values we might be
interested in using for fingerprinting (both vehicle parameters and
identifying the platform).

ABS:
- Payload tier (Base, Mid Payload Upgrade, Heavy Duty Payload
  Upgrade...)
- Wheelbase
- Steering ratio
- Cruise Control Mode (Normal, Adaptive)
- Enable Stop and Go

PSCM:
- Enable Lane Keeping Aid
- Enable Traffic Jam Assist
- Enable Lane Centering Assist

IPMA (Q4):
- Steering ratio
- Wheelbase

APIM (Sync 3 and Sync 4):
- Steering ratio
- Vehicle weight
- Wheelbase

There are more potentially useful signals which I haven't included
although they might not be necessary:
- Vehicle (Ford platform code, like "C344" or "C519" - although the
  source of the mapping from index to code is FORScan and not Ford
themselves unless we can find a better source).
- Fuel type
- Vehicle length/height/front track/rear track
- Tire circumference (could be useful for converting wheel speed rad/s
  to m/s)
- Steering angle source (Pinion, Wheel)
- Country code (letters, e.g. US, CA or UK)
- Transmission type
- CAN network architecture
- More feature flags (the APIM also stores settings for ACC, LCA, BLIS)

The full list of settings I have found is
[here](https://github.com/incognitojam/op-notebooks/blob/main/ford/settings.py).

* FwQueryConfig: add data_requests

* add car_data to CarInterface get_params

* Revert "add car_data to CarInterface get_params"

This reverts commit aa161a6b82082705db97bea2c4317e1888a74845.

* test_ford: add APIM ecu address

* Revert "FwQueryConfig: add data_requests"

This reverts commit dc5484a9b80be5bc61a7fdf55560b8813bc43ef7.

* fix block numbers and add extra queries

* bump test_fw_query_timing

* add missing query whitelists

* simplify asbuilt requests

* use forscan block ids

* formatting

---------

Co-authored-by: Shane Smiskol <shane@smiskol.com>
2024-02-27 04:22:10 -08:00
Justin Newberry 9ecff49118 platformconfig: freeze all dataclasses (#31605)
* frozen

* frozen
2024-02-26 21:16:05 -08:00
Justin Newberry 6d0027342a remove cast for platformconfig (#31604)
* this isnt required

* Cleaner
2024-02-26 21:01:41 -08:00
Jason Wen 4124c4593f Merge remote-tracking branch 'commaai/openpilot/master' into sync-20240224
# Conflicts:
#	cereal
#	opendbc
#	panda
2024-02-26 16:39:04 -05:00
Justin Newberry 9d1cafd0fc move with_http_server to selfdrive/test/helpers (#31597)
* move

* fix
2024-02-26 12:53:17 -08:00
Cameron Clough 8e03cdfc2a Ford: move to PlatformConfig (#31554)
* Ford: move to PlatformConfig

* Align Aviator model years with Explorer

* Add CarSpecs to PlatformConfig

---------

Co-authored-by: justin <justin@comma.ai>
2024-02-25 17:55:42 -08:00
Eric Brown 5012e15aa6 GM: move to platform config (#31553)
* subaru platform config

* forester wrong dbc

* spacing

* subaru car specs

* someday!

* more red diff

* Move GM to platform config

* Implement CarSpecs

* Simplify centerToFront

* Accidentally had subaru DBC

* Fix typo in DBC name

* done above

* two spaces

* that is moved up

* fix hardcoded fingerprints

* whitespace

* values

* better?

* fix

* bump

* fix

* fix

---------

Co-authored-by: Justin Newberry <justin@comma.ai>
2024-02-25 17:53:26 -08:00
Jason Young da540eac13 VW: Move car specs to PlatformConfig (#31567)
* subaru platform config

* forester wrong dbc

* spacing

* subaru car specs

* someday!

* more red diff

* all brands can be done like this

* but this should be done first and thats subaru specific

* that seems very low but we shouldn't change it here

* as long as it subclasses str its fine

* well that sucked

* cleanup and follow refactor

* diff reduction

* oops

* fix

* force fingerprint

* Revert "force fingerprint"

This reverts commit 600fbcd7d559703601a06c8876a640de417e5b6c.

* space

* Fix specs

* this one too

---------

Co-authored-by: Justin Newberry <justin@comma.ai>
2024-02-25 17:38:17 -08:00
Cameron Clough 80da3aee14 mypy: use implicit-optional (#31590)
* mypy: set implicit-optional = true

* find and replace '| None = None' -> '= None' in function args
2024-02-25 13:29:18 -08:00
Cameron Clough be8e503a7d cars: update platforms typing syntax (#31586) 2024-02-25 11:24:33 -05:00
Justin Newberry cdd4d418aa Subaru: fix forester weight (#31585)
fix weight
2024-02-24 23:15:16 -08:00
Justin Newberry e6009d80e9 cars: introduce "Platform" union type for all car enums (#31558)
* Hmm

* release

* hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm

* unrelated

* forgot

* cleaner

* Platform

* new syntax

* Fix

* clean

* Fix
2024-02-24 22:18:13 -08:00
Jason Wen 9aca2536aa Merge branch 'upstream/openpilot/master' into sync-20240224
# Conflicts:
#	selfdrive/car/subaru/values.py
2024-02-24 20:46:45 -05:00
Cameron Clough 995250ae49 use pyupgrade to update to new typing syntax (#31580)
* add pyupgrade hook

* run pyupgrade (pre-commit run -a)

* ruff --fix

* Revert "add pyupgrade hook"

This reverts commit 56ec18bb6b8602a0b612f3803d96cdad14b52066.

* revert changes to third_party/

* manual type fixes

* explicit Optional wrapping capnp objects
2024-02-24 16:41:23 -08:00
Cameron Clough 6ed72b3626 Ford: add hybrid variants to docs (#31575)
* Ford: add hybrid variants to docs

Following up on https://github.com/commaai/openpilot/pull/31568

| CarInfoPlatform              | ElectrificationLevel   | ModelYear              | Series                                                                                            | Trim                                                                |
|:-----------------------------|:-----------------------|:-----------------------|:--------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------|
| FORD BRONCO SPORT 1ST GEN    | ICE                    | 2021, 2022             | BADLANDS, BASE, BIG BEND, FIRST EDITION, OUTER BANKS                                              |                                                                     |
| FORD ESCAPE 4TH GEN          | FHEV                   | 2020, 2021, 2022       | SE, SEL, Titanium                                                                                 |                                                                     |
| FORD ESCAPE 4TH GEN          | ICE                    | 2020, 2021, 2022       | S, SE, SEL, Titanium                                                                              |                                                                     |
| FORD ESCAPE 4TH GEN          | PHEV                   | 2020, 2021, 2022       | SE, SEL, Titanium                                                                                 |                                                                     |
| FORD EXPLORER 6TH GEN        | HEV                    | 2020, 2021, 2022, 2023 | Limited, Platinum                                                                                 |                                                                     |
| FORD EXPLORER 6TH GEN        | ICE                    | 2020, 2021, 2022, 2023 | Base, Black Label, King Ranch, Limited, Platinum, Reserve, ST, ST-Line, Standard, Timberline, XLT |                                                                     |
| FORD EXPLORER 6TH GEN        | PHEV                   | 2020, 2021             | Black Label Grand Touring, Blk Label Grand Touring, Grand Touring                                 |                                                                     |
| FORD F-150 14TH GEN          | HEV                    | 2021, 2022, 2023       | , F-Series                                                                                        | SuperCrew                                                           |
| FORD F-150 14TH GEN          | ICE                    | 2021, 2022, 2023       | , F-Series                                                                                        | , Regular Cab, SuperCab, SuperCrew, SuperCrew-Raptor, SuperCrew-SSV |
| FORD F-150 LIGHTNING 1ST GEN | BEV                    | 2022, 2023             |                                                                                                   | SuperCrew                                                           |
| FORD MAVERICK 1ST GEN        | HEV                    | 2022, 2023             | SUPERCREW, XL XLT Lariat                                                                          | , SUPERCREW                                                         |
| FORD MAVERICK 1ST GEN        | ICE                    | 2022, 2023             | SUPERCREW, XL XLT Lariat, XLT Lariat                                                              | , SUPERCREW                                                         |
| FORD MUSTANG MACH-E 1ST GEN  | BEV                    | 2021, 2022, 2023       | California Route 1, GT, Premium, Select                                                           |                                                                     |

Data from NHTSA database and https://www.ford.co.uk/cars.

* revert F-150 model year change
2024-02-24 10:01:02 -08:00
Jason Wen 73ff33005d Merge branch 'upstream/openpilot/master' into sync-20240224
# Conflicts:
#	panda
#	selfdrive/car/subaru/values.py
2024-02-24 09:51:14 -05:00