From 91c4a5d3c896cf0936c5cf00a484127b9665d21c Mon Sep 17 00:00:00 2001 From: elkoled Date: Fri, 16 Jan 2026 19:29:09 -0800 Subject: [PATCH] honda clear startup fault --- opendbc/car/honda/carstate.py | 17 ++++++++++++++++- opendbc/car/honda/fingerprints.py | 8 ++++++++ opendbc/car/honda/interface.py | 5 +++++ opendbc/car/honda/values.py | 5 +++++ opendbc/car/tests/routes.py | 1 + opendbc/car/torque_data/override.toml | 1 + 6 files changed, 36 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 334491968..69539d456 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -2,7 +2,7 @@ import numpy as np from collections import defaultdict from opendbc.can import CANDefine, CANParser -from opendbc.car import Bus, create_button_events, structs +from opendbc.car import Bus, create_button_events, structs, DT_CTRL from opendbc.car.common.conversions import Conversions as CV from opendbc.car.honda.hondacan import CanBus from opendbc.car.honda.values import CAR, DBC, STEER_THRESHOLD, HONDA_BOSCH, HONDA_BOSCH_ALT_RADAR, HONDA_BOSCH_CANFD, \ @@ -49,6 +49,9 @@ class CarState(CarStateBase): # However, on cars without a digital speedometer this is not always present (HRV, FIT, CRV 2016, ILX and RDX) self.dash_speed_seen = False + self.initial_accFault_cleared = False + self.initial_accFault_cleared_timer = int(10 / DT_CTRL) # 10 seconds after startup for initial faults to clear + def update(self, can_parsers) -> structs.CarState: cp = can_parsers[Bus.pt] cp_cam = can_parsers[Bus.cam] @@ -187,6 +190,18 @@ class CarState(CarStateBase): ret.cruiseState.enabled = cp.vl["POWERTRAIN_DATA"]["ACC_STATUS"] != 0 ret.cruiseState.available = bool(cp.vl[self.car_state_scm_msg]["MAIN_ON"]) + # Bosch cars take a few minutes after startup to clear prior faults + if ret.accFaulted: + if (self.CP.carFingerprint in HONDA_BOSCH) and not self.initial_accFault_cleared: + # block via cruiseState since accFaulted is not reversible until offroad + ret.accFaulted = False + ret.cruiseState.available = False + elif self.initial_accFault_cleared_timer == 0: + self.initial_accFault_cleared = True + + if self.initial_accFault_cleared_timer > 0: + self.initial_accFault_cleared_timer -= 1 + # Gets rid of Pedal Grinding noise when brake is pressed at slow speeds for some models if self.CP.carFingerprint in (CAR.HONDA_PILOT, CAR.HONDA_RIDGELINE): if ret.brake > 0.1: diff --git a/opendbc/car/honda/fingerprints.py b/opendbc/car/honda/fingerprints.py index 9b5b68992..3eb54045f 100644 --- a/opendbc/car/honda/fingerprints.py +++ b/opendbc/car/honda/fingerprints.py @@ -1067,4 +1067,12 @@ FW_VERSIONS = { b'36161-TGV-A030\x00\x00', ], }, + CAR.ACURA_TLX_2G_MMR: { + (Ecu.fwdRadar, 0x18dab0f1, None): [ + b'8S302-TGV-A030\x00\x00', + ], + (Ecu.fwdCamera, 0x18dab5f1, None): [ + b'8S102-TGV-A030\x00\x00', + ], + }, } diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index 59e300c4f..18fd2fbc8 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -191,6 +191,11 @@ class CarInterface(CarInterfaceBase): # When using stock ACC, the radar intercepts and filters steering commands the EPS would otherwise accept ret.minSteerSpeed = 70. * CV.KPH_TO_MS + elif candidate == CAR.ACURA_TLX_2G_MMR: + ret.steerActuatorDelay = 0.15 + ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 3840], [0, 3840]] + CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) + else: ret.steerActuatorDelay = 0.15 ret.lateralParams.torqueBP, ret.lateralParams.torqueV = [[0, 2560], [0, 2560]] diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 3cdccc1eb..01362b31a 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -277,6 +277,11 @@ class CAR(Platforms): {Bus.pt: 'honda_civic_hatchback_ex_2017_can_generated'}, flags=HondaFlags.BOSCH_ALT_RADAR, ) + # mid-model refresh + ACURA_TLX_2G_MMR = HondaBoschCANFDPlatformConfig( + [HondaCarDocs("Acura TLX 2025", "All")], + CarSpecs(mass=3990 * CV.LB_TO_KG, wheelbase=2.87, centerToFrontRatio=0.43, steerRatio=14.2), + ) # Nidec Cars ACURA_ILX = HondaNidecPlatformConfig( diff --git a/opendbc/car/tests/routes.py b/opendbc/car/tests/routes.py index 3fef40ef9..51a08629d 100644 --- a/opendbc/car/tests/routes.py +++ b/opendbc/car/tests/routes.py @@ -127,6 +127,7 @@ routes = [ # CarTestRoute("56b2cf1dacdcd033/00000017--d24ffdb376", HONDA.HONDA_CITY_7G), # Brazilian model CarTestRoute("2dc4489d7e1410ca/00000001--bbec3f5117", HONDA.HONDA_CRV_6G), CarTestRoute("a703d058f4e05aeb/00000008--f169423024", HONDA.HONDA_PASSPORT_4G), + CarTestRoute("ad9840558640c31d/000001e3--597b055ad7", HONDA.ACURA_TLX_2G_MMR), CarTestRoute("87d7f06ade479c2e/2023-09-11--23-30-11", HYUNDAI.HYUNDAI_AZERA_6TH_GEN), CarTestRoute("66189dd8ec7b50e6/2023-09-20--07-02-12", HYUNDAI.HYUNDAI_AZERA_HEV_6TH_GEN), diff --git a/opendbc/car/torque_data/override.toml b/opendbc/car/torque_data/override.toml index 69cc6048d..f55889e52 100644 --- a/opendbc/car/torque_data/override.toml +++ b/opendbc/car/torque_data/override.toml @@ -91,6 +91,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"] "HONDA_ODYSSEY_5G_MMR" = [0.9, 0.9, 0.2] "HONDA_NBOX_2G" = [1.2, 1.2, 0.2] "ACURA_TLX_2G" = [1.2, 1.2, 0.15] +"ACURA_TLX_2G_MMR" = [1.6, 1.6, 0.14] "PORSCHE_MACAN_MK1" = [2.0, 2.0, 0.2] # Dashcam or fallback configured as ideal car