diff --git a/.github/workflows/auto_pr_review.yaml b/.github/workflows/auto_pr_review.yaml index ffe380a8b21..a7eefc67c17 100644 --- a/.github/workflows/auto_pr_review.yaml +++ b/.github/workflows/auto_pr_review.yaml @@ -23,12 +23,12 @@ jobs: # Check PR target branch - name: check branch uses: Vankka/pr-target-branch-action@def32ec9d93514138d6ac0132ee62e120a72aed5 - if: github.repository == 'commaai/opendbc' + if: github.repository == 'op-community/opendbc' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: target: /^(?!master$).*/ - exclude: /commaai:.*/ + exclude: /op-community:.*/ change-to: ${{ github.base_ref }} already-exists-action: close_this already-exists-comment: "Your PR should be made against the `master` branch" @@ -36,7 +36,7 @@ jobs: # Welcome comment - name: "First timers PR" uses: actions/first-interaction@v1 - if: github.event.pull_request.head.repo.full_name != 'commaai/opendbc' + if: github.event.pull_request.head.repo.full_name != 'op-community/opendbc' with: repo-token: ${{ secrets.GITHUB_TOKEN }} pr-message: | diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 34a7f7aed09..92be8b8adbb 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -20,7 +20,7 @@ jobs: stale-pr-message: 'This PR has had no activity for ${{ env.DAYS_BEFORE_PR_STALE }} days. It will be automatically closed in ${{ env.DAYS_BEFORE_PR_CLOSE }} days if there is no activity.' close-pr-message: 'This PR has been automatically closed due to inactivity. Feel free to re-open once activity resumes.' stale-pr-label: stale - delete-branch: ${{ github.event.pull_request.head.repo.full_name == 'commaai/opendbc' }} # only delete branches on the main repo + delete-branch: ${{ github.event.pull_request.head.repo.full_name == 'op-community/opendbc' }} # only delete branches on the main repo exempt-draft-pr: true exempt-pr-labels: "ignore stale" # if wip, don't mark as stale days-before-pr-stale: ${{ env.DAYS_BEFORE_PR_STALE }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 8a8502e2be4..64cd83424b8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -14,23 +14,23 @@ jobs: fail-fast: false matrix: include: - - os: ${{ github.repository == 'commaai/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-24.04' }} + - os: ${{ github.repository == 'op-community/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-24.04' }} flags: '' - - os: ${{ github.repository == 'commaai/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-24.04' }} + - os: ${{ github.repository == 'op-community/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-24.04' }} flags: '--ubsan' - - os: ${{ github.repository == 'commaai/opendbc' && 'namespace-profile-macos-8x14' || 'macos-latest' }} + - os: ${{ github.repository == 'op-community/opendbc' && 'namespace-profile-macos-8x14' || 'macos-latest' }} flags: '' steps: - uses: commaai/timeout@v1 with: - timeout: ${{ github.repository == 'commaai/opendbc' && '60' || '999' }} + timeout: ${{ github.repository == 'op-community/opendbc' && '60' || '999' }} - uses: actions/checkout@v4 - uses: ./.github/workflows/cache - run: ./test.sh ${{ matrix.flags }} mutation: name: Safety mutation tests - runs-on: ${{ github.repository == 'commaai/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-latest' }} + runs-on: ${{ github.repository == 'op-community/opendbc' && 'namespace-profile-amd64-8x16' || 'ubuntu-latest' }} timeout-minutes: 20 env: GIT_REF: ${{ github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && github.event.before || format('origin/{0}', github.event.repository.default_branch) }} diff --git a/docs/CARS.md b/docs/CARS.md index b6068fdb157..be2a5091f96 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -1,6 +1,6 @@ -# Support Information for 361 Known Cars +# Support Information for 362 Known Cars |Make|Model|Package|Support Level| |---|---|---|:---:| @@ -14,7 +14,7 @@ |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|Q3 2019-24|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)| @@ -38,6 +38,7 @@ |Ford|Escape Hybrid 2023-24|Co-Pilot360 Assist+|[Upstream](#upstream)| |Ford|Escape Plug-in Hybrid 2020-22|Co-Pilot360 Assist+|[Upstream](#upstream)| |Ford|Escape Plug-in Hybrid 2023-24|Co-Pilot360 Assist+|[Upstream](#upstream)| +|Ford|Expedition 2022-24|Co-Pilot360 Assist 2.0|[Upstream](#upstream)| |Ford|Explorer 2020-24|Co-Pilot360 Assist+|[Upstream](#upstream)| |Ford|Explorer Hybrid 2020-24|Co-Pilot360 Assist+|[Upstream](#upstream)| |Ford|F-150 2021-23|Co-Pilot360 Assist 2.0|[Upstream](#upstream)| @@ -53,7 +54,7 @@ |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|All|[Upstream](#upstream)| +|Ford|Mustang Mach-E 2021-24|All|[Upstream](#upstream)| |Ford|Ranger 2024|Adaptive Cruise Control with Lane Centering|[Upstream](#upstream)| |Genesis|G70 2018|All|[Upstream](#upstream)| |Genesis|G70 2019-21|All|[Upstream](#upstream)| @@ -79,8 +80,8 @@ |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|Civic Hatchback Hybrid 2023 (Europe only)|All|[Upstream](#upstream)| |Honda|Civic Hatchback Hybrid 2025|All|[Upstream](#upstream)| +|Honda|Civic Hatchback Hybrid (Europe only) 2023|All|[Upstream](#upstream)| |Honda|Clarity 2018-21|All|[Community](#community)| |Honda|CR-V 2015-16|Touring Trim|[Upstream](#upstream)| |Honda|CR-V 2017-22|Honda Sensing|[Upstream](#upstream)| @@ -192,12 +193,12 @@ |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 2019-25|All|[Upstream](#upstream)| |Lexus|ES Hybrid 2017-18|All|[Upstream](#upstream)| |Lexus|ES Hybrid 2019-25|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|IS 2022-24|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)| @@ -358,11 +359,11 @@ |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|Taos 2022-24|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-23|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)| diff --git a/opendbc/car/chrysler/fingerprints.py b/opendbc/car/chrysler/fingerprints.py index ba7d02e2cfd..e937355d3c9 100644 --- a/opendbc/car/chrysler/fingerprints.py +++ b/opendbc/car/chrysler/fingerprints.py @@ -130,6 +130,7 @@ b'68496647AJ ', b'68496650AH ', b'68496650AI ', + b'68496650AL ', b'68496652AH ', b'68526752AD ', b'68526752AE ', @@ -145,6 +146,7 @@ b'68414275AC', b'68414275AD', b'68443154AB', + b'68443154AC', b'68443155AC', b'68443158AB', b'68501050AD', @@ -233,6 +235,7 @@ b'68594341AB', ], (Ecu.engine, 0x7e0, None): [ + b'68416680AD ', b'68416680AE ', b'68416680AF ', b'68416680AG ', @@ -262,6 +265,7 @@ b'05190289AE', b'68540977AH', b'68540977AK', + b'68540977AL', b'68597647AE', b'68597647AF', b'68632416AB', @@ -417,6 +421,7 @@ b'68434847AC', b'68434849AC', b'68434850AC', + b'68434855AC', b'68434856AC', b'68434858AC', b'68434859AC', @@ -469,6 +474,7 @@ ], (Ecu.srs, 0x744, None): [ b'68428609AB', + b'68441329AA', b'68441329AB', b'68473844AB', b'68490898AA', @@ -494,6 +500,8 @@ b'68548900AC', b'68586307AB', b'68586307AC', + b'68728724AA', + b'68728727AA', ], (Ecu.fwdRadar, 0x753, None): [ b'04672892AB', @@ -525,6 +533,7 @@ b'68466110AA', b'68466110AB', b'68466113AA', + b'68466116AA', b'68469901AA', b'68469904AA', b'68469907AA', @@ -570,6 +579,7 @@ b'05190346AD', b'68378695AI ', b'68378695AJ ', + b'68378695AK ', b'68378696AJ ', b'68378696AK ', b'68378701AI ', @@ -591,6 +601,7 @@ b'68455119AC ', b'68455137AC ', b'68455142AC ', + b'68455142AE ', b'68455145AC ', b'68455145AE ', b'68455146AC ', @@ -602,11 +613,13 @@ b'68467936AC ', b'68500630AD', b'68500630AE', + b'68500630AF', b'68500631AE', b'68502719AC ', b'68502722AC ', b'68502733AC ', b'68502734AF ', + b'68502737AF ', b'68502740AF ', b'68502741AF ', b'68502742AC ', @@ -639,6 +652,7 @@ b'68360081AN', b'68360085AH', b'68360085AJ', + b'68360085AK', b'68360085AL', b'68360085AO', b'68360086AH', diff --git a/opendbc/car/debug/format_fingerprints.py b/opendbc/car/debug/format_fingerprints.py new file mode 100755 index 00000000000..a94d7aa5cce --- /dev/null +++ b/opendbc/car/debug/format_fingerprints.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +import jinja2 +import os + +from opendbc.car.common.basedir import BASEDIR +from opendbc.car.interfaces import get_interface_attr +from opendbc.car.structs import CarParams + +Ecu = CarParams.Ecu + +CARS = get_interface_attr('CAR') +FW_VERSIONS = get_interface_attr('FW_VERSIONS') +FINGERPRINTS = get_interface_attr('FINGERPRINTS') +ECU_NAME = {v: k for k, v in Ecu.schema.enumerants.items()} + +FINGERPRINTS_PY_TEMPLATE = jinja2.Template(""" +{%- if FINGERPRINTS[brand] %} +# ruff: noqa: E501 +{% endif %} +{% if FW_VERSIONS[brand] %} +from opendbc.car.structs import CarParams +{% endif %} +from opendbc.car.{{brand}}.values import CAR +{% if FW_VERSIONS[brand] %} + +Ecu = CarParams.Ecu +{% endif %} +{% if comments +%} +{{ comments | join() }} +{% endif %} +{% if FINGERPRINTS[brand] %} + +FINGERPRINTS = { +{% for car, fingerprints in FINGERPRINTS[brand].items() %} + CAR.{{car.name}}: [{ +{% for fingerprint in fingerprints %} +{% if not loop.first %} + {{ "{" }} +{% endif %} + {% for key, value in fingerprint.items() %}{{key}}: {{value}}{% if not loop.last %}, {% endif %}{% endfor %} + + }{% if loop.last %}]{% endif %}, +{% endfor %} +{% endfor %} +} +{% endif %} + +FW_VERSIONS{% if not FW_VERSIONS[brand] %}: dict[str, dict[tuple, list[bytes]]]{% endif %} = { +{% for car, _ in FW_VERSIONS[brand].items() %} + CAR.{{car.name}}: { +{% for key, fw_versions in FW_VERSIONS[brand][car].items() %} + (Ecu.{{ECU_NAME[key[0]]}}, 0x{{"%0x" | format(key[1] | int)}}, \ +{% if key[2] %}0x{{"%0x" | format(key[2] | int)}}{% else %}{{key[2]}}{% endif %}): [ + {% for fw_version in (fw_versions + extra_fw_versions.get(car, {}).get(key, [])) | unique | sort %} + {{fw_version}}, + {% endfor %} + ], +{% endfor %} + }, +{% endfor %} +} + +""", trim_blocks=True) + + +def format_brand_fw_versions(brand, extra_fw_versions: None | dict[str, dict[tuple, list[bytes]]] = None): + extra_fw_versions = extra_fw_versions or {} + + fingerprints_file = os.path.join(BASEDIR, f"{brand}/fingerprints.py") + with open(fingerprints_file) as f: + comments = [line for line in f.readlines() if line.startswith("#") and "noqa" not in line] + + with open(fingerprints_file, "w") as f: + f.write(FINGERPRINTS_PY_TEMPLATE.render(brand=brand, comments=comments, ECU_NAME=ECU_NAME, + FINGERPRINTS=FINGERPRINTS, FW_VERSIONS=FW_VERSIONS, + extra_fw_versions=extra_fw_versions)) + + +if __name__ == "__main__": + for brand in FW_VERSIONS.keys(): + format_brand_fw_versions(brand) diff --git a/opendbc/car/ford/fingerprints.py b/opendbc/car/ford/fingerprints.py index fbc0ef557c7..a7be74cbed7 100644 --- a/opendbc/car/ford/fingerprints.py +++ b/opendbc/car/ford/fingerprints.py @@ -89,14 +89,30 @@ b'LC5T-14F397-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], }, + CAR.FORD_EXPEDITION_MK4: { + (Ecu.eps, 0x730, None): [ + b'NL14-14D003-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.abs, 0x760, None): [ + b'RL14-2D053-AA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdRadar, 0x764, None): [ + b'ML3T-14D049-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + (Ecu.fwdCamera, 0x706, None): [ + b'ML3T-14H102-ABT\x00\x00\x00\x00\x00\x00\x00\x00\x00', + ], + }, CAR.FORD_F_150_MK14: { (Ecu.eps, 0x730, None): [ b'ML3V-14D003-BC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'ML3V-14D003-BD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.abs, 0x760, None): [ b'NL34-2D053-CA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PL34-2D053-CA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PL34-2D053-CC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PL3V-2D053-BA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PL3V-2D053-BB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x764, None): [ @@ -104,9 +120,11 @@ ], (Ecu.fwdCamera, 0x706, None): [ b'ML3T-14H102-ABR\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'ML3T-14H102-ABS\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'ML3T-14H102-ABT\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PJ6T-14H102-ABJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'RJ6T-14H102-ACJ\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'RJ6T-14H102-BBC\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], }, CAR.FORD_F_150_LIGHTNING_MK1: { @@ -130,10 +148,13 @@ (Ecu.eps, 0x730, None): [ b'LJ9C-14D003-AM\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'LJ9C-14D003-CC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LJ9C-14D003-FA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'LJ9C-14D003-GA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LJ9C-14D003-HA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.abs, 0x760, None): [ b'LK9C-2D053-CK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'LK9C-2D053-CN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x764, None): [ b'ML3T-14D049-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', @@ -179,11 +200,13 @@ }, CAR.FORD_RANGER_MK2: { (Ecu.eps, 0x730, None): [ + b'NB3C-14D003-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'NL14-14D003-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'RB3C-14D003-AA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.abs, 0x760, None): [ b'PB3C-2D053-ZD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PB3C-2D053-ZG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PB3C-2D053-ZJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x764, None): [ diff --git a/opendbc/car/ford/interface.py b/opendbc/car/ford/interface.py index ddda8a4f901..97685df58c6 100644 --- a/opendbc/car/ford/interface.py +++ b/opendbc/car/ford/interface.py @@ -29,6 +29,7 @@ def get_pid_accel_limits(CP, current_speed, cruise_speed): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_long, is_release, docs) -> structs.CarParams: ret.brand = "ford" + ret.radarUnavailable = Bus.radar not in DBC[candidate] ret.steerControlType = structs.CarParams.SteerControlType.angle ret.steerActuatorDelay = 0.2 ret.steerLimitTimer = 1.0 @@ -37,14 +38,10 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo ret.longitudinalTuning.kiBP = [0.] ret.longitudinalTuning.kiV = [0.5] - # TODO: verify MRR_64 before it's used for longitudinal control - if DBC[candidate][Bus.radar] == RADAR.DELPHI_MRR: + if not ret.radarUnavailable and DBC[candidate][Bus.radar] == RADAR.DELPHI_MRR: # average of 33.3 Hz radar timestep / 4 scan modes = 60 ms # MRR_Header_Timestamps->CAN_DET_TIME_SINCE_MEAS reports 61.3 ms ret.radarDelay = 0.06 - elif DBC[candidate][Bus.radar] == RADAR.DELPHI_MRR_64: - # average of 20 Hz radar timestep / 4 scan modes = 100 ms - ret.radarDelay = 0.1 CAN = CanBus(fingerprint=fingerprint) cfgs = [get_safety_config(structs.CarParams.SafetyModel.ford)] @@ -52,10 +49,8 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo cfgs.insert(0, get_safety_config(structs.CarParams.SafetyModel.noOutput)) ret.safetyConfigs = cfgs - # For now continue to allow the user to still fall back to Ford Long - # for CANFD platforms - in case radar is not fully reliable - ret.alphaLongitudinalAvailable = bool(ret.flags & FordFlags.CANFD) - if alpha_long or not bool(ret.flags & FordFlags.CANFD): + ret.alphaLongitudinalAvailable = ret.radarUnavailable + if alpha_long or not ret.radarUnavailable: ret.safetyConfigs[-1].safetyParam |= FordSafetyFlags.LONG_CONTROL.value ret.openpilotLongitudinalControl = True diff --git a/opendbc/car/ford/radar_interface.py b/opendbc/car/ford/radar_interface.py index 871ae3e68c0..59b0efceac0 100644 --- a/opendbc/car/ford/radar_interface.py +++ b/opendbc/car/ford/radar_interface.py @@ -15,7 +15,6 @@ DELPHI_MRR_RADAR_START_ADDR = 0x120 DELPHI_MRR_RADAR_HEADER_ADDR = 0x174 # MRR_Header_SensorCoverage DELPHI_MRR_RADAR_MSG_COUNT = 64 -DELPHI_MRR_RADAR_MSG_COUNT_64 = 22 # 22 messages in CANFD DELPHI_MRR_RADAR_RANGE_COVERAGE = {0: 42, 1: 164, 2: 45, 3: 175} # scan index to detection range (m) DELPHI_MRR_MIN_LONG_RANGE_DIST = 30 # meters @@ -90,16 +89,6 @@ def _create_delphi_mrr_radar_can_parser(CP) -> CANParser: return CANParser(RADAR.DELPHI_MRR, messages, CanBus(CP).radar) -def _create_delphi_mrr_radar_can_parser_64(CP) -> CANParser: - messages = [] - - for i in range(1, DELPHI_MRR_RADAR_MSG_COUNT_64 + 1): - msg = f"MRR_Detection_{i:03d}" - messages += [(msg, 20)] - - return CANParser(RADAR.DELPHI_MRR_64, messages, CanBus(CP).radar) - - class RadarInterface(RadarInterfaceBase): def __init__(self, CP): super().__init__(CP) @@ -122,9 +111,6 @@ def __init__(self, CP): elif self.radar == RADAR.DELPHI_MRR: self.rcp = _create_delphi_mrr_radar_can_parser(CP) self.trigger_msg = DELPHI_MRR_RADAR_HEADER_ADDR - elif self.radar == RADAR.DELPHI_MRR_64: - self.rcp = _create_delphi_mrr_radar_can_parser_64(CP) - self.trigger_msg = DELPHI_MRR_RADAR_START_ADDR + DELPHI_MRR_RADAR_MSG_COUNT_64 - 1 else: raise ValueError(f"Unsupported radar: {self.radar}") @@ -149,10 +135,6 @@ def update(self, can_strings): _update = self._update_delphi_mrr(ret) if not _update: return None - elif self.radar == RADAR.DELPHI_MRR_64: - _update = self._update_delphi_mrr_64(ret) - if not _update: - return None ret.points = list(self.pts.values()) return ret @@ -230,7 +212,6 @@ def _update_delphi_mrr(self, ret: structs.RadarData): valid = bool(msg[f"CAN_DET_VALID_LEVEL_{ii:02d}"]) - # TODO: verify this is correct for CANFD as well - copied from CAN version # Long range measurement mode is more sensitive and can detect the road surface dist = msg[f"CAN_DET_RANGE_{ii:02d}"] # m [0|255.984] if scanIndex in (1, 3) and dist < DELPHI_MRR_MIN_LONG_RANGE_DIST: @@ -248,59 +229,6 @@ def _update_delphi_mrr(self, ret: structs.RadarData): if headerScanIndex != 3: return False - self.do_clustering() - return True - - def _update_delphi_mrr_64(self, ret: structs.RadarData): - # Ensure all point IDs match. Note that this message is sent first, but trigger_msg waits for the last message to come in - headerScanIndex = int(self.rcp.vl["MRR_Detection_001"]['CAN_SCAN_INDEX_2LSB_01_01']) - - # TODO: Verify the below is correct for CANFD as well - copied from CAN version - # Use points with Doppler coverage of +-60 m/s, reduces similar points - if headerScanIndex in (0, 1): - return False - - for ii in range(1, DELPHI_MRR_RADAR_MSG_COUNT_64 + 1): - msg = self.rcp.vl[f"MRR_Detection_{ii:03d}"] - - # all messages have 6 points except the last one - maxRangeID = 6 if ii < DELPHI_MRR_RADAR_MSG_COUNT_64 else 3 - for iii in range(1, maxRangeID + 1): - - # SCAN_INDEX rotates through 0..3 - # TODO: Verify the below is correct for CANFD as well - copied from CAN version - # Indexes 0 and 2 have a max range of ~40m, 1 and 3 are ~170m (MRR_Header_SensorCoverage->CAN_RANGE_COVERAGE) - # Indexes 0 and 1 have a Doppler coverage of +-71 m/s, 2 and 3 have +-60 m/s - scanIndex = msg[f"CAN_SCAN_INDEX_2LSB_{ii:02d}_{iii:02d}"] - - # Throw out old measurements. Very unlikely to happen, but is proper behavior - if scanIndex != headerScanIndex: - continue - - valid = bool(msg[f"CAN_DET_VALID_LEVEL_{ii:02d}_{iii:02d}"]) - - # Long range measurement mode is more sensitive and can detect the road surface - dist = msg[f"CAN_DET_RANGE_{ii:02d}_{iii:02d}"] # m [0|255.984] - if scanIndex in (1, 3) and dist < DELPHI_MRR_MIN_LONG_RANGE_DIST: - valid = False - - if valid: - azimuth = msg[f"CAN_DET_AZIMUTH_{ii:02d}_{iii:02d}"] # rad [-3.1416|3.13964] - distRate = msg[f"CAN_DET_RANGE_RATE_{ii:02d}_{iii:02d}"] # m/s [-128|127.984] - dRel = cos(azimuth) * dist # m from front of car - yRel = sin(azimuth) * dist # in car frame's y axis, right is positive - - self.points.append([dRel, yRel * 2, distRate * 2]) - - if headerScanIndex != 3: - return True - - # Update the points once we've cycled through all 4 scan modes - self.do_clustering() - return True - - # Do the common work for CAN and CANFD clustering and prepare the points to be used for liveTracks - def do_clustering(self): # Cluster points from this cycle against the centroids from the previous cycle prev_keys = [[p.dRel, p.yRel * 2, p.vRel * 2] for p in self.clusters] labels = cluster_points(prev_keys, self.points, DELPHI_MRR_CLUSTER_THRESHOLD) @@ -340,3 +268,5 @@ def do_clustering(self): del self.pts[idx] self.points = [] + + return True diff --git a/opendbc/car/ford/values.py b/opendbc/car/ford/values.py index 5fe409fe334..796fbecd50f 100644 --- a/opendbc/car/ford/values.py +++ b/opendbc/car/ford/values.py @@ -56,7 +56,6 @@ class FordFlags(IntFlag): class RADAR: DELPHI_ESR = 'ford_fusion_2018_adas' DELPHI_MRR = 'FORD_CADS' - DELPHI_MRR_64 = 'FORD_CADS_64' class Footnote(Enum): @@ -83,7 +82,7 @@ def init_make(self, CP: CarParams): if harness == CarHarness.ford_q4: self.setup_video = "https://www.youtube.com/watch?v=uUGkH6C_EQU" - if CP.carFingerprint in (CAR.FORD_F_150_MK14, CAR.FORD_F_150_LIGHTNING_MK1): + if CP.carFingerprint in (CAR.FORD_F_150_MK14, CAR.FORD_F_150_LIGHTNING_MK1, CAR.FORD_EXPEDITION_MK4): self.setup_video = "https://www.youtube.com/watch?v=MewJc9LYp9M" @dataclass @@ -107,7 +106,6 @@ def init(self): class FordCANFDPlatformConfig(FordPlatformConfig): dbc_dict: DbcDict = field(default_factory=lambda: { Bus.pt: 'ford_lincoln_base_pt', - Bus.radar: RADAR.DELPHI_MRR_64, }) def init(self): @@ -137,7 +135,7 @@ class CAR(Platforms): ) FORD_ESCAPE_MK4_5 = FordCANFDPlatformConfig( [ - FordCarDocs("Ford Escape 2023-24", hybrid=True, plug_in_hybrid=True), + FordCarDocs("Ford Escape 2023-24", hybrid=True, plug_in_hybrid=True, setup_video="https://www.youtube.com/watch?v=M6uXf4b2SHM"), FordCarDocs("Ford Kuga Hybrid 2024", "All"), FordCarDocs("Ford Kuga Plug-in Hybrid 2024", "All"), ], @@ -150,6 +148,10 @@ class CAR(Platforms): ], CarSpecs(mass=2050, wheelbase=3.025, steerRatio=16.8), ) + FORD_EXPEDITION_MK4 = FordCANFDPlatformConfig( + [FordCarDocs("Ford Expedition 2022-24", "Co-Pilot360 Assist 2.0", hybrid=False)], + CarSpecs(mass=2000, wheelbase=3.69, steerRatio=17.0), + ) FORD_F_150_MK14 = FordCANFDPlatformConfig( [FordCarDocs("Ford F-150 2021-23", "Co-Pilot360 Assist 2.0", hybrid=True)], CarSpecs(mass=2000, wheelbase=3.69, steerRatio=17.0), @@ -170,7 +172,7 @@ 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", "All", setup_video="https://www.youtube.com/watch?v=AR4_eTF3b_A")], + [FordCarDocs("Ford Mustang Mach-E 2021-24", "All", setup_video="https://www.youtube.com/watch?v=AR4_eTF3b_A")], CarSpecs(mass=2200, wheelbase=2.984, steerRatio=17.0), # TODO: check steer ratio ) FORD_RANGER_MK2 = FordCANFDPlatformConfig( diff --git a/opendbc/car/honda/fingerprints.py b/opendbc/car/honda/fingerprints.py index f8d872d155e..aafcc5dc693 100644 --- a/opendbc/car/honda/fingerprints.py +++ b/opendbc/car/honda/fingerprints.py @@ -54,6 +54,7 @@ b'57114-TVA-C050\x00\x00', b'57114-TVA-C060\x00\x00', b'57114-TVA-C530\x00\x00', + b'57114-TVA-D520\x00\x00', b'57114-TVA-E520\x00\x00', b'57114-TVE-H250\x00\x00', b'57114-TWA-A040\x00\x00', @@ -867,10 +868,10 @@ b'39990-T39-A130\x00\x00', b'39990-T43-J020\x00\x00', b'39990-T43-J030\x00\x00', - b'39990-T60-J030\x00\x00', - b'39990-T56-A040\x00\x00', b'39990-T50-J030\x00\x00', b'39990-T50-J110\x00\x00', + b'39990-T56-A040\x00\x00', + b'39990-T60-J030\x00\x00', ], (Ecu.gateway, 0x18daeff1, None): [ b'38897-T20-A020\x00\x00', @@ -881,10 +882,10 @@ b'38897-T22-A110\x00\x00', b'38897-T24-Z120\x00\x00', b'38897-T47-AA20\x00\x00', - b'38897-T60-A110\x00\x00', - b'38897-T61-A320\x00\x00', b'38897-T50-E310\x00\x00', b'38897-T50-EA10\x00\x00', + b'38897-T60-A110\x00\x00', + b'38897-T61-A320\x00\x00', ], (Ecu.srs, 0x18da53f1, None): [ b'77959-T20-A970\x00\x00', @@ -893,11 +894,11 @@ b'77959-T39-A910\x00\x00', b'77959-T47-A940\x00\x00', b'77959-T47-A950\x00\x00', + b'77959-T50-G010\x00\x00', + b'77959-T50-G930\x00\x00', b'77959-T60-A920\x00\x00', b'77959-T61-A920\x00\x00', - b'77959-T50-G930\x00\x00', b'77959-T65-A920\x00\x00', - b'77959-T50-G010\x00\x00', ], (Ecu.fwdRadar, 0x18dab0f1, None): [ b'36161-T20-A060\x00\x00', @@ -906,15 +907,16 @@ b'36161-T24-T070\x00\x00', b'36161-T38-A060\x00\x00', b'36161-T47-A050\x00\x00', + b'36161-T47-A060\x00\x00', b'36161-T47-A070\x00\x00', - b'8S102-T47-AA20\x00\x00', b'8S102-T20-AA10\x00\x00', + b'8S102-T43-J540\x00\x00', b'8S102-T47-AA10\x00\x00', - b'8S102-T60-AA10\x00\x00', - b'8S102-T56-A060\x00\x00', + b'8S102-T47-AA20\x00\x00', b'8S102-T50-EA10\x00\x00', + b'8S102-T56-A060\x00\x00', + b'8S102-T60-AA10\x00\x00', b'8S102-T64-A040\x00\x00', - b'8S102-T43-J540\x00\x00', ], (Ecu.vsa, 0x18da28f1, None): [ b'57114-T20-AB40\x00\x00', @@ -922,9 +924,9 @@ b'57114-T38-AA20\x00\x00', b'57114-T43-JA30\x00\x00', b'57114-T43-JB30\x00\x00', + b'57114-T50-JC20\x00\x00', b'57114-T60-AA20\x00\x00', b'57114-T61-AJ30\x00\x00', - b'57114-T50-JC20\x00\x00', ], (Ecu.transmission, 0x18da1ef1, None): [ b'28101-65D-A020\x00\x00', diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 4e8ad3ee54a..2e4c73a7f04 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -168,7 +168,7 @@ class CAR(Platforms): [ HondaCarDocs("Honda Civic 2022-24", "All", video="https://youtu.be/ytiOT5lcp6Q"), HondaCarDocs("Honda Civic Hatchback 2022-24", "All", video="https://youtu.be/ytiOT5lcp6Q"), - HondaCarDocs("Honda Civic Hatchback Hybrid 2023 (Europe only)", "All"), + HondaCarDocs("Honda Civic Hatchback Hybrid (Europe only) 2023", "All"), # TODO: Confirm 2024 HondaCarDocs("Honda Civic Hatchback Hybrid 2025", "All"), ], diff --git a/opendbc/car/hyundai/fingerprints.py b/opendbc/car/hyundai/fingerprints.py index 6f4ca692bf4..2f3d507574b 100644 --- a/opendbc/car/hyundai/fingerprints.py +++ b/opendbc/car/hyundai/fingerprints.py @@ -58,8 +58,8 @@ (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00AEH MFC AT EUR LHD 1.00 1.00 95740-G2400 180222', b'\xf1\x00AEH MFC AT EUR LHD 1.00 1.00 95740-G7200 160418', - b'\xf1\x00AEH MFC AT USA LHD 1.00 1.00 95740-G2400 180222', b'\xf1\x00AEH MFC AT EUR RHD 1.00 1.00 95740-G2400 180222', + b'\xf1\x00AEH MFC AT USA LHD 1.00 1.00 95740-G2400 180222', ], }, CAR.HYUNDAI_IONIQ_PHEV_2019: { @@ -141,8 +141,8 @@ }, CAR.HYUNDAI_IONIQ_HEV_2022: { (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00AEhe SCC F-CUP 1.00 1.02 99110-G2100 ', b'\xf1\x00AEhe SCC F-CUP 1.00 1.00 99110-G2600 ', + b'\xf1\x00AEhe SCC F-CUP 1.00 1.02 99110-G2100 ', b'\xf1\x00AEhe SCC FHCUP 1.00 1.00 99110-G2600 ', b'\xf1\x00AEhe SCC FHCUP 1.00 1.02 99110-G2100 ', ], @@ -151,8 +151,8 @@ b'\xf1\x00AE MDPS C 1.00 1.01 56310G2510\x00 4APHC101', ], (Ecu.fwdCamera, 0x7c4, None): [ - b'\xf1\x00AEH MFC AT USA LHD 1.00 1.01 95740-G2600 190819', b'\xf1\x00AEH MFC AT USA LHD 1.00 1.00 95740-G2700 201027', + b'\xf1\x00AEH MFC AT USA LHD 1.00 1.01 95740-G2600 190819', ], }, CAR.HYUNDAI_SONATA: { @@ -160,6 +160,7 @@ b'\xf1\x00DN8_ SCC F-CU- 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC F-CUP 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC F-CUP 1.00 1.02 99110-L1000 ', + b'\xf1\x00DN8_ SCC FHCU- 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC FHCUP 1.00 1.00 99110-L0000 ', b'\xf1\x00DN8_ SCC FHCUP 1.00 1.01 99110-L1000 ', b'\xf1\x00DN8_ SCC FHCUP 1.00 1.02 99110-L1000 ', @@ -279,8 +280,8 @@ b'\xf1\x00TM ESC \x04 101 \x08\x04 58910-S2GA0', b'\xf1\x00TM ESC \x04 102!\x04\x05 58910-S2GA0', b'\xf1\x00TM ESC \x04 103"\x07\x08 58910-S2GA0', - b'\xf1\x00TM ESC \x1e 102 \x08\x08 58910-S1DA0', b'\xf1\x00TM ESC \x1b 102 \x08\x08 58910-S1DA0', + b'\xf1\x00TM ESC \x1e 102 \x08\x08 58910-S1DA0', b'\xf1\x00TM ESC 103!\x030 58910-S1MA0', ], (Ecu.eps, 0x7d4, None): [ @@ -353,6 +354,7 @@ }, CAR.KIA_STINGER: { (Ecu.fwdRadar, 0x7d0, None): [ + b'\xf1\x00CK__ SCC FHCUP 1.00 1.02 96400-J5000 ', b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5000 ', b'\xf1\x00CK__ SCC F_CUP 1.00 1.01 96400-J5100 ', b'\xf1\x00CK__ SCC F_CUP 1.00 1.02 96400-J5100 ', @@ -368,6 +370,7 @@ ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00CK MFC AT EUR LHD 1.00 1.03 95740-J5000 170822', + b'\xf1\x00CK MFC AT KOR LHD 1.00 1.04 95740-J5000 180504', b'\xf1\x00CK MFC AT USA LHD 1.00 1.03 95740-J5000 170822', b'\xf1\x00CK MFC AT USA LHD 1.00 1.04 95740-J5000 180504', ], @@ -384,6 +387,7 @@ b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5320 4C2VL503', b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5380 4C2VR503', b'\xf1\x00CK MDPS R 1.00 5.03 57700-J5520 4C4VL503', + b'\xf1\x00CK MDPS R 1.00 5.04 57700-J5320 4C2VL504', b'\xf1\x00CK MDPS R 1.00 5.04 57700-J5520 4C4VL504', ], (Ecu.fwdCamera, 0x7c4, None): [ @@ -425,6 +429,7 @@ b'\xf1\x00LX ESC \x0b 104 \x10\x13 58910-S8330', b'\xf1\x00LX ESC \x0b 104 \x10\x16 58910-S8360', b'\xf1\x00ON ESC \x01 101\x19\t\x08 58910-S9360', + b'\xf1\x00ON ESC \x01 103$\x04\x08 58910-S9360', b'\xf1\x00ON ESC \x0b 100\x18\x12\x18 58910-S9360', b'\xf1\x00ON ESC \x0b 101\x19\t\x05 58910-S9320', b'\xf1\x00ON ESC \x0b 101\x19\t\x08 58910-S9360', @@ -733,14 +738,14 @@ }, CAR.KIA_NIRO_EV_2ND_GEN: { (Ecu.fwdRadar, 0x7d0, None): [ - b'\xf1\x00SG__ RDR ----- 1.00 1.00 99110-AT200 ', b'\xf1\x00SG2_ RDR ----- 1.00 1.01 99110-AT000 ', + b'\xf1\x00SG__ RDR ----- 1.00 1.00 99110-AT200 ', ], (Ecu.fwdCamera, 0x7c4, None): [ b'\xf1\x00SG2EMFC AT EUR LHD 1.00 1.00 99211-AT200 240315', b'\xf1\x00SG2EMFC AT EUR LHD 1.01 1.09 99211-AT000 220801', - b'\xf1\x00SG2EMFC AT USA LHD 1.01 1.09 99211-AT000 220801', b'\xf1\x00SG2EMFC AT USA LHD 1.00 1.00 99211-AT200 240401', + b'\xf1\x00SG2EMFC AT USA LHD 1.01 1.09 99211-AT000 220801', ], }, CAR.KIA_NIRO_PHEV: { @@ -1028,6 +1033,7 @@ b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI020 230719', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.00 99211-GI100 230915', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.01 99211-GI010 211007', + b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.01 99211-GI100 240110', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.02 99211-GI010 211206', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.03 99211-GI010 220401', b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.05 99211-GI010 220614', @@ -1049,9 +1055,9 @@ }, CAR.HYUNDAI_TUCSON_4TH_GEN: { (Ecu.fwdCamera, 0x7c4, None): [ + b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.00 99211-N9220 14K', b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.00 99211-N9260 14Y', b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.01 99211-N9100 14A', - b'\xf1\x00NX4 FR_CMR AT CAN LHD 1.00 1.00 99211-N9220 14K', b'\xf1\x00NX4 FR_CMR AT EUR LHD 1.00 1.00 99211-N9220 14K', b'\xf1\x00NX4 FR_CMR AT EUR LHD 1.00 2.02 99211-N9000 14E', b'\xf1\x00NX4 FR_CMR AT USA LHD 1.00 1.00 99211-N9210 14G', @@ -1153,6 +1159,7 @@ b'\xf1\x00MQ4HMFC AT KOR LHD 1.00 1.12 99210-P2000 230331', b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.10 99210-P2000 210406', b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.11 99210-P2000 211217', + b'\xf1\x00MQ4HMFC AT USA LHD 1.00 1.12 99210-P2000 230331', ], (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00MQhe SCC FHCUP 1.00 1.04 99110-P4000 ', @@ -1232,16 +1239,16 @@ b'\xf1\x00OSP LKA AT USA LHD 1.00 1.04 99211-J9200 904', ], (Ecu.eps, 0x7d4, None): [ - b'\xf1\x00OSP MDPS C 1.00 1.04 56310/J9291 4OPCC104', b'\xf1\x00OSP MDPS C 1.00 1.04 56310/J9290 4OPCC104', + b'\xf1\x00OSP MDPS C 1.00 1.04 56310/J9291 4OPCC104', ], (Ecu.fwdRadar, 0x7d0, None): [ b'\xf1\x00YB__ FCA ----- 1.00 1.01 99110-J9000 \x00\x00\x00', ], (Ecu.transmission, 0x7e1, None): [ + b'\xf1\x00T01960BL T01E60A1 DOS2T16X4XE60NS4N\x90\xe6\xcb', b'\xf1\x00T01G00BL T01I00A1 DOS2T16X2XI00NS0\x8c`\xff\xe7', b'\xf1\x00T01G00BL T01I00A1 DOS2T16X4XI00NS0\x99L\xeeq', - b'\xf1\x00T01960BL T01E60A1 DOS2T16X4XE60NS4N\x90\xe6\xcb', ], }, } diff --git a/opendbc/car/mazda/fingerprints.py b/opendbc/car/mazda/fingerprints.py index 8b20cad903c..c3ea9051733 100644 --- a/opendbc/car/mazda/fingerprints.py +++ b/opendbc/car/mazda/fingerprints.py @@ -13,8 +13,10 @@ b'PEW5-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PW67-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PW67-188K2-E\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PW8F-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX2C-188K2-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX2D-188K2-G\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'PX2D-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX2G-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX2H-188K2-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PX2H-188K2-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', @@ -23,7 +25,6 @@ b'PXFG-188K2-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PXGC-188K2-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'SH54-188K2-D\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PW8F-188K2-A\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x764, None): [ b'K131-67XK2-F\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', @@ -49,8 +50,8 @@ b'PYB2-21PS1-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PYB2-21PS1-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PYJ3-21PS1-H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'SH51-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PYJ3-21PS1-J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', + b'SH51-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], }, CAR.MAZDA_CX5: { @@ -270,7 +271,7 @@ b'PXM4-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PXM6-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'PXM7-21PS1-B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', - b'PXM7-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + b'PXM7-21PS1-C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', ], }, } diff --git a/opendbc/car/nissan/carcontroller.py b/opendbc/car/nissan/carcontroller.py index 74c6041b4bb..17d6f427aeb 100644 --- a/opendbc/car/nissan/carcontroller.py +++ b/opendbc/car/nissan/carcontroller.py @@ -60,7 +60,7 @@ def update(self, CC, CS, now_nanos): # Below are the HUD messages. We copy the stock message and modify if self.CP.carFingerprint != CAR.NISSAN_ALTIMA: if self.frame % 2 == 0: - can_sends.append(nissancan.create_lkas_hud_msg(self.packer, CS.lkas_hud_msg, CC.enabled, hud_control.leftLaneVisible, hud_control.rightLaneVisible, + can_sends.append(nissancan.create_lkas_hud_msg(self.packer, CS.lkas_hud_msg, CC.latActive, hud_control.leftLaneVisible, hud_control.rightLaneVisible, hud_control.leftLaneDepart, hud_control.rightLaneDepart)) if self.frame % 50 == 0: diff --git a/opendbc/car/structs.py b/opendbc/car/structs.py index a5628c7e000..1469f2919e3 100644 --- a/opendbc/car/structs.py +++ b/opendbc/car/structs.py @@ -18,3 +18,7 @@ RadarDataT = capnp.lib.capnp._StructModule CarControlT = capnp.lib.capnp._StructModule CarParamsT = capnp.lib.capnp._StructModule + +class OPFlags: + LateralALKA = 1 + pass \ No newline at end of file diff --git a/opendbc/car/subaru/fingerprints.py b/opendbc/car/subaru/fingerprints.py index 51c01e1030d..a412d1b4c3b 100644 --- a/opendbc/car/subaru/fingerprints.py +++ b/opendbc/car/subaru/fingerprints.py @@ -68,8 +68,8 @@ ], (Ecu.engine, 0x7e0, None): [ b'\xde"a0\x07', - b'\xe2"a0\x07', b'\xde,\xa0@\x07', + b'\xe2"a0\x07', b'\xe2"aq\x07', b'\xe2,\xa0@\x07', ], @@ -498,8 +498,8 @@ b'\xe2"`0\x07', b'\xe2"`p\x07', b'\xe2"`q\x07', - b'\xe3,\xa0@\x07', b'\xe2,\xa0p\x07', + b'\xe3,\xa0@\x07', ], (Ecu.transmission, 0x7e1, None): [ b'\xa5\xf6D@\x00', diff --git a/opendbc/car/tesla/fingerprints.py b/opendbc/car/tesla/fingerprints.py index 7477c4eeac1..e12ba1ecebf 100644 --- a/opendbc/car/tesla/fingerprints.py +++ b/opendbc/car/tesla/fingerprints.py @@ -29,8 +29,8 @@ b'TeMYG4_DCS_Update_0.0.0 (13),Y4P002.27.1', b'TeMYG4_DCS_Update_0.0.0 (9),Y4P002.25.0', b'TeMYG4_Legacy3Y_0.0.0 (2),Y4003.02.0', - b'TeMYG4_Legacy3Y_0.0.0 (5),Y4003.03.2', b'TeMYG4_Legacy3Y_0.0.0 (2),Y4P003.02.0', + b'TeMYG4_Legacy3Y_0.0.0 (5),Y4003.03.2', b'TeMYG4_Legacy3Y_0.0.0 (5),Y4P003.03.2', b'TeMYG4_SingleECU_0.0.0 (28),Y4S002.23.0', b'TeMYG4_SingleECU_0.0.0 (33),Y4S002.26', diff --git a/opendbc/car/tests/routes.py b/opendbc/car/tests/routes.py index 7ef4cdbc2ee..fb27a2dd898 100644 --- a/opendbc/car/tests/routes.py +++ b/opendbc/car/tests/routes.py @@ -59,6 +59,7 @@ class CarTestRoute(NamedTuple): CarTestRoute("e36b272d5679115f/00000369--a3e8499a85", FORD.FORD_F_150_MK14), CarTestRoute("83a4e056c7072678|2023-11-13--16-51-33", FORD.FORD_MUSTANG_MACH_E_MK1), CarTestRoute("37998aa0fade36ab/00000000--48f927c4f5", FORD.FORD_RANGER_MK2), + CarTestRoute("61a1b9e7a4eae0f6/00000000--79d85d1315", FORD.FORD_EXPEDITION_MK4), #TestRoute("f1b4c567731f4a1b|2018-04-30--10-15-35", FORD.FUSION), CarTestRoute("7cc2a8365b4dd8a9|2018-12-02--12-10-44", GM.GMC_ACADIA), diff --git a/opendbc/car/tests/test_docs.py b/opendbc/car/tests/test_docs.py index f09e8471203..8a4ae09b5ad 100644 --- a/opendbc/car/tests/test_docs.py +++ b/opendbc/car/tests/test_docs.py @@ -1,6 +1,5 @@ from collections import defaultdict import pytest -import re from opendbc.car.car_helpers import interfaces from opendbc.car.docs import get_all_car_docs @@ -61,7 +60,10 @@ def test_torque_star(self, subtests): def test_year_format(self, subtests): for car in self.all_cars: with subtests.test(car=car.name): - assert re.search(r"\d{4}-\d{4}", car.name) is None, f"Format years correctly: {car.name}" + if car.name == "comma body": + pytest.skip() + + assert car.years and car.year_list, f"Format years correctly: {car.name}" def test_harnesses(self, subtests): for car in self.all_cars: diff --git a/opendbc/car/torque_data/override.toml b/opendbc/car/torque_data/override.toml index af2ef323db5..e05e1dcde92 100644 --- a/opendbc/car/torque_data/override.toml +++ b/opendbc/car/torque_data/override.toml @@ -24,6 +24,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "FORD_ESCAPE_MK4" = [nan, 1.5, nan] "FORD_ESCAPE_MK4_5" = [nan, 1.5, nan] "FORD_EXPLORER_MK6" = [nan, 1.5, nan] +"FORD_EXPEDITION_MK4" = [nan, 1.5, nan] "FORD_F_150_MK14" = [nan, 1.5, nan] "FORD_FOCUS_MK4" = [nan, 1.5, nan] "FORD_MAVERICK_MK1" = [nan, 1.5, nan] diff --git a/opendbc/car/toyota/carcontroller.py b/opendbc/car/toyota/carcontroller.py index cb6ef47d29a..f7e81adab7d 100644 --- a/opendbc/car/toyota/carcontroller.py +++ b/opendbc/car/toyota/carcontroller.py @@ -266,7 +266,7 @@ def update(self, CC, CS, now_nanos): if self.frame % 20 == 0 or send_ui: can_sends.append(toyotacan.create_ui_command(self.packer, steer_alert, pcm_cancel_cmd, hud_control.leftLaneVisible, hud_control.rightLaneVisible, hud_control.leftLaneDepart, - hud_control.rightLaneDepart, CC.enabled, CS.lkas_hud)) + hud_control.rightLaneDepart, lat_active, CS.lkas_hud)) if (self.frame % 100 == 0 or send_ui) and (self.CP.enableDsu or self.CP.flags & ToyotaFlags.DISABLE_RADAR.value): can_sends.append(toyotacan.create_fcw_command(self.packer, fcw_alert)) diff --git a/opendbc/car/toyota/fingerprints.py b/opendbc/car/toyota/fingerprints.py index 758b984f0a8..716cb9a6eed 100644 --- a/opendbc/car/toyota/fingerprints.py +++ b/opendbc/car/toyota/fingerprints.py @@ -152,6 +152,7 @@ b'8821F0601300 ', b'8821F0601400 ', b'8821F0601500 ', + b'8821F0601600 ', b'8821F0602000 ', b'8821F0603300 ', b'8821F0603400 ', @@ -201,6 +202,7 @@ b'8821F0601300 ', b'8821F0601400 ', b'8821F0601500 ', + b'8821F0601600 ', b'8821F0602000 ', b'8821F0603300 ', b'8821F0603400 ', @@ -636,6 +638,7 @@ b'\x01896630E45200\x00\x00\x00\x00', b'\x01896630E46000\x00\x00\x00\x00', b'\x01896630E46200\x00\x00\x00\x00', + b'\x01896630E48200\x00\x00\x00\x00', b'\x01896630E74000\x00\x00\x00\x00', b'\x01896630E75000\x00\x00\x00\x00', b'\x01896630E76000\x00\x00\x00\x00', @@ -764,6 +767,7 @@ b'\x018966353Q2300\x00\x00\x00\x00', b'\x018966353Q4000\x00\x00\x00\x00', b'\x018966353R1100\x00\x00\x00\x00', + b'\x018966353R5000\x00\x00\x00\x00', b'\x018966353R7000\x00\x00\x00\x00', b'\x018966353R7100\x00\x00\x00\x00', b'\x018966353R8000\x00\x00\x00\x00', @@ -822,6 +826,7 @@ (Ecu.eps, 0x7a1, None): [ b'8965B53450\x00\x00\x00\x00\x00\x00', b'8965B53800\x00\x00\x00\x00\x00\x00', + b'8965B53801\x00\x00\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x750, 0xf): [ b'\x018821F6201200\x00\x00\x00\x00', @@ -959,6 +964,7 @@ b'\x02342Q2000\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', b'\x02342Q2100\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', b'\x02342Q2200\x00\x00\x00\x00\x00\x00\x00\x0054213000\x00\x00\x00\x00\x00\x00\x00\x00', + b'\x02342Q3000\x00\x00\x00\x00\x00\x00\x00\x0054214000\x00\x00\x00\x00\x00\x00\x00\x00', b'\x02342Q4000\x00\x00\x00\x00\x00\x00\x00\x0054215000\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.eps, 0x7a1, None): [ @@ -1076,6 +1082,7 @@ b'\x018966342W5000\x00\x00\x00\x00', b'\x018966342W7000\x00\x00\x00\x00', b'\x018966342W8000\x00\x00\x00\x00', + b'\x018966342W9000\x00\x00\x00\x00', b'\x018966342X5000\x00\x00\x00\x00', b'\x018966342X6000\x00\x00\x00\x00', b'\x01896634A05000\x00\x00\x00\x00', @@ -1225,6 +1232,7 @@ b'\x01896634A61000\x00\x00\x00\x00', b'\x01896634A88100\x00\x00\x00\x00', b'\x01896634A89100\x00\x00\x00\x00', + b'\x01896634AD7000\x00\x00\x00\x00', b'\x01896634AE1001\x00\x00\x00\x00', b'\x01896634AF0000\x00\x00\x00\x00', b'\x01896634AJ2000\x00\x00\x00\x00', @@ -1232,7 +1240,9 @@ b'\x01896634AL5000\x00\x00\x00\x00', b'\x01896634AL6000\x00\x00\x00\x00', b'\x01896634AL8000\x00\x00\x00\x00', + b'\x01896634AS8001\x00\x00\x00\x00', b'\x01896634AS9000\x00\x00\x00\x00', + b'\x01896634AT7000\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x750, 0xf): [ b'\x018821F0R03100\x00\x00\x00\x00', @@ -1326,6 +1336,8 @@ CAR.LEXUS_ES_TSS2: { (Ecu.engine, 0x700, None): [ b'\x018966306U6000\x00\x00\x00\x00', + b'\x018966306V5000\x00\x00\x00\x00', + b'\x018966306W6000\x00\x00\x00\x00', b'\x018966333T5000\x00\x00\x00\x00', b'\x018966333T5100\x00\x00\x00\x00', b'\x018966333X6000\x00\x00\x00\x00', @@ -1346,6 +1358,7 @@ b'\x01F152606340\x00\x00\x00\x00\x00\x00', b'\x01F152606461\x00\x00\x00\x00\x00\x00', b'\x01F15260646200\x00\x00\x00\x00', + b'\x01F152633A71\x00\x00\x00\x00\x00\x00', b'F152633423\x00\x00\x00\x00\x00\x00', b'F152633680\x00\x00\x00\x00\x00\x00', b'F152633681\x00\x00\x00\x00\x00\x00', @@ -1487,6 +1500,7 @@ b'\x018966378B4100\x00\x00\x00\x00', b'\x018966378G2000\x00\x00\x00\x00', b'\x018966378G3000\x00\x00\x00\x00', + b'\x018966378G4000\x00\x00\x00\x00', ], (Ecu.engine, 0x7e0, None): [ b'\x0237881000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', @@ -1539,20 +1553,24 @@ b'\x01896632478200\x00\x00\x00\x00', ], (Ecu.engine, 0x7e0, None): [ + b'\x0232480000\x00\x00\x00\x00\x00\x00\x00\x00A4701000\x00\x00\x00\x00\x00\x00\x00\x00', b'\x0232484000\x00\x00\x00\x00\x00\x00\x00\x0052422000\x00\x00\x00\x00\x00\x00\x00\x00', ], (Ecu.abs, 0x7b0, None): [ b'F152624150\x00\x00\x00\x00\x00\x00', + b'F152624171\x00\x00\x00\x00\x00\x00', b'F152624221\x00\x00\x00\x00\x00\x00', ], (Ecu.dsu, 0x791, None): [ b'881512404100\x00\x00\x00\x00', + b'881512405100\x00\x00\x00\x00', b'881512407000\x00\x00\x00\x00', b'881512409100\x00\x00\x00\x00', ], (Ecu.eps, 0x7a1, None): [ b'8965B24081\x00\x00\x00\x00\x00\x00', b'8965B24240\x00\x00\x00\x00\x00\x00', + b'8965B24260\x00\x00\x00\x00\x00\x00', b'8965B24320\x00\x00\x00\x00\x00\x00', ], (Ecu.fwdRadar, 0x750, 0xf): [ @@ -1734,6 +1752,7 @@ b'\x028966347C7000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', b'\x028966347C8000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00', b'\x038966347C0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710101\x00\x00\x00\x00', + b'\x038966347C0000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710102\x00\x00\x00\x00', b'\x038966347C1000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4710101\x00\x00\x00\x00', b'\x038966347C5000\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707101\x00\x00\x00\x00', b'\x038966347C5100\x00\x00\x00\x008966A4703000\x00\x00\x00\x00897CF4707101\x00\x00\x00\x00', @@ -1771,8 +1790,10 @@ ], (Ecu.fwdRadar, 0x750, 0xf): [ b'\x018821F6201200\x00\x00\x00\x00', + b'\x018821F6201300\x00\x00\x00\x00', ], (Ecu.fwdCamera, 0x750, 0x6d): [ + b'\x028646F6201400\x00\x00\x00\x008646G3304000\x00\x00\x00\x00', b'\x028646F6201400\x00\x00\x00\x008646G5301200\x00\x00\x00\x00', ], }, diff --git a/opendbc/car/toyota/values.py b/opendbc/car/toyota/values.py index 59dee497ad9..b093e214910 100644 --- a/opendbc/car/toyota/values.py +++ b/opendbc/car/toyota/values.py @@ -75,6 +75,7 @@ class ToyotaFlags(IntFlag): # these cars can utilize 2.0 m/s^2 RAISED_ACCEL_LIMIT = 1024 SECOC = 2048 + ALKA = 2 ** 12 class Footnote(Enum): CAMRY = CarFootnote( @@ -317,7 +318,7 @@ class CAR(Platforms): ) LEXUS_ES_TSS2 = ToyotaTSS2PlatformConfig( [ - ToyotaCarDocs("Lexus ES 2019-24"), + ToyotaCarDocs("Lexus ES 2019-25"), ToyotaCarDocs("Lexus ES Hybrid 2019-25", video="https://youtu.be/BZ29osRVJeg?t=12"), ], LEXUS_ES.specs, @@ -329,7 +330,7 @@ class CAR(Platforms): flags=ToyotaFlags.UNSUPPORTED_DSU, ) LEXUS_IS_TSS2 = ToyotaTSS2PlatformConfig( - [ToyotaCarDocs("Lexus IS 2022-23")], + [ToyotaCarDocs("Lexus IS 2022-24")], LEXUS_IS.specs, ) LEXUS_NX = PlatformConfig( diff --git a/opendbc/car/volkswagen/carstate.py b/opendbc/car/volkswagen/carstate.py index 42c17cba3e6..6384bc46915 100644 --- a/opendbc/car/volkswagen/carstate.py +++ b/opendbc/car/volkswagen/carstate.py @@ -167,14 +167,14 @@ def update_pq(self, pt_cp, cam_cp, ext_cp) -> structs.CarState: ret.steeringRateDeg = pt_cp.vl["Lenkwinkel_1"]["Lenkradwinkel_Geschwindigkeit"] * (1, -1)[int(pt_cp.vl["Lenkwinkel_1"]["Lenkradwinkel_Geschwindigkeit_S"])] ret.steeringTorque = pt_cp.vl["Lenkhilfe_3"]["LH3_LM"] * (1, -1)[int(pt_cp.vl["Lenkhilfe_3"]["LH3_LMSign"])] ret.steeringPressed = abs(ret.steeringTorque) > self.CCP.STEER_DRIVER_ALLOWANCE - ret.yawRate = pt_cp.vl["Bremse_5"]["Giergeschwindigkeit"] * (1, -1)[int(pt_cp.vl["Bremse_5"]["Vorzeichen_der_Giergeschwindigk"])] * CV.DEG_TO_RAD + ret.yawRate = pt_cp.vl["Bremse_5"]["BR5_Giergeschw"] * (1, -1)[int(pt_cp.vl["Bremse_5"]["BR5_Vorzeichen"])] * CV.DEG_TO_RAD hca_status = self.CCP.hca_status_values.get(pt_cp.vl["Lenkhilfe_2"]["LH2_Sta_HCA"]) ret.steerFaultTemporary, ret.steerFaultPermanent = self.update_hca_state(hca_status) # Update gas, brakes, and gearshift. ret.gas = pt_cp.vl["Motor_3"]["Fahrpedal_Rohsignal"] / 100.0 ret.gasPressed = ret.gas > 0 - ret.brake = pt_cp.vl["Bremse_5"]["Bremsdruck"] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects + ret.brake = pt_cp.vl["Bremse_5"]["BR5_Bremsdruck"] / 250.0 # FIXME: this is pressure in Bar, not sure what OP expects ret.brakePressed = bool(pt_cp.vl["Motor_2"]["Bremslichtschalter"]) ret.parkingBrake = bool(pt_cp.vl["Kombi_1"]["Bremsinfo"]) diff --git a/opendbc/car/volkswagen/fingerprints.py b/opendbc/car/volkswagen/fingerprints.py index 1162e3f9455..01c931bc1ea 100644 --- a/opendbc/car/volkswagen/fingerprints.py +++ b/opendbc/car/volkswagen/fingerprints.py @@ -71,6 +71,7 @@ b'\xf1\x8703H906026J \xf1\x896026', b'\xf1\x8703H906026J \xf1\x899970', b'\xf1\x8703H906026J \xf1\x899971', + b'\xf1\x8703H906026J \xf1\x899972', b'\xf1\x8703H906026S \xf1\x896693', b'\xf1\x8703H906026S \xf1\x899970', b'\xf1\x8703H906026S \xf1\x899972', @@ -131,12 +132,14 @@ (Ecu.engine, 0x7e0, None): [ b'\xf1\x8704L906056BP\xf1\x894729', b'\xf1\x8704L906056EK\xf1\x896391', + b'\xf1\x8704L906056SH\xf1\x899973', b'\xf1\x8705L906023BC\xf1\x892688', b'\xf1\x8705L906023MH\xf1\x892588', ], (Ecu.srs, 0x715, None): [ b'\xf1\x873Q0959655AL\xf1\x890505\xf1\x82\x0e1411001413001203151311031100', b'\xf1\x873Q0959655BG\xf1\x890703\xf1\x82\x0e16120016130012051G1313052900', + b'\xf1\x875QF959655AG\xf1\x890753\xf1\x82\x13151300151500111111000502----1111120749', b'\xf1\x875QF959655AS\xf1\x890755\xf1\x82\x1315140015150011111100050200--1311120749', ], (Ecu.eps, 0x712, None): [ @@ -149,6 +152,7 @@ b'\xf1\x872Q0907572AA\xf1\x890396', b'\xf1\x872Q0907572J \xf1\x890156', b'\xf1\x872Q0907572M \xf1\x890233', + b'\xf1\x872Q0907572R \xf1\x890372', ], }, CAR.VOLKSWAGEN_GOLF_MK7: { @@ -157,6 +161,7 @@ b'\xf1\x8704E906016AD\xf1\x895758', b'\xf1\x8704E906016CE\xf1\x899096', b'\xf1\x8704E906016CH\xf1\x899226', + b'\xf1\x8704E906016DF\xf1\x896188', b'\xf1\x8704E906016N \xf1\x899105', b'\xf1\x8704E906023AG\xf1\x891726', b'\xf1\x8704E906023BN\xf1\x894518', @@ -173,6 +178,7 @@ b'\xf1\x8704L906026BN\xf1\x891197', b'\xf1\x8704L906026BP\xf1\x897608', b'\xf1\x8704L906026NF\xf1\x899528', + b'\xf1\x8704L906027AA\xf1\x899525', b'\xf1\x8704L906056CL\xf1\x893823', b'\xf1\x8704L906056CR\xf1\x895813', b'\xf1\x8704L906056HE\xf1\x893758', @@ -186,6 +192,7 @@ b'\xf1\x870EA906016Q \xf1\x895993', b'\xf1\x870EA906016S \xf1\x897207', b'\xf1\x875G0906259 \xf1\x890007', + b'\xf1\x875G0906259C \xf1\x890002', b'\xf1\x875G0906259D \xf1\x890002', b'\xf1\x875G0906259J \xf1\x890002', b'\xf1\x875G0906259L \xf1\x890002', @@ -218,6 +225,7 @@ b'\xf1\x870CW300044S \xf1\x894530', b'\xf1\x870CW300044T \xf1\x895245', b'\xf1\x870CW300045 \xf1\x894531', + b'\xf1\x870CW300046A \xf1\x895113', b'\xf1\x870CW300047D \xf1\x895261', b'\xf1\x870CW300047E \xf1\x895261', b'\xf1\x870CW300048J \xf1\x890611', @@ -240,6 +248,7 @@ b'\xf1\x870D9300041H \xf1\x895220', b'\xf1\x870D9300041N \xf1\x894512', b'\xf1\x870D9300041P \xf1\x894507', + b'\xf1\x870D9300043F \xf1\x895204', b'\xf1\x870DD300045K \xf1\x891120', b'\xf1\x870DD300046F \xf1\x891601', b'\xf1\x870GC300012A \xf1\x891401', @@ -249,6 +258,7 @@ b'\xf1\x870GC300014B \xf1\x892401', b'\xf1\x870GC300014B \xf1\x892403', b'\xf1\x870GC300014B \xf1\x892405', + b'\xf1\x870GC300014E \xf1\x892407', b'\xf1\x870GC300020G \xf1\x892401', b'\xf1\x870GC300020G \xf1\x892403', b'\xf1\x870GC300020G \xf1\x892404', @@ -264,6 +274,7 @@ b'\xf1\x875Q0959655AR\xf1\x890317\xf1\x82\x13141500111233003142114A2131219333313100', b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\x1314160011123300314211012230229333423100', b'\xf1\x875Q0959655BH\xf1\x890336\xf1\x82\x1314160011123300314211012230229333463100', + b'\xf1\x875Q0959655BJ\xf1\x890336\xf1\x82\x13141300111233003142115A1932199333463100', b'\xf1\x875Q0959655BJ\xf1\x890339\xf1\x82\x13141600111233003142115A2232229333463100', b'\xf1\x875Q0959655BS\xf1\x890403\xf1\x82\x1314160011123300314240012250229333463100', b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142404A2251229333463100', @@ -272,6 +283,7 @@ b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x13141600111233003142405A2252229333463100', b'\xf1\x875Q0959655C \xf1\x890361\xf1\x82\x111413001112120004110415121610169112', b'\xf1\x875Q0959655CA\xf1\x890403\xf1\x82\x1314160011123300314240012250229333463100', + b'\xf1\x875Q0959655CA\xf1\x890403\xf1\x82\x13141600111233003142405A2251229333463100', b'\xf1\x875Q0959655D \xf1\x890388\xf1\x82\x111413001113120006110417121A101A9113', b'\xf1\x875Q0959655J \xf1\x890825\xf1\x82\x13271112111312--071104171825102591131211', b'\xf1\x875Q0959655J \xf1\x890830\xf1\x82\x13271112111312--071104171825102591131211', @@ -295,6 +307,7 @@ b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A01613A1', b'\xf1\x873Q0909144J \xf1\x895063\xf1\x82\x0566A0J712A1', b'\xf1\x873Q0909144K \xf1\x895072\xf1\x82\x0571A0J714A1', + b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571A01A16A1', b'\xf1\x873Q0909144L \xf1\x895081\xf1\x82\x0571A0JA15A1', b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A01A18A1', b'\xf1\x873Q0909144M \xf1\x895082\xf1\x82\x0571A02A16A1', @@ -321,6 +334,7 @@ b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A07B04A1', b'\xf1\x875Q0909144T \xf1\x891072\xf1\x82\x0521A20B03A1', b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A2000400', + b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A2000600', b'\xf1\x875QD909144B \xf1\x891072\xf1\x82\x0521A00507A1', b'\xf1\x875QM909144A \xf1\x891072\xf1\x82\x0521A20B03A1', b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A00442A1', @@ -375,6 +389,7 @@ b'\xf1\x8705E906013BN\xf1\x893711', b'\xf1\x8705E906013DB\xf1\x893361', b'\xf1\x875G0906259T \xf1\x890003', + b'\xf1\x875G09C0BB02 \xf1\x890003', ], (Ecu.transmission, 0x7e1, None): [ b'\xf1\x8709G927158BQ\xf1\x893545', @@ -386,6 +401,7 @@ b'\xf1\x8709S927158R \xf1\x893552', b'\xf1\x8709S927158R \xf1\x893587', b'\xf1\x870GC300020N \xf1\x892803', + b'\xf1\x870GC300020N \xf1\x892804', ], (Ecu.srs, 0x715, None): [ b'\xf1\x875Q0959655AG\xf1\x890336\xf1\x82\x1313171231313500314611011530159333463100', @@ -609,6 +625,7 @@ b'\xf1\x8704E906027NB\xf1\x899504', b'\xf1\x8704L906026EJ\xf1\x893661', b'\xf1\x8704L906026EJ\xf1\x893916', + b'\xf1\x8704L906026KR\xf1\x893919', b'\xf1\x8704L906027G \xf1\x899893', b'\xf1\x8705E906018BS\xf1\x890914', b'\xf1\x875N0906259 \xf1\x890002', @@ -624,6 +641,7 @@ b'\xf1\x8783A907115K \xf1\x890001', b'\xf1\x8783A907115K \xf1\x890002', b'\xf1\x8783A907115Q \xf1\x890001', + b'\xf1\x8783A907115Q \xf1\x890002', ], (Ecu.transmission, 0x7e1, None): [ b'\xf1\x8709G927158DS\xf1\x893699', @@ -641,6 +659,7 @@ b'\xf1\x870DL300011N \xf1\x892012', b'\xf1\x870DL300011N \xf1\x892014', b'\xf1\x870DL300012M \xf1\x892107', + b'\xf1\x870DL300012N \xf1\x892110', b'\xf1\x870DL300012P \xf1\x892103', b'\xf1\x870DL300013A \xf1\x893005', b'\xf1\x870DL300013G \xf1\x892119', @@ -656,12 +675,14 @@ b'\xf1\x875Q0959655BJ\xf1\x890336\xf1\x82\x1311140031333300314232583632369333423100', b'\xf1\x875Q0959655BJ\xf1\x890336\xf1\x82\x1312110031333300314232583732379333423100', b'\xf1\x875Q0959655BJ\xf1\x890339\xf1\x82\x1331310031333334313132013730379333423100', + b'\xf1\x875Q0959655BK\xf1\x890339\xf1\x82\x1331310031333334313132573732379333423100', b'\xf1\x875Q0959655BM\xf1\x890403\xf1\x82\x1316143231313500314641011750179333423100', b'\xf1\x875Q0959655BS\xf1\x890403\xf1\x82\x1312110031333300314240013750379333423100', b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1312110031333300314240583752379333423100', b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333334313140013750379333423100', b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333334313140573752379333423100', b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333336313140013950399333423100', + b'\xf1\x875Q0959655BT\xf1\x890403\xf1\x82\x1331310031333336313140573952399333423100', b'\xf1\x875Q0959655CB\xf1\x890421\xf1\x82\x1316143231313500314647021750179333613100', b'\xf1\x875Q0959655CD\xf1\x890421\xf1\x82\x13123112313333003145406F6154619333613100', b'\xf1\x875Q0959655CG\xf1\x890421\xf1\x82\x1331310031333300314240024050409333613100', @@ -670,6 +691,7 @@ b'\xf1\x875Q0909143M \xf1\x892041\xf1\x820529A6060603', b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527A6050705', b'\xf1\x875Q0909143P \xf1\x892051\xf1\x820527A6070705', + b'\xf1\x875Q0909144AA\xf1\x891081\xf1\x82\x0521A60803A1', b'\xf1\x875Q0909144AB\xf1\x891082\xf1\x82\x0521A60604A1', b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6000600', b'\xf1\x875Q0910143C \xf1\x892211\xf1\x82\x0567A6017A00', @@ -683,8 +705,10 @@ b'\xf1\x875QM909144B \xf1\x891081\xf1\x82\x0521A60804A1', b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A60604A1', b'\xf1\x875QM909144C \xf1\x891082\xf1\x82\x0521A60804A1', + b'\xf1\x875QV907144F \xf1\x891122\xf1\x82\x0001A6CA01]V', ], (Ecu.fwdRadar, 0x757, None): [ + b'\xf1\x872Q0907567B \xf1\x890534', b'\xf1\x872Q0907572AA\xf1\x890396', b'\xf1\x872Q0907572AB\xf1\x890397', b'\xf1\x872Q0907572J \xf1\x890156', @@ -807,6 +831,7 @@ b'\xf1\x878V0906264B \xf1\x890003', b'\xf1\x878V0907115B \xf1\x890007', b'\xf1\x878V0907404A \xf1\x890005', + b'\xf1\x878V0907404G \xf1\x890004', b'\xf1\x878V0907404G \xf1\x890005', ], (Ecu.transmission, 0x7e1, None): [ @@ -896,12 +921,14 @@ b'\xf1\x8783A906259C \xf1\x890002', b'\xf1\x8783A906259D \xf1\x890001', b'\xf1\x8783A906259F \xf1\x890001', + b'\xf1\x8783A907115P \xf1\x890002', ], (Ecu.transmission, 0x7e1, None): [ b'\xf1\x8709G927158CN\xf1\x893608', b'\xf1\x8709G927158FL\xf1\x893758', b'\xf1\x8709G927158GG\xf1\x893825', b'\xf1\x8709G927158GP\xf1\x893937', + b'\xf1\x8709G927158HC\xf1\x894070', b'\xf1\x870GC300045D \xf1\x892802', b'\xf1\x870GC300046F \xf1\x892701', ], diff --git a/opendbc/car/volkswagen/values.py b/opendbc/car/volkswagen/values.py index 7b4e5a74c58..fe319a13d71 100644 --- a/opendbc/car/volkswagen/values.py +++ b/opendbc/car/volkswagen/values.py @@ -324,7 +324,7 @@ class CAR(Platforms): wmis={WMI.VOLKSWAGEN_EUROPE_CAR}, ) VOLKSWAGEN_TAOS_MK1 = VolkswagenMQBPlatformConfig( - [VWCarDocs("Volkswagen Taos 2022-23")], + [VWCarDocs("Volkswagen Taos 2022-24")], VolkswagenCarSpecs(mass=1498, wheelbase=2.69), chassis_codes={"B2"}, wmis={WMI.VOLKSWAGEN_MEXICO_SUV, WMI.VOLKSWAGEN_ARGENTINA}, @@ -337,7 +337,7 @@ class CAR(Platforms): ) VOLKSWAGEN_TIGUAN_MK2 = VolkswagenMQBPlatformConfig( [ - VWCarDocs("Volkswagen Tiguan 2018-23"), + VWCarDocs("Volkswagen Tiguan 2018-24"), VWCarDocs("Volkswagen Tiguan eHybrid 2021-23"), ], VolkswagenCarSpecs(mass=1715, wheelbase=2.74), @@ -383,7 +383,7 @@ class CAR(Platforms): wmis={WMI.AUDI_GERMANY_CAR}, ) AUDI_Q3_MK2 = VolkswagenMQBPlatformConfig( - [VWCarDocs("Audi Q3 2019-23")], + [VWCarDocs("Audi Q3 2019-24")], VolkswagenCarSpecs(mass=1623, wheelbase=2.68), chassis_codes={"8U", "F3", "FS"}, wmis={WMI.AUDI_EUROPE_MPV, WMI.AUDI_GERMANY_CAR}, diff --git a/opendbc/dbc/generator/honda/_bosch_adas_2018.dbc b/opendbc/dbc/generator/honda/_bosch_adas_2018.dbc index ec7c41ceece..fed5de076f3 100644 --- a/opendbc/dbc/generator/honda/_bosch_adas_2018.dbc +++ b/opendbc/dbc/generator/honda/_bosch_adas_2018.dbc @@ -50,7 +50,7 @@ CM_ SG_ 479 CONTROL_ON "Set to 5 when car is being controlled"; CM_ SG_ 479 AEB_STATUS "set for the duration of AEB event"; CM_ SG_ 479 AEB_BRAKING "set when braking is commanded during AEB event"; CM_ SG_ 479 AEB_PREPARE "set 1s before AEB"; -CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc..."; +CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnings etc..."; CM_ SG_ 829 CAM_TEMP_HIGH "Some Driver Assist Systems Cannot Operate: Camera Temperature Too High"; CM_ SG_ 829 CAMERA_OVERHEAT "Lane Keeping Assist Cannot Operate: Camera Too Hot"; diff --git a/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index cc5452d349a..f1525b1b7cc 100644 --- a/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -96,6 +96,31 @@ BO_ 272 LKAS_ALT: 32 XXX SG_ LKAS_ANGLE_MAX_TORQUE : 96|8@1+ (1,0) [0|255] "" XXX SG_ NEW_SIGNAL_3 : 111|8@0+ (1,0) [0|255] "" XXX +BO_ 282 FR_CMR_01_10ms: 16 FR_CMR + SG_ FR_CMR_Crc1Val : 0|16@1+ (1,0) [0|0] "" Dummy,IBU_HS,vBDM + SG_ FR_CMR_AlvCnt1Val : 16|8@1+ (1,0) [0|0] "" CLU,IBU_HS,vBDM + SG_ HBA_SysOptSta : 24|2@1+ (1,0) [0|3] "" CLU,IBU_HS,vBDM + SG_ HBA_SysSta : 26|3@1+ (1,0) [0|7] "" CLU,IBU_HS,vBDM + SG_ HBA_IndLmpReq : 29|2@1+ (1,0) [0|3] "" CLU,vBDM + SG_ iHBAref_VehLftSta : 31|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM + SG_ iHBAref_VehCtrSta : 33|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM + SG_ iHBAref_VehRtSta : 35|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM + SG_ iHBAref_ILLAmbtSta : 37|2@1+ (1,0) [0|3] "" IBU_HS,ICU,vBDM + SG_ FCA_Equip_MFC : 39|3@1+ (1,0) [0|0] "" ADAS_DRV,RR_C_RDR,vBDM + SG_ HBA_OptUsmSta : 42|2@1+ (1,0) [0|3] "" CLU,H_U_MM + SG_ FCAref_FusSta : 45|3@1+ (1,0) [0|0] "" vBDM + SG_ DAW_LVDA_PUDis : 48|2@1+ (1,0) [0|0] "" CLU,vBDM + SG_ DAW_LVDA_OptUsmSta : 50|2@1+ (1,0) [0|3] "" CLU,H_U_MM,vBDM + SG_ DAW_OptUsmSta : 52|3@1+ (1,0) [0|0] "" CLU,H_U_MM + SG_ DAW_SysSta : 55|4@1+ (1,0) [0|0] "" CLU + SG_ DAW_WrnMsgSta : 59|3@1+ (1,0) [0|0] "" CLU + SG_ DAW_TimeRstReq : 62|2@1+ (1,0) [0|0] "" CLU + SG_ DAW_SnstvtyModRetVal : 64|3@1+ (1,0) [0|0] "" CLU,H_U_MMz + SG_ FR_CMR_SCCEquipSta : 85|2@1+ (1,0) [0|3] "" CGW + SG_ FR_CMR_ReqADASMapMsgVal : 96|16@1+ (1,0) [0|65535] "" CGW + SG_ FR_CMR_SwVer1Val : 112|4@1+ (1,0) [0|15] "" CGW + SG_ FR_CMR_SwVer2Val : 120|8@1+ (1,0) [0|255] "" CGW + BO_ 293 STEERING_SENSORS: 16 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX @@ -343,28 +368,23 @@ BO_ 426 CRUISE_BUTTONS_ALT: 16 XXX SG_ BYTE14 : 112|8@1+ (1,0) [0|255] "" XXX SG_ BYTE15 : 120|8@1+ (1,0) [0|255] "" XXX -BO_ 437 CCNC_0x1B5: 32 CCNC - SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX - SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ LEFT : 24|2@1+ (1,0) [0|3] "" XXX - SG_ LEFT_LDW : 27|1@0+ (1,0) [0|1] "" XXX - SG_ LEFT_1 : 29|9@1+ (1,0) [0|511] "" XXX - SG_ LEFT_2 : 38|5@1+ (1,0) [0|31] "" XXX - SG_ LEFT_3 : 43|10@1- (1,0) [0|1023] "" XXX - SG_ LEFT_4 : 64|16@1- (1,0) [0|65535] "" XXX - SG_ LEFT_5 : 80|16@1- (1,0) [0|65535] "" XXX - SG_ RIGHT : 96|2@1+ (1,0) [0|3] "" XXX - SG_ RIGHT_LDW : 99|1@0+ (1,0) [0|1] "" XXX - SG_ RIGHT_1 : 101|9@1+ (1,0) [0|511] "" XXX - SG_ RIGHT_2 : 110|5@1+ (1,0) [0|31] "" XXX - SG_ RIGHT_3 : 115|10@1- (1,0) [0|1023] "" XXX - SG_ RIGHT_4 : 128|16@1- (1,0) [0|65535] "" XXX - SG_ RIGHT_5 : 144|16@1- (1,0) [0|65535] "" XXX - SG_ LEAD : 192|2@1+ (1,0) [0|3] "" XXX - SG_ LEAD_1 : 194|6@1+ (1,0) [0|63] "" XXX - SG_ LEAD_2 : 200|11@1- (1,0) [0|4095] "" XXX - SG_ LEAD_3 : 211|1@0+ (1,0) [0|1] "" XXX - SG_ LEAD_DISTANCE : 213|11@1+ (0.1,0) [0|204.7] "m" XXX +BO_ 437 FR_CMR_03_50ms: 32 FR_CMR + SG_ FR_CMR_Crc3Val : 0|16@1+ (1,0) [0|65535] "" RR_C_RDR,CGW + SG_ FR_CMR_AlvCnt3Val : 16|8@1+ (1,0) [0|255] "" RR_C_RDR,CGW + SG_ Info_LftLnQualSta : 24|3@1+ (1,0) [0|7] "" RR_C_RDR,CGW + SG_ Info_LftLnDptSta : 27|2@1+ (1,0) [0|3] "" RR_C_RDR,CGW + SG_ Info_LftLnPosVal : 29|14@1- (0.0039625,0) [-32.4608|32.4568375] "m" RR_C_RDR,CGW + SG_ Info_LftLnHdingAnglVal : 43|10@1- (0.000976563,0) [-0.500000256|0.499023693] "rad" RR_C_RDR,CGW + SG_ Info_LftLnCvtrVal : 64|16@1- (1e-06,0) [-0.032768|0.032767] "1/m" CGW + SG_ Info_LftLnCrvtrDrvtvVal : 80|16@1- (4e-09,0) [-0.000131072|0.000131068] "1/m2" CGW + SG_ Info_RtLnQualSta : 96|3@1+ (1,0) [0|7] "" RR_C_RDR,CGW + SG_ Info_RtLnDptSta : 99|2@1+ (1,0) [0|3] "" RR_C_RDR,CGW + SG_ Info_RtLnPosVal : 101|14@1- (0.0039625,0) [-32.4608|32.4568375] "m" RR_C_RDR,CGW + SG_ Info_RtLnHdingAnglVal : 115|10@1- (0.000976563,0) [-0.500000256|0.499023693] "rad" RR_C_RDR,CGW + SG_ Info_RtLnCvtrVal : 128|16@1- (1,0) [0|65535] "" CGW + SG_ Info_RtLnCrvtrDrvtvVal : 144|16@1- (1,0) [0|65535] "" CGW + SG_ ID_CIPV : 192|7@1+ (1,0) [0|127] "" Dummy + SG_ Longitudinal_Distance : 212|12@1+ (0.05,0) [0|204.75] "m" Dummy BO_ 442 BLINDSPOTS_REAR_CORNERS: 24 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -449,18 +469,36 @@ BO_ 490 ADRV_0x1ea: 32 ADRV SG_ SET_ME_TMP_F : 232|5@1+ (1,0) [0|31] "" XXX SG_ SET_ME_TMP_F_2 : 240|5@1+ (1,0) [0|31] "" XXX -BO_ 506 CLUSTER_SPEED_LIMIT: 32 XXX - SG_ SPEED_LIMIT_1 : 39|7@0+ (1,0) [0|255] "" XXX - SG_ SPEED_LIMIT_2 : 47|7@0+ (1,0) [0|255] "" XXX - SG_ SECONDARY_LIMIT_1 : 79|8@0+ (1,0) [0|127] "" XXX - SG_ SECONDARY_LIMIT_2 : 103|8@0+ (1,0) [0|127] "" XXX - SG_ SPEED_LIMIT_3 : 119|8@0+ (1,0) [0|255] "" XXX - SG_ ARROW_DOWN : 120|1@0+ (1,0) [0|1] "" XXX - SG_ ARROW_UP : 121|1@0+ (1,0) [0|1] "" XXX - SG_ CHIME_2 : 122|2@1+ (1,0) [0|7] "" XXX - SG_ SPEED_CHANGE_BLINKING : 129|1@1+ (1,0) [0|3] "" XXX - SG_ CHIME_1 : 133|1@0+ (1,0) [0|1] "" XXX - SG_ SCHOOL_ZONE : 155|1@0+ (1,0) [0|1] "" XXX +BO_ 506 FR_CMR_02_100ms: 32 FR_CMR + SG_ FR_CMR_Crc2Val : 0|16@1+ (1,0) [0|65535] "" CGW + SG_ FR_CMR_AlvCnt2Val : 16|8@1+ (1,0) [0|255] "" CGW + SG_ ISLW_OptUsmSta : 24|2@1+ (1,0) [0|3] "" CLU,CGW + SG_ ISLW_SysSta : 26|2@1+ (1,0) [0|3] "" CLU,CGW + SG_ ISLW_NoPassingInfoDis : 28|3@1+ (1,0) [0|7] "" CLU,CGW + SG_ ISLW_OvrlpSignDis : 31|2@1+ (1,0) [0|3] "" CLU,CGW + SG_ ISLW_SpdCluMainDis : 33|8@1+ (1,0) [0|255] "" CLU,CGW + SG_ ISLW_SpdNaviMainDis : 41|8@1+ (1,0) [0|255] "" CGW + SG_ ISLW_SubCondinfoSta1 : 49|4@1+ (1,0) [0|15] "" CLU,CGW + SG_ ISLW_SubCondinfoSta2 : 53|4@1+ (1,0) [0|15] "" CLU,CGW + SG_ ISLW_SpdCluSubMainDis : 64|8@1+ (1,0) [0|255] "" CLU + SG_ ISLW_SpdCluDisSubCond1 : 72|8@1+ (1,0) [0|255] "" CLU,CGW + SG_ ISLW_SpdCluDisSubCond2 : 80|8@1+ (1,0) [0|255] "" CLU,CGW + SG_ ISLW_SpdNaviSubMainDis : 88|8@1+ (1,0) [0|255] "" CLU + SG_ ISLW_SpdNaviDisSubCond1 : 96|8@1+ (1,0) [0|255] "" CLU,CGW + SG_ ISLW_SpdNaviDisSubCond2 : 104|8@1+ (1,0) [0|255] "" CLU,CGW + SG_ ISLA_SpdwOffst : 112|8@1+ (1,0) [0|255] "" CLU,CGW + SG_ ISLA_SwIgnoreReq : 120|2@1+ (1,0) [0|3] "" CGW + SG_ ISLA_SpdChgReq : 122|2@1+ (1,0) [0|3] "" CGW + SG_ ISLA_SpdWrn : 124|2@1+ (1,0) [0|3] "" CLU,CGW + SG_ ISLA_IcyWrn : 126|2@1+ (1,0) [0|3] "" CLU,CGW + SG_ ISLA_SymFlashMod : 128|3@1+ (1,0) [0|7] "" CLU,CGW + SG_ ISLA_Popup : 131|3@1+ (1,0) [0|7] "" CLU + SG_ ISLA_OptUsmSta : 136|3@1+ (1,0) [0|7] "" CLU,CGW + SG_ ISLA_OffstUsmSta : 139|3@1+ (1,0) [0|7] "" CLU,CGW + SG_ ISLA_AutoUsmSta : 142|2@1+ (1,0) [0|3] "" CLU,CGW + SG_ ISLA_Cntry : 144|4@1+ (1,0) [0|15] "" CLU,CGW + SG_ ISLA_AddtnlSign : 149|5@1+ (1,0) [0|31] "" CLU,CGW + SG_ ISLA_SchoolZone : 154|2@1+ (1,0) [0|3] "" CLU,CGW BO_ 507 CAM_0x1fb: 32 CAMERA SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -476,6 +514,43 @@ BO_ 593 RADAR_0x251: 16 FRONT_RADAR SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX +BO_ 698 FR_CMR_04_40ms: 32 FR_CMR + SG_ FR_CMR_Crc4Val : 0|16@1+ (1,0) [0|65535] "" Dummy + SG_ FR_CMR_AlvCnt4Val : 16|8@1+ (1,0) [0|255] "" Dummy + SG_ IFSref_FR_CMR_Sta : 24|2@1+ (1,0) [0|3] "" CGW + SG_ IFSref_VehNumVal : 26|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_ILLAmbtSta : 30|2@1+ (0.1,0) [0|0.3] "" CGW + SG_ IFSref_VehLftAngl1Val : 32|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl1Val : 41|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl2Val : 50|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehDst1Val : 59|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehRtAngl2Val : 64|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl3Val : 73|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl3Val : 82|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl4Val : 91|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl4Val : 100|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl5Val : 109|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl5Val : 118|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl6Val : 128|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl6Val : 137|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl7Val : 146|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl7Val : 155|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl8Val : 164|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl8Val : 173|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl9Val : 182|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl9Val : 192|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehLftAngl10Val : 201|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehRtAngl10Val : 210|9@1+ (0.1,-25) [-25|26.1] "Deg" CGW + SG_ IFSref_VehDst2Val : 219|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst3Val : 223|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst4Val : 227|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst5Val : 231|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst6Val : 235|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst7Val : 239|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst8Val : 243|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst9Val : 247|4@1+ (1,0) [0|15] "" CGW + SG_ IFSref_VehDst10Val : 251|4@1+ (1,0) [0|15] "" CGW + BO_ 736 MANUAL_SPEED_LIMIT_ASSIST: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX @@ -620,6 +695,19 @@ VAL_ 234 LKA_FAULT 0 "ok" 1 "lka fault"; VAL_ 272 LKA_MODE 1 "warning only" 2 "assist" 6 "off"; VAL_ 272 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green"; VAL_ 272 LKAS_ANGLE_ACTIVE 0 "off" 1 "not active" 2 "active"; +VAL_ 282 HBA_SysOptSta 0 "None HBA Option (Default)" 1 "HBA Option" 2 "Reserved" 3 "Error indicator"; +VAL_ 282 HBA_SysSta 0 "HBA Disable" 1 "HBA Enable & High Beam Off" 2 "HBA Enable & High Beam On" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "System Fail"; +VAL_ 282 HBA_IndLmpReq 0 "HBA Indicator Lamp Off" 1 "HBA Indicator Lamp On" 2 "Reserved" 3 "Error indicator"; +VAL_ 282 FCA_Equip_MFC 0 "No Coding" 1 "Sensor Fusion FCA" 2 "Camera only FCA" 3 "No FCA Option" 4 "ADAS_DRV Option" 5 "Reserved" 6 "Not used" 7 "Error indicator"; +VAL_ 282 HBA_OptUsmSta 0 "None HBA Option (Default)" 1 "HBA Function Off" 2 "HBA Function On" 3 "Invalid (Fail)"; +VAL_ 282 DAW_LVDA_PUDis 0 "Default" 1 "Display “Leading vehicle departure alert”" 2 "Reserved" 3 "Error indicator"; +VAL_ 282 DAW_LVDA_OptUsmSta 0 "No Option (default)" 1 "Off" 2 "On" 3 "Error Indicator"; +VAL_ 282 DAW_OptUsmSta 0 "None DAW Option (Default)" 1 "System Off" 2 "System On" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid (Gray)"; +VAL_ 282 DAW_SysSta 0 "System Off" 1 "Attention Level 1" 2 "Attention Level 2" 3 "Attention Level 3" 4 "Attention Level 4" 5 "Attention Level 5" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "System Standby" 15 "System Fail"; +VAL_ 282 DAW_WrnMsgSta 0 "No Warning" 1 "Rest Recommend Warning" 2 "Hands-Off TMS call request" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Error indicator"; +VAL_ 282 DAW_TimeRstReq 0 "No signal" 1 "Time reset" 2 "Reserved" 3 "Error indicator"; +VAL_ 282 DAW_SnstvtyModRetVal 0 "Default" 1 "Late" 2 "Normal" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid"; +VAL_ 282 FR_CMR_SCCEquipSta 0 "Not Applied" 1 "Applied" 2 "Not used" 3 "Error Indicator"; VAL_ 298 LKA_MODE 1 "warning only" 2 "assist" 6 "off"; VAL_ 298 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green"; VAL_ 304 PARK_BUTTON 1 "Pressed" 2 "Not Pressed"; @@ -693,9 +781,74 @@ VAL_ 362 BLINKER_CONTROL 1 "hazards" 2 "hazards button backlight" 3 "left blinke VAL_ 373 ACCEnable 0 "SCC ready" 1 "SCC temp fault" 2 "SCC permanent fault" 3 "SCC permanent fault, communication issue"; VAL_ 416 ACCMode 0 "off" 1 "enabled" 2 "driver_override" 3 "off_maybe_fault" 4 "cancelled"; VAL_ 426 CRUISE_BUTTONS 0 "none" 1 "res_accel" 2 "set_decel" 3 "gap_distance" 4 "pause_resume"; +VAL_ 437 Info_LftLnQualSta 0 "Very Low Quality" 1 "Low Quality" 2 "High Quality" 3 "Very High Quality" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Error indicator"; +VAL_ 437 Info_LftLnDptSta 0 "No Left Line Departure" 1 "Left Line Departure" 2 "Reserved" 3 "Error Indicator"; +VAL_ 437 Info_RtLnQualSta 0 "Very Low Quality" 1 "Low Quality" 2 "High Quality" 3 "Very High Quality" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Error indicator"; +VAL_ 437 Info_RtLnDptSta 0 "No Right Line Departure" 1 "Right Line Departure" 2 "Reserved" 3 "Error Indicator"; +VAL_ 437 Info_RtLnCvtrVal 65534 "Reserved" 65535 "Error indicator"; VAL_ 463 CRUISE_BUTTONS 0 "none" 1 "res_accel" 2 "set_decel" 3 "gap_distance" 4 "pause_resume"; VAL_ 463 RIGHT_PADDLE 0 "Not Pulled" 1 "Pulled"; VAL_ 463 LEFT_PADDLE 0 "Not Pulled" 1 "Pulled"; +VAL_ 506 ISLW_OptUsmSta 0 "None ISLW Option (Default)" 1 "System Disabled by USM" 2 "System Enable by USM" 3 "Invalid"; +VAL_ 506 ISLW_SysSta 0 "Normal (Default)" 1 "System Fail" 2 "ISLW Temporary Unavailable" 3 "Reserved"; +VAL_ 506 ISLW_NoPassingInfoDis 0 "None Display (Default)" 1 "LHD No Passing Zone Display" 2 "RHD No Passing Zone Display" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid"; +VAL_ 506 ISLW_OvrlpSignDis 0 "None (Default)" 1 "Overlap Sign" 2 "Reserved" 3 "Error indicator"; +VAL_ 506 ISLW_SpdCluMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; +VAL_ 506 ISLW_SpdNaviMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; +VAL_ 506 ISLW_SubCondinfoSta1 0 "None (Default)" 1 "Rain" 2 "Snow" 3 "Snow&Rain" 4 "Trailer" 5 "Reserved" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "Generic" 15 "Invalid"; +VAL_ 506 ISLW_SubCondinfoSta2 0 "None (Default)" 1 "Rain" 2 "Snow" 3 "Snow&Rain" 4 "Trailer" 5 "Reserved" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "Generic" 15 "Invalid"; +VAL_ 506 ISLW_SpdCluSubMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; +VAL_ 506 ISLW_SpdCluDisSubCond1 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; +VAL_ 506 ISLW_SpdCluDisSubCond2 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; +VAL_ 506 ISLW_SpdNaviSubMainDis 0 "No Recognition (Default)" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; +VAL_ 506 ISLW_SpdNaviDisSubCond1 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; +VAL_ 506 ISLW_SpdNaviDisSubCond2 0 "No Recognition (Default)" 253 "LHD Conditional No Passing ZONE" 254 "RHD Conditional No Passing ZONE" 255 "Invalid"; +VAL_ 506 ISLA_SpdwOffst 0 "No Recognition" 253 "Unlimited Speed" 254 "Reserved" 255 "Invalid"; +VAL_ 506 ISLA_SwIgnoreReq 0 "Allow All Switch Inputs (default)" 1 "-(SET) Switch Input Ignore" 2 "+(SET) Switch Input Ignore" 3 "-(SET) & +(SET) Switch Inputs Ignore"; +VAL_ 506 ISLA_SpdChgReq 0 "Default" 1 "Speed Change Request" 2 "Reserved" 3 "Reserved"; +VAL_ 506 ISLA_SpdWrn 0 "No Warning" 1 "Warning" 2 "Reserved" 3 "Reserved"; +VAL_ 506 ISLA_IcyWrn 0 "No Warning" 1 "Warning" 2 "Reserved" 3 "Reserved"; +VAL_ 506 ISLA_SymFlashMod 0 "No Flasing" 1 "Flashing Sign" 2 "Flashing - Arrow Symbol" 3 "Flashing + Arrow Symbol" 4 "Flashing Auto Symbol" 5 "Reserved" 6 "Reserved" 7 "Reserved"; +VAL_ 506 ISLA_Popup 0 "No Popup" 1 "MSLA Speed will Change" 2 "MSLA Speed has Changed" 3 "CC_SCC Speed will Change" 4 "CC_SCC Speed has Changed" 5 "Reserved" 6 "Reserved" 7 "Reserved"; +VAL_ 506 ISLA_OptUsmSta 0 "None ISLA Option (속도 제한 메뉴 삭제)" 1 "Off" 2 "Warning" 3 "Assist" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Invalid (GRAY)"; +VAL_ 506 ISLA_OffstUsmSta 0 "None Offset Function" 1 "-10kph or -5mph" 2 "-5kph or -3mph" 3 "0kph or 0mph" 4 "+5kph or +3mph" 5 "+10kph or +5mph" 6 "Reserved" 7 "Invalid (GRAY)"; +VAL_ 506 ISLA_AutoUsmSta 0 "None Auto Function (Delete Menu)" 1 "Auto Off" 2 "Auto On" 3 "Invalid (GRAY)"; +VAL_ 506 ISLA_Cntry 0 "Europe/Russia/Australia" 1 "Domestic" 2 "China" 3 "USA" 4 "Canada" 5 "Australia" 6 "Reserved" 7 "Reserved" 8 "Reserved" 9 "Reserved" 10 "Reserved" 11 "Reserved" 12 "Reserved" 13 "Reserved" 14 "Reserved" 15 "Initial Value (default)"; +VAL_ 506 ISLA_AddtnlSign 0 "No Recognition (default)" 1 "School Crossing" 16 "Do Not Pass" 17 "Reserved" 18 "Reserved" 19 "Reserved" 20 "Reserved" 21 "Reserved" 22 "Reserved" 23 "Reserved" 24 "Exit" 25 "Roundabout" 26 "Right Curve" 27 "Left Curve" 28 "Winding Road" 29 "Reserved" 30 "Reserved" 31 "Reserved" 2 "Pedestrian Crossing" 3 "Bicycle Crossing" 4 "Reserved" 5 "Reserved" 6 "Reserved" 7 "Reserved" 8 "Stop" 9 "Yield" 10 "Stop Ahead" 11 "Yield Ahead" 12 "Road Construction Ahead" 13 "Lane Reduction" 14 "Reserved" 15 "Reserved"; +VAL_ 506 ISLA_SchoolZone 0 "No School Zone" 1 "School Zone" 2 "Reserved" 3 "Reserved"; +VAL_ 698 IFSref_FR_CMR_Sta 0 "None Option (Default)" 1 "Normal" 2 "Blockage Status" 3 "Error Indicator"; +VAL_ 698 IFSref_VehNumVal 0 "No vehicle" 1 "Number of vehicles" 2 "Number of vehicles" 3 "Number of vehicles" 4 "Number of vehicles" 5 "Number of vehicles" 6 "Number of vehicles" 7 "Number of vehicles" 8 "Number of vehicles" 9 "Number of vehicles" 10 "Number of vehicles" 11 "Over than 10 vehicles" 12 "Reserved" 13 "Reserved" 14 "Default" 15 "Error indicator"; +VAL_ 698 IFSref_ILLAmbtSta 0 "Bright" 1 "Dark" 2 "Not used" 3 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl1Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl1Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl2Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehDst1Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl2Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl3Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl3Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl4Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl4Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl5Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl5Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl6Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl6Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl7Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl7Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl8Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl8Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl9Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl9Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehLftAngl10Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehRtAngl10Val 501 "Not used" 502 "Not used" 503 "Not used" 504 "Not used" 505 "Not used" 506 "Not used" 507 "Not used" 508 "Not used" 509 "Not used" 510 "Default" 511 "Error indicator"; +VAL_ 698 IFSref_VehDst2Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst3Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst4Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst5Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst6Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst7Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst8Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst9Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; +VAL_ 698 IFSref_VehDst10Val 0 "No Value" 1 "1~10m" 2 "11~20m" 3 "21~30m" 4 "31~40m" 5 "41~50m" 6 "51~60m" 7 "61~70m" 8 "71~80m" 9 "81~90m" 10 "91~100m" 11 "101~200m" 12 "201~300m" 13 "301~400m" 14 "401m~" 15 "Error indicator"; VAL_ 736 MSLA_STATUS 0 "disabled" 1 "active" 2 "paused"; VAL_ 866 LEFT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 866 RIGHT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; diff --git a/opendbc/dbc/rivian_primary_actuator.dbc b/opendbc/dbc/rivian_primary_actuator.dbc index b3a464b41b8..5fbf602901f 100644 --- a/opendbc/dbc/rivian_primary_actuator.dbc +++ b/opendbc/dbc/rivian_primary_actuator.dbc @@ -679,7 +679,7 @@ CM_ SG_ 524 ESP_BrakePressure_LF "Brake Pressure Left Front"; CM_ SG_ 524 ESP_BrakePressure_LR "Brake Pressure Left Rear"; CM_ SG_ 524 ESP_BrakePressure_RF "Brake Pressure Right Front"; CM_ SG_ 524 ESP_BrakePressure_RR "Brake Pressure Right Rear"; -CM_ SG_ 524 ESP_MasterCyl_Pressure "Master Cyclinder Brake Pressure"; +CM_ SG_ 524 ESP_MasterCyl_Pressure "Master Cylinder Brake Pressure"; CM_ SG_ 524 ESP_MasterCyl_Pressure_Q "Indication of whether signal with corresponding name is valid"; CM_ SG_ 524 ESP_BrakePressure_RR_Q "Indication of whether signal with corresponding name is valid"; CM_ SG_ 524 ESP_BrakePressure_LR_Q "Indication of whether signal with corresponding name is valid"; diff --git a/opendbc/dbc/volvo_v40_2017_pt.dbc b/opendbc/dbc/volvo_v40_2017_pt.dbc index 3c04331649b..c5f533d601d 100644 --- a/opendbc/dbc/volvo_v40_2017_pt.dbc +++ b/opendbc/dbc/volvo_v40_2017_pt.dbc @@ -315,7 +315,7 @@ CM_ SG_ 192 TransmissionGear "0 = 1st gear, 1= 2nd gear..."; CM_ SG_ 681 TurnSignal "0 = Nothing, 1= Left, 3=Right"; CM_ SG_ 681 HighBeamOn "1=HighBeam On, 0=HighBeam Off"; CM_ SG_ 48 ACCStatusTracking "ACC Tracking vehicle, distance control."; -CM_ SG_ 48 ACCStatusOnOff "Turns one after pressing on/off button on steering wheeel"; +CM_ SG_ 48 ACCStatusOnOff "Turns one after pressing on/off button on steering wheel"; CM_ SG_ 48 ACCStatusActive "ACC Active"; CM_ SG_ 48 FCWSomething "All bit set during fcw"; CM_ SG_ 48 StatusSomething "Some status changes when zeroing DTCs"; @@ -358,6 +358,6 @@ CM_ SG_ 114 NEW_SIGNAL_1 "Jumped from 0 -> 120 during start. Makes triangle from CM_ SG_ 608 NEW_SIGNAL_1 "Status?"; CM_ SG_ 608 NEW_SIGNAL_2 "Classification of object?"; CM_ SG_ 608 Distance "Distance to object in front."; -CM_ SG_ 968 PassengerSeatBelt "1 = Seatbalt latched"; +CM_ SG_ 968 PassengerSeatBelt "1 = Seatbelt latched"; CM_ SG_ 968 DriverSeatBelt "1=Seatbelt latched"; VAL_ 64 GearShifter 0 "P" 1 "R" 2 "N" 3 "D" ; diff --git a/opendbc/dbc/volvo_v60_2015_pt.dbc b/opendbc/dbc/volvo_v60_2015_pt.dbc index 59e9b9ad93d..d2b58fdd016 100644 --- a/opendbc/dbc/volvo_v60_2015_pt.dbc +++ b/opendbc/dbc/volvo_v60_2015_pt.dbc @@ -283,14 +283,14 @@ CM_ SG_ 298 NEW_SIGNAL_4 "related to gas pedal"; CM_ SG_ 298 NEW_SIGNAL_5 "related to ACCStatus"; CM_ SG_ 298 NEW_SIGNAL_6 "went high at same time as ACCStatus >= 2"; CM_ SG_ 298 BrakePressed "driver"; -CM_ SG_ 298 EngineRpm "Might be engine rpm. But behaves abit weird."; +CM_ SG_ 298 EngineRpm "Might be engine rpm. But behaves a bit weird."; CM_ SG_ 582 byte0 "0=CCW, 1=CW, bit 2,"; CM_ SG_ 582 SteeringWheelRateOfChange "Some rate of change for steering wheel? Torque?"; CM_ SG_ 582 byte4 "High nibble"; CM_ SG_ 582 LKAActive "Bit 1, 1 When LKA Active, Bit 3, 1 When denying?"; CM_ SG_ 608 ACC_Distance "Seems to track distance, or speed of vehicle in front."; CM_ SG_ 610 SET_X_22 "0x20 Heartbeat, VEgo <58kph = 0x03, VEgo >65kph = 0x04, 0x05"; -CM_ SG_ 624 ACC_AccelDecel "Might be some acc speed, moved abit after activating acc"; +CM_ SG_ 624 ACC_AccelDecel "Might be some acc speed, moved a bit after activating acc"; CM_ SG_ 624 ACC_Some "Jumps to life after activating ACC, 0 when not active"; CM_ SG_ 648 Counter "counts 0 to 6"; CM_ SG_ 1021 TSR_Speed "Traffic Sign Recognition speed"; diff --git a/opendbc/dbc/vw_mqb.dbc b/opendbc/dbc/vw_mqb.dbc index ed3d91c1b42..effe4c5bfd5 100644 --- a/opendbc/dbc/vw_mqb.dbc +++ b/opendbc/dbc/vw_mqb.dbc @@ -1304,6 +1304,23 @@ BO_ 294 HCA_01: 8 Frontsensorik SG_ EA_Ruckfreigabe : 40|1@1+ (1,0) [0|1] "" Vector__XXX SG_ EA_ACC_Wunschgeschwindigkeit : 41|10@1+ (0.32,0) [0|327.04] "Unit_KiloMeterPerHour" Frontradar +BO_ 810 LH_EPS_01: 8 XXX + SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX + SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" XXX + SG_ EPS_SpannungsAnf : 12|2@1+ (1.0,0.0) [0.0|3] "" XXX + SG_ EPS_Endanschlag : 14|2@1+ (1.0,0.0) [0.0|3] "" XXX + SG_ EPS_Akustiksignal : 16|1@1+ (1.0,0.0) [0.0|1] "" XXX + SG_ EPS_Fehlerlampe : 17|1@1+ (1.0,0.0) [0.0|1] "" XXX + SG_ EPS_Warnungen : 19|3@1+ (1.0,0.0) [0.0|7] "" XXX + SG_ EPS_PLA_Abbruch : 22|4@1+ (1,0) [0|15] "" XXX + SG_ EPS_PLA_Fehler : 26|4@1+ (1,0) [0|15] "" XXX + SG_ EPS_PLA_Status : 30|4@1+ (1.0,0.0) [0.0|15] "" XXX + SG_ EPS_Charisma_FahrPr : 34|4@1+ (1.0,0.0) [0.0|15] "" XXX + SG_ EPS_Charisma_Status : 38|2@1+ (1.0,0.0) [0.0|3] "" XXX + SG_ EPS_Lenkerposition : 41|2@1+ (1.0,0.0) [0.0|3] "" XXX + SG_ EPS_Anf_KL : 43|1@1+ (1.0,0.0) [0.0|1] "" XXX + SG_ EPS_ARA_Status : 44|4@1+ (1.0,0.0) [0.0|15] "" XXX + BO_ 159 LH_EPS_03: 8 XXX SG_ CHECKSUM : 0|8@1+ (1,0) [0|255] "" XXX SG_ COUNTER : 8|4@1+ (1,0) [0|15] "" XXX diff --git a/opendbc/dbc/vw_pq.dbc b/opendbc/dbc/vw_pq.dbc index 1aab227596a..d488a709515 100644 --- a/opendbc/dbc/vw_pq.dbc +++ b/opendbc/dbc/vw_pq.dbc @@ -880,18 +880,31 @@ BO_ 424 Bremse_6: 3 XXX BO_ 1192 Bremse_5: 8 XXX SG_ CHECKSUM : 56|8@1+ (1,0) [0|0] "" XXX SG_ COUNTER : 52|4@1+ (1,0) [0|15] "" XXX - SG_ Bremslicht_ECD : 51|1@1+ (1,0) [0|0] "" XXX - SG_ Bremsentemperatur_vorn : 48|3@1+ (125,125) [125|1000] "C" XXX - SG_ Frei_Bremse_5_5 : 40|8@1+ (1,0) [0|0] "" XXX - SG_ Offset_Gierrate : 32|8@1+ (0.05,-6.375) [-6.375|6.375] "deg/s" XXX - SG_ Vorzeichen_Bremsdruck : 31|1@1+ (1,0) [0|0] "" XXX - SG_ Status_Bremsdruck_durch_ESP_Sys : 30|1@1+ (1,0) [0|0] "" XXX - SG_ Bremsdruck_ungueltig : 29|1@1+ (1,0) [0|0] "" XXX - SG_ Frei_Bremse_5_3 : 28|1@1+ (1,0) [0|0] "" XXX - SG_ Bremsdruck : 16|12@1+ (0.1,0) [0|250] "bar" XXX - SG_ Vorzeichen_der_Giergeschwindigk : 15|1@1+ (1,0) [0|0] "" XXX - SG_ Gierrate_ungueltig : 14|1@1+ (1,0) [0|0] "" XXX - SG_ Giergeschwindigkeit : 0|14@1+ (0.01,0) [0|100] "Grad/sec" XXX + SG_ BR5_ECD_Lampe : 51|1@1+ (1,0) [0|0] "" XXX + SG_ BR5_ZT_Rueckk_Umsetz : 48|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Anhi_Sta : 40|1@1+ (1,0) [0|1] "" XXX + SG_ ESP_Rollenmodus_Deactiveieren : 34|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Sign_Druck : 31|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Sta_Druck : 30|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Druckvalid : 29|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Stillstand : 28|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Bremsdruck : 16|12@1+ (0.1,0) [0|250] "bar" XXX + SG_ BR5_Vorzeichen : 15|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Sta_Gierrate : 14|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Giergeschw : 0|14@1+ (0.01,0) [0|100] "Grad/sec" XXX + SG_ BR5_ANB_CM_Rueckk_Umsetz : 49|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_HDC_bereit : 50|1@1+ (1,0) [0|1] "" XXX + SG_ ESP_Stat_FallBack_eBKV : 35|1@1+ (1,0) [0|1] "" XXX + SG_ ESP_Anforderung_EPB : 36|2@1+ (1,0) [0|3] "" XXX + SG_ ESP_Autohold_active : 38|1@1+ (1,0) [0|1] "" XXX + SG_ ESP_Autohold_Standby : 39|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Anhi_akt : 41|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_v_Ueberw : 42|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Bremslicht : 43|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Notbremsung : 44|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_Fahrer_tritt_ZBR_Schw : 45|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_AWV2_Bremsruck : 46|1@1+ (1,0) [0|1] "" XXX + SG_ BR5_AWV2_Fehler : 47|1@1+ (1,0) [0|1] "" XXX BO_ 672 Bremse_4: 3 XXX SG_ Frei_Bremse_4_1 : 17|7@1+ (1,0) [0|0] "" XXX @@ -1637,7 +1650,7 @@ VAL_ 872 ACS_Fehler 1 "Fehlerspeichereintrag" 0 "kein_Fehlerspeichereintrag" ; VAL_ 872 ACS_zul_Regelabw 254 "ADR_nicht_aktiv" 255 "Fehler" ; VAL_ 872 ACS_max_AendGrad 254 "Neutralwert" 0 "Neutralwert" 255 "Fehler" ; -VAL_ 978 LH2_Sta_HCA 0 "disabled" 1 "initializing" 2 "fault" 3 "ready" 4 "rejected" 5 "active"; +VAL_ 978 LH2_Sta_HCA 0 "disabled" 1 "initializing" 2 "fault" 3 "ready" 4 "rejected" 5 "active" 7 "active"; VAL_ 1088 Waehlhebelposition__Getriebe_1_ 8 "P" 7 "R" 6 "N" 5 "D" 9 "U" 12 "S" 14 "T" 10 "T" 11 "T"; VAL_ 1386 ACA_StaACC 6 "ACC_rev_aus" 0 "Hauptschalter_aus" 4 "ACC_im_Hintergrund" 3 "ACC_aktiv" 1 "Reserve" 2 "ACC_passiv" 7 "ACC_irrev_aus" 5 "frei" ; diff --git a/opendbc/safety/__init__.py b/opendbc/safety/__init__.py index 4ce0cd5f03c..1dd8d15e4d3 100644 --- a/opendbc/safety/__init__.py +++ b/opendbc/safety/__init__.py @@ -8,3 +8,4 @@ class ALTERNATIVE_EXPERIENCE: DISABLE_STOCK_AEB = 2 RAISE_LONGITUDINAL_LIMITS_TO_ISO_MAX = 8 ALLOW_AEB = 16 + ALKA = 2 ** 10 diff --git a/opendbc/safety/lateral.h b/opendbc/safety/lateral.h index f842eaa4733..a4b33d8573e 100644 --- a/opendbc/safety/lateral.h +++ b/opendbc/safety/lateral.h @@ -60,8 +60,9 @@ static bool rt_torque_rate_limit_check(int val, int val_last, const int MAX_RT_D bool steer_torque_cmd_checks(int desired_torque, int steer_req, const TorqueSteeringLimits limits) { bool violation = false; uint32_t ts = microsecond_timer_get(); + bool alka = (alternative_experience & ALT_EXP_ALKA) != 0; - if (controls_allowed) { + if (controls_allowed || alka) { // Some safety models support variable torque limit based on vehicle speed int max_torque = limits.max_torque; if (limits.dynamic_max_torque) { @@ -96,7 +97,7 @@ bool steer_torque_cmd_checks(int desired_torque, int steer_req, const TorqueStee } // no torque if controls is not allowed - if (!controls_allowed && (desired_torque != 0)) { + if (!(controls_allowed || alka) && (desired_torque != 0)) { violation = true; } @@ -138,7 +139,7 @@ bool steer_torque_cmd_checks(int desired_torque, int steer_req, const TorqueStee } // reset to 0 if either controls is not allowed or there's a violation - if (violation || !controls_allowed) { + if (violation || !(controls_allowed || alka)) { valid_steer_req_count = 0; invalid_steer_req_count = 0; desired_torque_last = 0; @@ -175,8 +176,9 @@ static bool rt_angle_rate_limit_check(AngleSteeringLimits limits) { // Safety checks for angle-based steering commands bool steer_angle_cmd_checks(int desired_angle, bool steer_control_enabled, const AngleSteeringLimits limits) { bool violation = false; + bool alka = (alternative_experience & ALT_EXP_ALKA) != 0; - if (controls_allowed && steer_control_enabled) { + if ((controls_allowed || alka) && steer_control_enabled) { // convert floating point angle rate limits to integers in the scale of the desired angle on CAN, // add 1 to not false trigger the violation. also fudge the speed by 1 m/s so rate limits are // always slightly above openpilot's in case we read an updated speed in between angle commands @@ -262,12 +264,12 @@ bool steer_angle_cmd_checks(int desired_angle, bool steer_control_enabled, const } // No angle control allowed when controls are not allowed - if (!controls_allowed) { + if (!(controls_allowed || alka)) { violation |= steer_control_enabled; } // reset to current angle if either controls is not allowed or there's a violation - if (violation || !controls_allowed) { + if (violation || !(controls_allowed || alka)) { if (limits.inactive_angle_is_zero) { desired_angle_last = 0; } else { @@ -303,8 +305,9 @@ bool steer_angle_cmd_checks_vm(int desired_angle, bool steer_control_enabled, co const float curvature_factor = get_curvature_factor(fudged_speed, params); bool violation = false; + bool alka = (alternative_experience & ALT_EXP_ALKA) != 0; - if (controls_allowed && steer_control_enabled) { + if ((controls_allowed || alka) && steer_control_enabled) { // *** ISO lateral jerk limit *** // calculate maximum angle rate per second const float max_curvature_rate_sec = MAX_LATERAL_JERK / (fudged_speed * fudged_speed); @@ -340,12 +343,12 @@ bool steer_angle_cmd_checks_vm(int desired_angle, bool steer_control_enabled, co } // No angle control allowed when controls are not allowed - if (!controls_allowed) { + if (!(controls_allowed || alka)) { violation |= steer_control_enabled; } // reset to current angle if either controls is not allowed or there's a violation - if (violation || !controls_allowed) { + if (violation || !(controls_allowed || alka)) { desired_angle_last = CLAMP(angle_meas.values[0], -limits.max_angle, limits.max_angle); } diff --git a/opendbc/safety/modes/honda.h b/opendbc/safety/modes/honda.h index a702b2008b1..ee80c1370bc 100644 --- a/opendbc/safety/modes/honda.h +++ b/opendbc/safety/modes/honda.h @@ -242,8 +242,9 @@ static bool honda_tx_hook(const CANPacket_t *to_send) { } // STEER: safety check + bool alka = (alternative_experience & ALT_EXP_ALKA) != 0; if ((addr == 0xE4) || (addr == 0x194)) { - if (!controls_allowed) { + if (!(controls_allowed || alka)) { bool steer_applied = GET_BYTE(to_send, 0) | GET_BYTE(to_send, 1); if (steer_applied) { tx = false; diff --git a/opendbc/safety/safety_declarations.h b/opendbc/safety/safety_declarations.h index b703b719665..b6db2c399b0 100644 --- a/opendbc/safety/safety_declarations.h +++ b/opendbc/safety/safety_declarations.h @@ -303,6 +303,8 @@ extern struct sample_t angle_meas; // last 6 steer angles/curvatures // This flag allows AEB to be commanded from openpilot. #define ALT_EXP_ALLOW_AEB 16 +#define ALT_EXP_ALKA 1024 + extern int alternative_experience; // time since safety mode has been changed diff --git a/opendbc/safety/tests/libsafety/SConscript b/opendbc/safety/tests/libsafety/SConscript index db1800a9291..3c4acc18f3f 100644 --- a/opendbc/safety/tests/libsafety/SConscript +++ b/opendbc/safety/tests/libsafety/SConscript @@ -23,12 +23,8 @@ env = Environment( '-Wfatal-errors', '-Wno-pointer-to-int-cast', '-DCANFD', - # GCC coverage flags - '-fprofile-arcs', - '-ftest-coverage', ], CPPPATH=["#", "../../board/"], - LIBS=["gcov"], ) if system == "Darwin": env.PrependENVPath('PATH', '/opt/homebrew/bin') @@ -56,5 +52,15 @@ if GetOption('ubsan'): safety = env.SharedObject("safety.os", "safety.c") libsafety = env.SharedLibrary("libsafety.so", [safety]) +coverage_flags = [ + # GCC coverage flags + '-fprofile-arcs', + '-ftest-coverage', +] +env.Append( + CFLAGS=coverage_flags, + LINKFLAGS=coverage_flags, +) + # GCC note file is generated by compiler, allow scons to clean it up env.SideEffect("safety.gcno", safety) diff --git a/opendbc/safety/tests/test_ford.py b/opendbc/safety/tests/test_ford.py index 2e413f57410..4f8124e9805 100755 --- a/opendbc/safety/tests/test_ford.py +++ b/opendbc/safety/tests/test_ford.py @@ -287,8 +287,8 @@ def test_steer_allowed(self): should_tx = should_tx and abs(curvature) <= curvature_accel_limit_upper with self.subTest(controls_allowed=controls_allowed, steer_control_enabled=steer_control_enabled, - path_offset=path_offset, path_angle=path_angle, curvature_rate=curvature_rate, - curvature=curvature): + path_offset=float(path_offset), path_angle=float(path_angle), curvature_rate=float(curvature_rate), + curvature=float(curvature)): self.assertEqual(should_tx, self._tx(self._lat_ctl_msg(steer_control_enabled, path_offset, path_angle, curvature, curvature_rate))) def test_curvature_rate_limits(self):