From d9fdcb0b5e3d6f2d088f9af95db309165642c4c2 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Thu, 14 Aug 2025 08:29:36 +0000 Subject: [PATCH 01/53] docs: Scheduled auto-update CARS.md --- docs/CARS.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/CARS.md b/docs/CARS.md index 7bc8529f604..6290ba9e1cd 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -1,6 +1,6 @@ -# Support Information for 377 Known Cars +# Support Information for 376 Known Cars |Make|Model|Package|Support Level| |---|---|---|:---:| @@ -10,7 +10,6 @@ |Acura|MDX 2015-16|Advance Package|[Community](#community)| |Acura|MDX 2017-20|All|[Community](#community)| |Acura|MDX 2025|All except Type S|[Upstream](#upstream)| -|Acura|MDX 2025|All|[Community](#community)| |Acura|RDX 2016-18|AcuraWatch Plus or Advance Package|[Upstream](#upstream)| |Acura|RDX 2019-21|All|[Upstream](#upstream)| |Acura|RDX 2022-25|All|[Community](#community)| @@ -339,7 +338,7 @@ |Toyota|Sienna 2024-25|Any|[Not compatible](#can-bus-security)| |Toyota|Tundra 2022-25|Any|[Not compatible](#can-bus-security)| |Toyota|Venza 2021-25|Any|[Not compatible](#can-bus-security)| -|Toyota|Yaris (Non-US only) 2023|All|[Community](#community)| +|Toyota|Yaris (Non-US only) 2020, 2023|All|[Community](#community)| |Volkswagen|Arteon 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| |Volkswagen|Arteon eHybrid 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| |Volkswagen|Arteon R 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| From 76d9929930d02d5e77436aca014da8b086ad5bf0 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sat, 16 Aug 2025 23:36:00 -0400 Subject: [PATCH 02/53] rename hybrid brake signals --- opendbc/dbc/generator/honda/_nidec_common.dbc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opendbc/dbc/generator/honda/_nidec_common.dbc b/opendbc/dbc/generator/honda/_nidec_common.dbc index abfea43805a..11e558034a6 100644 --- a/opendbc/dbc/generator/honda/_nidec_common.dbc +++ b/opendbc/dbc/generator/honda/_nidec_common.dbc @@ -26,7 +26,7 @@ BO_ 487 BRAKE_PRESSURE: 4 VSA BO_ 506 BRAKE_COMMAND: 8 ADAS SG_ COMPUTER_BRAKE : 7|10@0+ (1,0) [0|1] "" EBCM SG_ BRAKE_PUMP_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM - SG_ BRAKE_PUMP_REQUEST_ALT : 11|1@0+ (1,0) [0|1] "" EBCM + SG_ BRAKE_PUMP_REQUEST_HYBRID : 11|1@0+ (1,0) [0|1] "" EBCM SG_ SET_ME_X00 : 23|3@0+ (1,0) [0|1] "" EBCM SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM SG_ SET_ME_X00_2 : 19|1@0+ (1,0) [0|1] "" EBCM @@ -42,7 +42,7 @@ BO_ 506 BRAKE_COMMAND: 8 ADAS SG_ SET_ME_X00_3 : 44|1@0+ (1,0) [0|1] "" EBCM SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM SG_ AEB_STATUS : 41|2@0+ (1,0) [0|3] "" XXX - SG_ COMPUTER_BRAKE_ALT : 55|10@0+ (1,0) [0|0] "" EBCM + SG_ COMPUTER_BRAKE_HYBRID : 55|10@0+ (1,0) [0|0] "" EBCM SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EBCM From 64f3c8fa9741011610fc27c5ec49936bd761f951 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sat, 16 Aug 2025 23:38:53 -0400 Subject: [PATCH 03/53] add hybrid brake error --- opendbc/dbc/generator/honda/_honda_common.dbc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/opendbc/dbc/generator/honda/_honda_common.dbc b/opendbc/dbc/generator/honda/_honda_common.dbc index 3d35df78485..f004efd4f91 100644 --- a/opendbc/dbc/generator/honda/_honda_common.dbc +++ b/opendbc/dbc/generator/honda/_honda_common.dbc @@ -31,6 +31,12 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON +BO_ 388 HYBRID_BRAKE_ERROR: 8 XXX + SG_ BRAKE_ERROR_1 : 32|1@0+ (1,0) [0|1] "" EON + SG_ BRAKE_ERROR_2 : 34|1@0+ (1,0) [0|1] "" EON + SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON + SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON + BO_ 420 VSA_STATUS: 8 VSA SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON From a1e60b56361ccc8d894fc11b840c6547e6e89c62 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sat, 16 Aug 2025 23:39:19 -0400 Subject: [PATCH 04/53] moved hybrid brake error to honda common --- .../dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc b/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc index 0451acb6b9e..c8efcb963fc 100644 --- a/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc +++ b/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc @@ -5,12 +5,6 @@ CM_ "IMPORT _steering_sensors_a.dbc"; CM_ "IMPORT _steering_control_a.dbc"; CM_ "IMPORT _gearbox_common.dbc"; -BO_ 388 BRAKE_ERROR: 8 XXX - SG_ BRAKE_ERROR_1 : 32|1@0+ (1,0) [0|1] "" EON - SG_ BRAKE_ERROR_2 : 34|1@0+ (1,0) [0|1] "" EON - SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON - SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON - BO_ 399 STEER_STATUS: 7 EPS SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON From 4c00d0d1bbf7b82afa407fb7a3a479f62eef428d Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 00:11:36 -0400 Subject: [PATCH 05/53] autodetect hybrid signal --- opendbc/car/honda/interface.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index d60c57123ac..dcae5b015ba 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -66,6 +66,9 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if 0x1C2 in fingerprint[CAN.pt]: ret.flags |= HondaFlags.HAS_EPB.value + if ret.flags & HondaFlags.ALLOW_HYBRID and 0x184 in fingerprint[CAN.pt]: + ret.flags |= HondaFlags.HAS_HYBRID.value + if ret.flags & HondaFlags.ALLOW_MANUAL_TRANS and all(msg not in fingerprint[CAN.pt] for msg in (0x191, 0x1A3)): # Manual transmission support for allowlisted cars only, to prevent silent fall-through on auto-detection failures ret.transmissionType = TransmissionType.manual @@ -238,6 +241,9 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if candidate in HONDA_BOSCH_CANFD: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.BOSCH_CANFD.value + if (candidate in HONDA_NIDEC) and (ret.flags & HondaFlags.HAS_HYBRID): + ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value + # min speed to enable ACC. if car can do stop and go, then set enabling speed # to a negative value, so it won't matter. Otherwise, add 0.5 mph margin to not # conflict with PCM acc From 269b7286693324ffba3ca71f0dcc915de854b01b Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 00:14:01 -0400 Subject: [PATCH 06/53] add hybrid values --- opendbc/car/honda/values.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 96699656db0..ef5682ed73a 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -55,6 +55,7 @@ class HondaSafetyFlags(IntFlag): NIDEC_ALT = 4 RADARLESS = 8 BOSCH_CANFD = 16 + NIDEC_HYBRID = 32 class HondaFlags(IntFlag): @@ -75,7 +76,9 @@ class HondaFlags(IntFlag): HAS_ALL_DOOR_STATES = 256 # Some Hondas have all door states, others only driver door HAS_EPB = 512 + HAS_HYBRID = 4092 ALLOW_MANUAL_TRANS = 1024 + ALLOW_HYBRID = 8192 # Car button codes From 31287eea3b323368c0aace0dae3081d0c9afe52a Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 00:47:29 -0400 Subject: [PATCH 07/53] add hybrid fault status --- opendbc/car/honda/carstate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 702f7e1b1a9..fe79ab501ea 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -97,7 +97,10 @@ def update(self, can_parsers) -> structs.CarState: # On some cars, these two signals are always 1, this flag is masking a bug in release # FIXME: find and set the ACC faulted signals on more platforms if self.CP.openpilotLongitudinalControl: - ret.accFaulted = bool(cp.vl["STANDSTILL"]["BRAKE_ERROR_1"] or cp.vl["STANDSTILL"]["BRAKE_ERROR_2"]) + if self.CP.flags & HondaFlags.HAS_HYBRID: + ret.accFaulted = bool(cp.vl["HYBRID_BRAKE_ERROR"]["BRAKE_ERROR_1"] or cp.vl["HYBRID_BRAKE_ERROR"]["BRAKE_ERROR_2"]) + else: + ret.accFaulted = bool(cp.vl["STANDSTILL"]["BRAKE_ERROR_1"] or cp.vl["STANDSTILL"]["BRAKE_ERROR_2"]) # Log non-critical stock ACC/LKAS faults if Nidec (camera) if self.CP.carFingerprint not in HONDA_BOSCH: From 2a31c74f774b79a483a8775350e83cbfb501dc87 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 00:52:27 -0400 Subject: [PATCH 08/53] add honda hybrid --- opendbc/car/honda/values.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index ef5682ed73a..53f96d1d719 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -330,7 +330,7 @@ class CAR(Platforms): HONDA_BOSCH = CAR.with_flags(HondaFlags.BOSCH) HONDA_BOSCH_RADARLESS = CAR.with_flags(HondaFlags.BOSCH_RADARLESS) HONDA_BOSCH_CANFD = CAR.with_flags(HondaFlags.BOSCH_CANFD) - +HONDA_HYBRID = CAR.with_flags(HondaFlags.HAS_HYBRID) DBC = CAR.create_dbc_map() From 5e7e0cfa0eeeb6155baffd780161b43af1c73e86 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 01:27:45 -0400 Subject: [PATCH 09/53] add honda hybrid control --- opendbc/car/honda/carcontroller.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/opendbc/car/honda/carcontroller.py b/opendbc/car/honda/carcontroller.py index 8345ef68db4..eec24acd812 100644 --- a/opendbc/car/honda/carcontroller.py +++ b/opendbc/car/honda/carcontroller.py @@ -5,7 +5,7 @@ from opendbc.car import Bus, DT_CTRL, rate_limit, make_tester_present_msg, structs from opendbc.car.honda import hondacan from opendbc.car.honda.values import CruiseButtons, VISUAL_HUD, HONDA_BOSCH, HONDA_BOSCH_CANFD, HONDA_BOSCH_RADARLESS, \ - HONDA_NIDEC_ALT_PCM_ACCEL, CarControllerParams + HONDA_NIDEC_ALT_PCM_ACCEL, HONDA_HYBRID, CarControllerParams from opendbc.car.interfaces import CarControllerBase VisualAlert = structs.CarControl.HUDControl.VisualAlert @@ -219,7 +219,8 @@ def update(self, CC, CS, now_nanos): pump_on, self.last_pump_ts = brake_pump_hysteresis(apply_brake, self.apply_brake_last, self.last_pump_ts, ts) pcm_override = True - can_sends.append(hondacan.create_brake_command(self.packer, self.CAN, apply_brake, pump_on, + pump_send = (apply_brake > 0) if self.CP.carFingerprint in HONDA_HYBRID else pump_on + can_sends.append(hondacan.create_brake_command(self.packer, self.CAN, apply_brake, pump_send, pcm_override, pcm_cancel_cmd, fcw_display, self.CP.carFingerprint, CS.stock_brake)) self.apply_brake_last = apply_brake From dd36b0b1cad2f867394ea06c25eda104a4643075 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 01:34:23 -0400 Subject: [PATCH 10/53] update hybrid brake pump --- opendbc/car/honda/hondacan.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/opendbc/car/honda/hondacan.py b/opendbc/car/honda/hondacan.py index 9c9d0b39a96..978568aaf83 100644 --- a/opendbc/car/honda/hondacan.py +++ b/opendbc/car/honda/hondacan.py @@ -52,8 +52,6 @@ def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_ca pcm_fault_cmd = False values = { - "COMPUTER_BRAKE": apply_brake, - "BRAKE_PUMP_REQUEST": pump_on, "CRUISE_OVERRIDE": pcm_override, "CRUISE_FAULT_CMD": pcm_fault_cmd, "CRUISE_CANCEL_CMD": pcm_cancel_cmd, @@ -66,6 +64,16 @@ def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_ca "AEB_REQ_2": 0, "AEB_STATUS": 0, } + if car_fingerprint in HONDA_HYBRID: + values.update({ + "COMPUTER_BRAKE_HYBRID": apply_brake, + "BRAKE_PUMP_REQUEST_HYBRID": apply_brake, + }) + else: + values.update({ + "COMPUTER_BRAKE": apply_brake, + "BRAKE_PUMP_REQUEST": pump_on, + }) return packer.make_can_msg("BRAKE_COMMAND", CAN.pt, values) From 2a323b439ac65d759536e0efb306efe5f774eac6 Mon Sep 17 00:00:00 2001 From: mvl Date: Sun, 17 Aug 2025 01:39:24 -0400 Subject: [PATCH 11/53] Revert "add honda hybrid control" This reverts commit 5e7e0cfa0eeeb6155baffd780161b43af1c73e86. --- opendbc/car/honda/carcontroller.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/opendbc/car/honda/carcontroller.py b/opendbc/car/honda/carcontroller.py index eec24acd812..8345ef68db4 100644 --- a/opendbc/car/honda/carcontroller.py +++ b/opendbc/car/honda/carcontroller.py @@ -5,7 +5,7 @@ from opendbc.car import Bus, DT_CTRL, rate_limit, make_tester_present_msg, structs from opendbc.car.honda import hondacan from opendbc.car.honda.values import CruiseButtons, VISUAL_HUD, HONDA_BOSCH, HONDA_BOSCH_CANFD, HONDA_BOSCH_RADARLESS, \ - HONDA_NIDEC_ALT_PCM_ACCEL, HONDA_HYBRID, CarControllerParams + HONDA_NIDEC_ALT_PCM_ACCEL, CarControllerParams from opendbc.car.interfaces import CarControllerBase VisualAlert = structs.CarControl.HUDControl.VisualAlert @@ -219,8 +219,7 @@ def update(self, CC, CS, now_nanos): pump_on, self.last_pump_ts = brake_pump_hysteresis(apply_brake, self.apply_brake_last, self.last_pump_ts, ts) pcm_override = True - pump_send = (apply_brake > 0) if self.CP.carFingerprint in HONDA_HYBRID else pump_on - can_sends.append(hondacan.create_brake_command(self.packer, self.CAN, apply_brake, pump_send, + can_sends.append(hondacan.create_brake_command(self.packer, self.CAN, apply_brake, pump_on, pcm_override, pcm_cancel_cmd, fcw_display, self.CP.carFingerprint, CS.stock_brake)) self.apply_brake_last = apply_brake From 054a88a6ef6e914d8f67fe670908fc64245e051f Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 01:48:12 -0400 Subject: [PATCH 12/53] nidec hybrid safety --- opendbc/safety/modes/honda.h | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/opendbc/safety/modes/honda.h b/opendbc/safety/modes/honda.h index c7fe76b2d33..eda1fb83f6e 100644 --- a/opendbc/safety/modes/honda.h +++ b/opendbc/safety/modes/honda.h @@ -147,7 +147,14 @@ static void honda_rx_hook(const CANPacket_t *msg) { if (!(alternative_experience & ALT_EXP_DISABLE_STOCK_AEB)) { if ((msg->bus == 2U) && (msg->addr == 0x1FAU)) { bool honda_stock_aeb = GET_BIT(msg, 29U); - int honda_stock_brake = (msg->data[0] << 2) | (msg->data[1] >> 6); + + int honda_stock_brake; + if (honda_nidec_hybrid) { + honda_stock_brake = (msg->data[6] << 2) | (msg->data[7] >> 6); + } + else { + honda_stock_brake = (msg->data[0] << 2) | (msg->data[1] >> 6); + } // Forward AEB when stock braking is higher than openpilot braking // only stop forwarding when AEB event is over @@ -199,7 +206,11 @@ static bool honda_tx_hook(const CANPacket_t *msg) { // BRAKE: safety check (nidec) if ((msg->addr == 0x1FAU) && (msg->bus == bus_pt)) { - honda_brake = (msg->data[0] << 2) + ((msg->data[1] >> 6) & 0x3U); + if ( honda_nidec_hybrid ) { + honda_brake = (msg->data[6] << 2) + ((msg->data[7] >> 6) & 0x3U); + } else { + honda_brake = (msg->data[0] << 2) + ((msg->data[1] >> 6) & 0x3U); + } if (longitudinal_brake_checks(honda_brake, HONDA_NIDEC_LONG_LIMITS)) { tx = false; } @@ -280,6 +291,7 @@ static safety_config honda_nidec_init(uint16_t param) { {0x30C, 0, 8, .check_relay = true}, {0x33D, 0, 5, .check_relay = true}}; const uint16_t HONDA_PARAM_NIDEC_ALT = 4; + const uint16_t HONDA_PARAM_NIDEC_HYBRID = 32; honda_hw = HONDA_NIDEC; honda_brake = 0; @@ -293,7 +305,8 @@ static safety_config honda_nidec_init(uint16_t param) { safety_config ret; bool enable_nidec_alt = GET_FLAG(param, HONDA_PARAM_NIDEC_ALT); - + honda_nidec_hybrid = GET_FLAG(param, HONDA_PARAM_NIDEC_HYBRID); + if (enable_nidec_alt) { // For Nidecs with main on signal on an alternate msg (missing 0x326) static RxCheck honda_nidec_alt_rx_checks[] = { From 7bf609e6fd2f5983eb5fa2db748d34c11e72038e Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 12:20:06 -0400 Subject: [PATCH 13/53] add test coverage for hybrid brake --- opendbc/safety/tests/test_honda.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/opendbc/safety/tests/test_honda.py b/opendbc/safety/tests/test_honda.py index 62f42398ecf..d72d47d76c4 100755 --- a/opendbc/safety/tests/test_honda.py +++ b/opendbc/safety/tests/test_honda.py @@ -360,6 +360,22 @@ def _button_msg(self, buttons, main_on=False, bus=None): return self.packer.make_can_msg_panda("SCM_BUTTONS", bus, values) +class TestHondaNidecPcmHybridSafety(TestHondaNidecPcmAltSafety): + """ + Covers the Honda Nidec safety mode with alt SCM messages and hybrid brake + """ + + def setUp(self): + self.packer = CANPackerPanda("honda_clarity_hybrid_2018_can_generated") + self.safety = libsafety_py.libsafety + self.safety.set_safety_hooks(CarParams.SafetyModel.hondaNidec, HondaSafetyFlags.NIDEC_ALT | HondaSafetyFlags.NIDEC_HYBRID) + self.safety.init_tests() + + def _send_brake_msg(self, brake, aeb_req=0, bus=0): + values = {"COMPUTER_BRAKE_HYBRID": brake, "AEB_REQ_1": aeb_req} + return self.packer.make_can_msg_panda("BRAKE_COMMAND", bus, values) + + # ********************* Honda Bosch ********************** From 98cec79027c905ed35bfc564f1a921613a053bbc Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 12:24:40 -0400 Subject: [PATCH 14/53] adding nidec hybrid variable --- opendbc/safety/modes/honda.h | 1 + 1 file changed, 1 insertion(+) diff --git a/opendbc/safety/modes/honda.h b/opendbc/safety/modes/honda.h index eda1fb83f6e..9d1ef663adb 100644 --- a/opendbc/safety/modes/honda.h +++ b/opendbc/safety/modes/honda.h @@ -29,6 +29,7 @@ static int honda_brake = 0; static bool honda_brake_switch_prev = false; static bool honda_alt_brake_msg = false; static bool honda_fwd_brake = false; +static bool honda_nidec_hybrid = false; static bool honda_bosch_long = false; static bool honda_bosch_radarless = false; static bool honda_bosch_canfd = false; From 69eec9130b37f4fd80f03159c724e4e8719c8a70 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 12:33:22 -0400 Subject: [PATCH 15/53] adding initial hybrid values --- opendbc/car/honda/values.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 53f96d1d719..002ecac8293 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -170,6 +170,7 @@ class CAR(Platforms): # steerRatio: 11.82 is spec end-to-end CarSpecs(mass=3279 * CV.LB_TO_KG, wheelbase=2.83, steerRatio=16.33, centerToFrontRatio=0.39, tireStiffnessFactor=0.8467), {Bus.pt: 'honda_accord_2018_can_generated'}, + flags=HondaFlags.HYBRID_ALLOWED, ) HONDA_ACCORD_11G = HondaBoschCANFDPlatformConfig( [ @@ -177,6 +178,7 @@ class CAR(Platforms): HondaCarDocs("Honda Accord Hybrid 2023-25", "All"), ], CarSpecs(mass=3477 * CV.LB_TO_KG, wheelbase=2.83, steerRatio=16.0, centerToFrontRatio=0.39), + flags=HondaFlags.HYBRID_ALLOWED, ) HONDA_CIVIC_BOSCH = HondaBoschPlatformConfig( [ @@ -203,7 +205,7 @@ class CAR(Platforms): ], HONDA_CIVIC_BOSCH.specs, {Bus.pt: 'honda_civic_ex_2022_can_generated'}, - flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS + flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS | HondaFlags.HYBRID_ALLOWED, ) HONDA_CRV_5G = HondaBoschPlatformConfig( [HondaCarDocs("Honda CR-V 2017-22", min_steer_speed=15. * CV.MPH_TO_MS)], @@ -217,6 +219,7 @@ class CAR(Platforms): # mass: mean of 4 models in kg, steerRatio: 12.3 is spec end-to-end CarSpecs(mass=1667, wheelbase=2.66, steerRatio=16, centerToFrontRatio=0.41, tireStiffnessFactor=0.677), {Bus.pt: 'honda_accord_2018_can_generated'}, + flags=HondaFlags.HYBRID_ALLOWED, ) HONDA_HRV_3G = HondaBoschPlatformConfig( [HondaCarDocs("Honda HR-V 2023-25", "All")], From 97c8f3d4eb117d4685d13176d509ec114cc2d7bb Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 12:47:43 -0400 Subject: [PATCH 16/53] add remaining hybrid_allowed cars --- opendbc/car/honda/values.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index c8bc1b47e26..5694035d6d5 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -170,7 +170,6 @@ class CAR(Platforms): # steerRatio: 11.82 is spec end-to-end CarSpecs(mass=3279 * CV.LB_TO_KG, wheelbase=2.83, steerRatio=16.33, centerToFrontRatio=0.39, tireStiffnessFactor=0.8467), {Bus.pt: 'honda_accord_2018_can_generated'}, - flags=HondaFlags.HYBRID_ALLOWED, ) HONDA_ACCORD_11G = HondaBoschCANFDPlatformConfig( [ @@ -220,6 +219,7 @@ class CAR(Platforms): HondaCarDocs("Honda CR-V Hybrid 2023-25", "All"), ], CarSpecs(mass=1703, wheelbase=2.7, steerRatio=16.2, centerToFrontRatio=0.42), + flags=HondaFlags.HYBRID_ALLOWED, ) HONDA_CRV_HYBRID = HondaBoschPlatformConfig( [HondaCarDocs("Honda CR-V Hybrid 2017-22", min_steer_speed=12. * CV.MPH_TO_MS)], @@ -243,7 +243,7 @@ class CAR(Platforms): HONDA_INSIGHT = HondaBoschPlatformConfig( [HondaCarDocs("Honda Insight 2019-22", "All", min_steer_speed=3. * CV.MPH_TO_MS)], CarSpecs(mass=2987 * CV.LB_TO_KG, wheelbase=2.7, steerRatio=15.0, centerToFrontRatio=0.39, tireStiffnessFactor=0.82), # as spec - {Bus.pt: 'honda_insight_ex_2019_can_generated'}, + {Bus.pt: 'honda_insight_ex_2019_can_generated'} ) HONDA_E = HondaBoschPlatformConfig( [HondaCarDocs("Honda e 2020", "All", min_steer_speed=3. * CV.MPH_TO_MS)], From b307b42a0649996bc62a32b79b43ddbda1e2703b Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 12:52:02 -0400 Subject: [PATCH 17/53] update value to consistent ALLOW_HYBRD --- opendbc/car/honda/values.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 5694035d6d5..0aacd4d410d 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -177,7 +177,7 @@ class CAR(Platforms): HondaCarDocs("Honda Accord Hybrid 2023-25", "All"), ], CarSpecs(mass=3477 * CV.LB_TO_KG, wheelbase=2.83, steerRatio=16.0, centerToFrontRatio=0.39), - flags=HondaFlags.HYBRID_ALLOWED, + flags=HondaFlags.ALLOW_HYBRID, ) HONDA_CIVIC_BOSCH = HondaBoschPlatformConfig( [ @@ -204,7 +204,7 @@ class CAR(Platforms): ], HONDA_CIVIC_BOSCH.specs, {Bus.pt: 'honda_civic_ex_2022_can_generated'}, - flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS | HondaFlags.HYBRID_ALLOWED, + flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS | HondaFlags.ALLOW_HYBRID, ) HONDA_CRV_5G = HondaBoschPlatformConfig( [HondaCarDocs("Honda CR-V 2017-22", min_steer_speed=15. * CV.MPH_TO_MS)], @@ -219,14 +219,14 @@ class CAR(Platforms): HondaCarDocs("Honda CR-V Hybrid 2023-25", "All"), ], CarSpecs(mass=1703, wheelbase=2.7, steerRatio=16.2, centerToFrontRatio=0.42), - flags=HondaFlags.HYBRID_ALLOWED, + flags=HondaFlags.ALLOW_HYBRID, ) HONDA_CRV_HYBRID = HondaBoschPlatformConfig( [HondaCarDocs("Honda CR-V Hybrid 2017-22", min_steer_speed=12. * CV.MPH_TO_MS)], # mass: mean of 4 models in kg, steerRatio: 12.3 is spec end-to-end CarSpecs(mass=1667, wheelbase=2.66, steerRatio=16, centerToFrontRatio=0.41, tireStiffnessFactor=0.677), {Bus.pt: 'honda_accord_2018_can_generated'}, - flags=HondaFlags.HYBRID_ALLOWED, + flags=HondaFlags.ALLOW_HYBRID, ) HONDA_HRV_3G = HondaBoschPlatformConfig( [HondaCarDocs("Honda HR-V 2023-25", "All")], From 1098aab94145b32aee00bee489a3fa439a1ad9d9 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 13:07:30 -0400 Subject: [PATCH 18/53] cleanup nidec hybrid --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index 412d3b406d2..c429be9e177 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -246,7 +246,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if candidate in HONDA_BOSCH_CANFD: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.BOSCH_CANFD.value - if (candidate in HONDA_NIDEC) and (ret.flags & HondaFlags.HAS_HYBRID): + if ret.flags & HondaFlags.NIDEC & HondaFlags.HAS_HYBRID): ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value # min speed to enable ACC. if car can do stop and go, then set enabling speed From fe0cebafea7ec2ee15fa0a4dfbb5047cf4ff07e1 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 13:09:31 -0400 Subject: [PATCH 19/53] typo fix --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index c429be9e177..d79b7240e91 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -246,7 +246,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if candidate in HONDA_BOSCH_CANFD: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.BOSCH_CANFD.value - if ret.flags & HondaFlags.NIDEC & HondaFlags.HAS_HYBRID): + if ret.flags & HondaFlags.NIDEC & HondaFlags.HAS_HYBRID: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value # min speed to enable ACC. if car can do stop and go, then set enabling speed From 2a57957b64e4e75db488df576332e986370a2fdd Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 13:10:56 -0400 Subject: [PATCH 20/53] import HONDA_HYBRID --- opendbc/car/honda/hondacan.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/hondacan.py b/opendbc/car/honda/hondacan.py index 978568aaf83..183958dfdbc 100644 --- a/opendbc/car/honda/hondacan.py +++ b/opendbc/car/honda/hondacan.py @@ -1,6 +1,7 @@ from opendbc.car import CanBusBase from opendbc.car.common.conversions import Conversions as CV -from opendbc.car.honda.values import HondaFlags, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CAR, CarControllerParams +from opendbc.car.honda.values import HondaFlags, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CAR, HONDA_HYBRID, + CarControllerParams # CAN bus layout with relay # 0 = ACC-CAN - radar side From e14034c86ecb76e8b29cc90dd667c116c81935fa Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 13:11:57 -0400 Subject: [PATCH 21/53] formatting --- opendbc/car/honda/hondacan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/hondacan.py b/opendbc/car/honda/hondacan.py index 183958dfdbc..065dd9d2bfb 100644 --- a/opendbc/car/honda/hondacan.py +++ b/opendbc/car/honda/hondacan.py @@ -1,6 +1,6 @@ from opendbc.car import CanBusBase from opendbc.car.common.conversions import Conversions as CV -from opendbc.car.honda.values import HondaFlags, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CAR, HONDA_HYBRID, +from opendbc.car.honda.values import HondaFlags, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CAR, HONDA_HYBRID, \ CarControllerParams # CAN bus layout with relay From e9e6ea8eb92d45d714c7eede814f8d0b8b59f8b4 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 13:13:15 -0400 Subject: [PATCH 22/53] whitespace fix --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index d79b7240e91..94790075d29 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -248,7 +248,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if ret.flags & HondaFlags.NIDEC & HondaFlags.HAS_HYBRID: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value - + # min speed to enable ACC. if car can do stop and go, then set enabling speed # to a negative value, so it won't matter. Otherwise, add 0.5 mph margin to not # conflict with PCM acc From 4c2388af818e6f0abb79ff657bc78a7c022c4352 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 23:42:36 -0400 Subject: [PATCH 23/53] add hybrid flag autodetection --- opendbc/car/honda/interface.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index 3b63ff97a3f..14256bebc3b 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -66,6 +66,9 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if 0x1C2 in fingerprint[CAN.pt]: ret.flags |= HondaFlags.HAS_EPB.value + if 0x184 in fingerprint[CAN.pt]: + ret.flags |= HondaFlags.HYBRID.value + if ret.flags & HondaFlags.ALLOW_MANUAL_TRANS and all(msg not in fingerprint[CAN.pt] for msg in (0x191, 0x1A3)): # Manual transmission support for allowlisted cars only, to prevent silent fall-through on auto-detection failures ret.transmissionType = TransmissionType.manual From a8a0232ee3893d5ee62a7603a72bab197032e485 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 23:43:45 -0400 Subject: [PATCH 24/53] adding hybrid flag --- opendbc/car/honda/values.py | 1 + 1 file changed, 1 insertion(+) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index f37ebd0010e..d3008a1b8c3 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -76,6 +76,7 @@ class HondaFlags(IntFlag): HAS_ALL_DOOR_STATES = 256 # Some Hondas have all door states, others only driver door HAS_EPB = 512 ALLOW_MANUAL_TRANS = 1024 + HYBRID = 2048 # Car button codes From bf2b0ca75663b9ef51006a3bbab8ed2b608b7cf2 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 23:44:42 -0400 Subject: [PATCH 25/53] adding common hybrid brake error signal --- opendbc/dbc/generator/honda/_honda_common.dbc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/opendbc/dbc/generator/honda/_honda_common.dbc b/opendbc/dbc/generator/honda/_honda_common.dbc index 3d35df78485..f004efd4f91 100644 --- a/opendbc/dbc/generator/honda/_honda_common.dbc +++ b/opendbc/dbc/generator/honda/_honda_common.dbc @@ -31,6 +31,12 @@ BO_ 380 POWERTRAIN_DATA: 8 PCM SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON SG_ CHECKSUM : 59|4@0+ (1,0) [0|15] "" EON +BO_ 388 HYBRID_BRAKE_ERROR: 8 XXX + SG_ BRAKE_ERROR_1 : 32|1@0+ (1,0) [0|1] "" EON + SG_ BRAKE_ERROR_2 : 34|1@0+ (1,0) [0|1] "" EON + SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON + SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON + BO_ 420 VSA_STATUS: 8 VSA SG_ USER_BRAKE : 7|16@0+ (0.015625,-1.609375) [0|1000] "" EON SG_ COMPUTER_BRAKING : 23|1@0+ (1,0) [0|1] "" EON From 543740c303ac783a97b18c2b339d68e440791d0b Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 23:46:06 -0400 Subject: [PATCH 26/53] remove brake error - moved to honda common --- .../dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc | 6 ------ 1 file changed, 6 deletions(-) diff --git a/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc b/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc index 0451acb6b9e..c8efcb963fc 100644 --- a/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc +++ b/opendbc/dbc/generator/honda/honda_clarity_hybrid_2018_can.dbc @@ -5,12 +5,6 @@ CM_ "IMPORT _steering_sensors_a.dbc"; CM_ "IMPORT _steering_control_a.dbc"; CM_ "IMPORT _gearbox_common.dbc"; -BO_ 388 BRAKE_ERROR: 8 XXX - SG_ BRAKE_ERROR_1 : 32|1@0+ (1,0) [0|1] "" EON - SG_ BRAKE_ERROR_2 : 34|1@0+ (1,0) [0|1] "" EON - SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EON - SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EON - BO_ 399 STEER_STATUS: 7 EPS SG_ STEER_TORQUE_SENSOR : 7|16@0- (-1,0) [-31000|31000] "tbd" EON SG_ STEER_ANGLE_RATE : 23|16@0- (-0.1,0) [-31000|31000] "deg/s" EON From 4e11301002f53823d61978830821628f0663497b Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 17 Aug 2025 23:50:23 -0400 Subject: [PATCH 27/53] update brake error if hybrid --- opendbc/car/honda/carstate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 702f7e1b1a9..5a7e8350dbf 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -97,7 +97,10 @@ def update(self, can_parsers) -> structs.CarState: # On some cars, these two signals are always 1, this flag is masking a bug in release # FIXME: find and set the ACC faulted signals on more platforms if self.CP.openpilotLongitudinalControl: - ret.accFaulted = bool(cp.vl["STANDSTILL"]["BRAKE_ERROR_1"] or cp.vl["STANDSTILL"]["BRAKE_ERROR_2"]) + if self.CP.flags & HondaFlags.HYBRID: + ret.accFaulted = bool(cp.vl["HYBRID_BRAKE_ERROR"]["BRAKE_ERROR_1"] or cp.vl["HYBRID_BRAKE_ERROR"]["BRAKE_ERROR_2"]) + else: + ret.accFaulted = bool(cp.vl["STANDSTILL"]["BRAKE_ERROR_1"] or cp.vl["STANDSTILL"]["BRAKE_ERROR_2"]) # Log non-critical stock ACC/LKAS faults if Nidec (camera) if self.CP.carFingerprint not in HONDA_BOSCH: From 9b2046043ad5ae32e74da2d4fc2a1b8dfcdf8e6d Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Mon, 18 Aug 2025 03:25:38 -0400 Subject: [PATCH 28/53] test_order_of_operations --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index 3d1427d66f6..1f62629ab24 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -66,7 +66,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if 0x1C2 in fingerprint[CAN.pt]: ret.flags |= HondaFlags.HAS_EPB.value - if ret.flags & HondaFlags.ALLOW_HYBRID and 0x184 in fingerprint[CAN.pt]: + if (ret.flags & HondaFlags.ALLOW_HYBRID) and (0x184 in fingerprint[CAN.pt]): ret.flags |= HondaFlags.HAS_HYBRID.value if ret.flags & HondaFlags.ALLOW_MANUAL_TRANS and all(msg not in fingerprint[CAN.pt] for msg in (0x191, 0x1A3)): From f2b77e0742d17cf31808fe0e5d479f43193e3d32 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Mon, 18 Aug 2025 03:53:32 -0400 Subject: [PATCH 29/53] try original DBC --- opendbc/safety/tests/test_honda.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/safety/tests/test_honda.py b/opendbc/safety/tests/test_honda.py index d72d47d76c4..2ea0a974367 100755 --- a/opendbc/safety/tests/test_honda.py +++ b/opendbc/safety/tests/test_honda.py @@ -366,7 +366,7 @@ class TestHondaNidecPcmHybridSafety(TestHondaNidecPcmAltSafety): """ def setUp(self): - self.packer = CANPackerPanda("honda_clarity_hybrid_2018_can_generated") + self.packer = CANPackerPanda("acura_ilx_2016_can_generated") self.safety = libsafety_py.libsafety self.safety.set_safety_hooks(CarParams.SafetyModel.hondaNidec, HondaSafetyFlags.NIDEC_ALT | HondaSafetyFlags.NIDEC_HYBRID) self.safety.init_tests() From f303409fb65400049697e5ea7e4a09fd31d62981 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Tue, 19 Aug 2025 01:40:28 -0400 Subject: [PATCH 30/53] whitespace fix --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index dec13c2d1b2..832d6464959 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -68,7 +68,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if 0x184 in fingerprint[CAN.pt]: ret.flags |= HondaFlags.HYBRID.value - + if ret.flags & HondaFlags.ALLOW_MANUAL_TRANS and all(msg not in fingerprint[CAN.pt] for msg in (0x191, 0x1A3)): # Manual transmission support for allowlisted cars only, to prevent silent fall-through on auto-detection failures ret.transmissionType = TransmissionType.manual From 03338b55e2695a893152c8246dd410db8751d469 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Tue, 19 Aug 2025 01:58:54 -0400 Subject: [PATCH 31/53] remove Hybrid model gating --- opendbc/car/honda/values.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 8586f618191..dc4407d468a 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -176,7 +176,6 @@ class CAR(Platforms): HondaCarDocs("Honda Accord Hybrid 2023-25", "All"), ], CarSpecs(mass=3477 * CV.LB_TO_KG, wheelbase=2.83, steerRatio=16.0, centerToFrontRatio=0.39), - flags=HondaFlags.ALLOW_HYBRID, ) HONDA_CIVIC_BOSCH = HondaBoschPlatformConfig( [ @@ -203,7 +202,7 @@ class CAR(Platforms): ], HONDA_CIVIC_BOSCH.specs, {Bus.pt: 'honda_civic_ex_2022_can_generated'}, - flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS | HondaFlags.ALLOW_HYBRID, + flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS, ) HONDA_CRV_5G = HondaBoschPlatformConfig( [HondaCarDocs("Honda CR-V 2017-22", min_steer_speed=15. * CV.MPH_TO_MS)], @@ -218,14 +217,12 @@ class CAR(Platforms): HondaCarDocs("Honda CR-V Hybrid 2023-25", "All"), ], CarSpecs(mass=1703, wheelbase=2.7, steerRatio=16.2, centerToFrontRatio=0.42), - flags=HondaFlags.ALLOW_HYBRID, ) HONDA_CRV_HYBRID = HondaBoschPlatformConfig( [HondaCarDocs("Honda CR-V Hybrid 2017-22", min_steer_speed=12. * CV.MPH_TO_MS)], # mass: mean of 4 models in kg, steerRatio: 12.3 is spec end-to-end CarSpecs(mass=1667, wheelbase=2.66, steerRatio=16, centerToFrontRatio=0.41, tireStiffnessFactor=0.677), {Bus.pt: 'honda_accord_2018_can_generated'}, - flags=HondaFlags.ALLOW_HYBRID, ) HONDA_HRV_3G = HondaBoschPlatformConfig( [HondaCarDocs("Honda HR-V 2023-25", "All")], @@ -339,7 +336,7 @@ class CAR(Platforms): HONDA_BOSCH = CAR.with_flags(HondaFlags.BOSCH) HONDA_BOSCH_RADARLESS = CAR.with_flags(HondaFlags.BOSCH_RADARLESS) HONDA_BOSCH_CANFD = CAR.with_flags(HondaFlags.BOSCH_CANFD) -HONDA_HYBRID = CAR.with_flags(HondaFlags.HAS_HYBRID) +HONDA_HYBRID = CAR.with_flags(HondaFlags.HYBRID) DBC = CAR.create_dbc_map() From a54a069198ebd768b035602b3774959fac62867b Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Tue, 19 Aug 2025 02:01:27 -0400 Subject: [PATCH 32/53] formatting fixes --- opendbc/car/honda/values.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index dc4407d468a..2eb429714cb 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -202,7 +202,7 @@ class CAR(Platforms): ], HONDA_CIVIC_BOSCH.specs, {Bus.pt: 'honda_civic_ex_2022_can_generated'}, - flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS, + flags=HondaFlags.BOSCH_RADARLESS | HondaFlags.ALLOW_MANUAL_TRANS ) HONDA_CRV_5G = HondaBoschPlatformConfig( [HondaCarDocs("Honda CR-V 2017-22", min_steer_speed=15. * CV.MPH_TO_MS)], @@ -239,7 +239,7 @@ class CAR(Platforms): HONDA_INSIGHT = HondaBoschPlatformConfig( [HondaCarDocs("Honda Insight 2019-22", "All", min_steer_speed=3. * CV.MPH_TO_MS)], CarSpecs(mass=2987 * CV.LB_TO_KG, wheelbase=2.7, steerRatio=15.0, centerToFrontRatio=0.39, tireStiffnessFactor=0.82), # as spec - {Bus.pt: 'honda_insight_ex_2019_can_generated'} + {Bus.pt: 'honda_insight_ex_2019_can_generated'}, ) HONDA_E = HondaBoschPlatformConfig( [HondaCarDocs("Honda e 2020", "All", min_steer_speed=3. * CV.MPH_TO_MS)], @@ -338,6 +338,7 @@ class CAR(Platforms): HONDA_BOSCH_CANFD = CAR.with_flags(HondaFlags.BOSCH_CANFD) HONDA_HYBRID = CAR.with_flags(HondaFlags.HYBRID) + DBC = CAR.create_dbc_map() From 095c98c807c60ce950fbf221e43b6f7cf6f44b00 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Tue, 19 Aug 2025 02:02:48 -0400 Subject: [PATCH 33/53] revert model gating --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index c8d6840299d..02ebb9bc57a 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -225,7 +225,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if candidate in HONDA_BOSCH_CANFD: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.BOSCH_CANFD.value - if ret.flags & HondaFlags.NIDEC & HondaFlags.HAS_HYBRID: + if ret.flags & HondaFlags.NIDEC & HondaFlags.HYBRID: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value # min speed to enable ACC. if car can do stop and go, then set enabling speed From f1dc2727fadbf8ab5f3a03f5344e801f911a044a Mon Sep 17 00:00:00 2001 From: mvl Date: Tue, 19 Aug 2025 02:30:00 -0400 Subject: [PATCH 34/53] Revert "docs: Scheduled auto-update CARS.md" This reverts commit d9fdcb0b5e3d6f2d088f9af95db309165642c4c2. --- docs/CARS.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/CARS.md b/docs/CARS.md index 6efb9e48030..d3794ad38e2 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -1,6 +1,6 @@ -# Support Information for 376 Known Cars +# Support Information for 377 Known Cars |Make|Model|Package|Support Level| |---|---|---|:---:| @@ -10,6 +10,7 @@ |Acura|MDX 2015-16|Advance Package|[Community](#community)| |Acura|MDX 2017-20|All|[Community](#community)| |Acura|MDX 2025|All except Type S|[Upstream](#upstream)| +|Acura|MDX 2025|All|[Community](#community)| |Acura|RDX 2016-18|AcuraWatch Plus or Advance Package|[Upstream](#upstream)| |Acura|RDX 2019-21|All|[Upstream](#upstream)| |Acura|RDX 2022-25|All|[Community](#community)| @@ -339,7 +340,7 @@ |Toyota|Sienna 2024-25|Any|[Not compatible](#can-bus-security)| |Toyota|Tundra 2022-25|Any|[Not compatible](#can-bus-security)| |Toyota|Venza 2021-25|Any|[Not compatible](#can-bus-security)| -|Toyota|Yaris (Non-US only) 2020, 2023|All|[Community](#community)| +|Toyota|Yaris (Non-US only) 2023|All|[Community](#community)| |Volkswagen|Arteon 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| |Volkswagen|Arteon eHybrid 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| |Volkswagen|Arteon R 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| From 19ddbcb5175ff111576a9e3ee97122d5ae3aaf51 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Tue, 19 Aug 2025 02:45:31 -0400 Subject: [PATCH 35/53] backing out unintended auto-model chages --- docs/CARS.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/CARS.md b/docs/CARS.md index d3794ad38e2..52e56de42b9 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -10,7 +10,6 @@ |Acura|MDX 2015-16|Advance Package|[Community](#community)| |Acura|MDX 2017-20|All|[Community](#community)| |Acura|MDX 2025|All except Type S|[Upstream](#upstream)| -|Acura|MDX 2025|All|[Community](#community)| |Acura|RDX 2016-18|AcuraWatch Plus or Advance Package|[Upstream](#upstream)| |Acura|RDX 2019-21|All|[Upstream](#upstream)| |Acura|RDX 2022-25|All|[Community](#community)| @@ -440,4 +439,4 @@ Toyota, and the GM Global B platform. All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a CAN bus isn't the only way that the computers in your car can communicate. Most, if not all, vehicles from the following manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars -may one day be supported, but we have no immediate plans to support FlexRay. \ No newline at end of file +may one day be supported, but we have no immediate plans to support FlexRay. From 2574de36a37fee6df660a8b3260905f65e97dfc2 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Tue, 19 Aug 2025 02:47:34 -0400 Subject: [PATCH 36/53] backing out unintended auto-model chages --- docs/CARS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CARS.md b/docs/CARS.md index 52e56de42b9..61dd2186957 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -339,7 +339,7 @@ |Toyota|Sienna 2024-25|Any|[Not compatible](#can-bus-security)| |Toyota|Tundra 2022-25|Any|[Not compatible](#can-bus-security)| |Toyota|Venza 2021-25|Any|[Not compatible](#can-bus-security)| -|Toyota|Yaris (Non-US only) 2023|All|[Community](#community)| +|Toyota|Yaris (Non-US only) 2020, 2023|All|[Community](#community)| |Volkswagen|Arteon 2018-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| |Volkswagen|Arteon eHybrid 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| |Volkswagen|Arteon R 2020-23|Adaptive Cruise Control (ACC) & Lane Assist|[Upstream](#upstream)| From 0f2c2b93540a260f90ebe80558d165b818ca7ba5 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Fri, 22 Aug 2025 01:37:55 -0400 Subject: [PATCH 37/53] fix logical error found in road testing --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index 02ebb9bc57a..caca68adcf1 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -225,7 +225,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if candidate in HONDA_BOSCH_CANFD: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.BOSCH_CANFD.value - if ret.flags & HondaFlags.NIDEC & HondaFlags.HYBRID: + if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID): ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value # min speed to enable ACC. if car can do stop and go, then set enabling speed From fdce78739d1c4eabf1672e29739f57bc9e3b2e98 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 24 Aug 2025 00:35:59 -0400 Subject: [PATCH 38/53] switch value to flags --- opendbc/car/honda/hondacan.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/opendbc/car/honda/hondacan.py b/opendbc/car/honda/hondacan.py index 065dd9d2bfb..3a5b51df81c 100644 --- a/opendbc/car/honda/hondacan.py +++ b/opendbc/car/honda/hondacan.py @@ -1,7 +1,6 @@ from opendbc.car import CanBusBase from opendbc.car.common.conversions import Conversions as CV -from opendbc.car.honda.values import HondaFlags, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CAR, HONDA_HYBRID, \ - CarControllerParams +from opendbc.car.honda.values import HondaFlags, HONDA_BOSCH, HONDA_BOSCH_RADARLESS, HONDA_BOSCH_CANFD, CAR, CarControllerParams # CAN bus layout with relay # 0 = ACC-CAN - radar side @@ -46,7 +45,7 @@ def body(self) -> int: return self.offset -def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_cancel_cmd, fcw, car_fingerprint, stock_brake): +def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_cancel_cmd, fcw, CP, stock_brake): # TODO: do we loose pressure if we keep pump off for long? brakelights = apply_brake > 0 brake_rq = apply_brake > 0 @@ -65,10 +64,10 @@ def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_ca "AEB_REQ_2": 0, "AEB_STATUS": 0, } - if car_fingerprint in HONDA_HYBRID: +if (CP.flags & HondaFlags.HYBRID): values.update({ "COMPUTER_BRAKE_HYBRID": apply_brake, - "BRAKE_PUMP_REQUEST_HYBRID": apply_brake, + "BRAKE_PUMP_REQUEST_HYBRID": (apply_brake > 0), }) else: values.update({ From 23c0427fa8a08bb3b3a8f3e22acb72e641f378a3 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 24 Aug 2025 00:36:42 -0400 Subject: [PATCH 39/53] send CP instead --- opendbc/car/honda/carcontroller.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/carcontroller.py b/opendbc/car/honda/carcontroller.py index 8345ef68db4..dbeacefdcde 100644 --- a/opendbc/car/honda/carcontroller.py +++ b/opendbc/car/honda/carcontroller.py @@ -221,7 +221,7 @@ def update(self, CC, CS, now_nanos): pcm_override = True can_sends.append(hondacan.create_brake_command(self.packer, self.CAN, apply_brake, pump_on, pcm_override, pcm_cancel_cmd, fcw_display, - self.CP.carFingerprint, CS.stock_brake)) + self.CP, CS.stock_brake)) self.apply_brake_last = apply_brake self.brake = apply_brake / self.params.NIDEC_BRAKE_MAX From 309c1ca7c16e405f5caa3845f1d07b4b2190fab5 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 24 Aug 2025 00:37:15 -0400 Subject: [PATCH 40/53] remove honda_hybrid values --- opendbc/car/honda/values.py | 1 - 1 file changed, 1 deletion(-) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index e944c00eefe..98499689659 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -343,7 +343,6 @@ class CAR(Platforms): HONDA_BOSCH = CAR.with_flags(HondaFlags.BOSCH) HONDA_BOSCH_RADARLESS = CAR.with_flags(HondaFlags.BOSCH_RADARLESS) HONDA_BOSCH_CANFD = CAR.with_flags(HondaFlags.BOSCH_CANFD) -HONDA_HYBRID = CAR.with_flags(HondaFlags.HYBRID) DBC = CAR.create_dbc_map() From 00f6a19d3de2668d85e41dc23a08f22f13d10182 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sun, 24 Aug 2025 00:41:26 -0400 Subject: [PATCH 41/53] fix indent --- opendbc/car/honda/hondacan.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/hondacan.py b/opendbc/car/honda/hondacan.py index 3a5b51df81c..0245fe705b7 100644 --- a/opendbc/car/honda/hondacan.py +++ b/opendbc/car/honda/hondacan.py @@ -64,7 +64,7 @@ def create_brake_command(packer, CAN, apply_brake, pump_on, pcm_override, pcm_ca "AEB_REQ_2": 0, "AEB_STATUS": 0, } -if (CP.flags & HondaFlags.HYBRID): + if (CP.flags & HondaFlags.HYBRID): values.update({ "COMPUTER_BRAKE_HYBRID": apply_brake, "BRAKE_PUMP_REQUEST_HYBRID": (apply_brake > 0), From 2e77a5ea9e460898a52066c74101281e64181d72 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Wed, 27 Aug 2025 01:16:04 -0400 Subject: [PATCH 42/53] update aeb to detect hybrids --- opendbc/car/honda/carstate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 5a7e8350dbf..9e335e92253 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -186,7 +186,10 @@ def update(self, can_parsers) -> structs.CarState: if self.CP.carFingerprint not in HONDA_BOSCH_RADARLESS: ret.stockAeb = (not self.CP.openpilotLongitudinalControl) and bool(cp.vl["ACC_CONTROL"]["AEB_STATUS"] and cp.vl["ACC_CONTROL"]["ACCEL_COMMAND"] < -1e-5) else: - ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"]["COMPUTER_BRAKE"] > 1e-5) + if self.CP.flags & HondaFlags.HYBRID: + ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"]["COMPUTER_BRAKE_HYBRID"] > 1e-5) + else: + ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"]["COMPUTER_BRAKE"] > 1e-5) self.acc_hud = False self.lkas_hud = False From 79613bbee091a44800d16897f08f8f596146b4b7 Mon Sep 17 00:00:00 2001 From: Jason Young Date: Sat, 6 Sep 2025 16:11:45 -0400 Subject: [PATCH 43/53] revert docs touch --- docs/CARS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CARS.md b/docs/CARS.md index c9fa390efe2..88cb70a66ac 100644 --- a/docs/CARS.md +++ b/docs/CARS.md @@ -440,4 +440,4 @@ Toyota, and the GM Global B platform. All the cars that openpilot supports use a [CAN bus](https://en.wikipedia.org/wiki/CAN_bus) for communication between all the car's computers, however a CAN bus isn't the only way that the computers in your car can communicate. Most, if not all, vehicles from the following manufacturers use [FlexRay](https://en.wikipedia.org/wiki/FlexRay) instead of a CAN bus: **BMW, Mercedes, Audi, Land Rover, and some Volvo**. These cars -may one day be supported, but we have no immediate plans to support FlexRay. +may one day be supported, but we have no immediate plans to support FlexRay. \ No newline at end of file From a0d8053630eaeb0c248cc992c5928b13543b5961 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sat, 6 Sep 2025 23:16:23 -0400 Subject: [PATCH 44/53] add hybrid-alt-brakehold --- opendbc/car/honda/values.py | 1 + 1 file changed, 1 insertion(+) diff --git a/opendbc/car/honda/values.py b/opendbc/car/honda/values.py index 57ad8be4506..3196d4125f1 100644 --- a/opendbc/car/honda/values.py +++ b/opendbc/car/honda/values.py @@ -78,6 +78,7 @@ class HondaFlags(IntFlag): # 512 is available for future use ALLOW_MANUAL_TRANS = 1024 HYBRID = 2048 + HYBRID_ALT_BRAKEHOLD = 4096 # Some Nidec Hybrids use a different brakehold # Car button codes From 6b6684c86c14cf8d677303f90064aa61d6a1f6fe Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sat, 6 Sep 2025 23:20:40 -0400 Subject: [PATCH 45/53] add hybrid_alt_brakehold --- opendbc/car/honda/interface.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index 9e7ef3e8563..5083e6e9113 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -194,9 +194,10 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.RADARLESS.value if candidate in HONDA_BOSCH_CANFD: ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.BOSCH_CANFD.value - if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID): ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value + if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID) and (0x223 in fingerprint[CAN.pt]): + ret.flags |= HondaFlags.HYBRID_ALT_BRAKEHOLD.value # min speed to enable ACC. if car can do stop and go, then set enabling speed # to a negative value, so it won't matter. Otherwise, add 0.5 mph margin to not From a644963a4aee931afa7bef07942f9c22bc0dfce7 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sat, 6 Sep 2025 23:26:07 -0400 Subject: [PATCH 46/53] new brakehold signal --- opendbc/car/honda/carstate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 81de8e74be4..a54abec74b8 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -34,6 +34,7 @@ def __init__(self, CP): self.car_state_scm_msg = "SCM_BUTTONS" self.brake_error_msg = "HYBRID_BRAKE_ERROR" if CP.flags & HondaFlags.HYBRID else "STANDSTILL" + self.brakehold_msg = "BRAKE_HOLD_HYBRID_ALT" if CP.flags & HondaFlags.HYBRID_ALT_BRAKEHOLD else "VSA_STATUS" self.steer_status_values = defaultdict(lambda: "UNKNOWN", can_define.dv["STEER_STATUS"]["STEER_STATUS"]) @@ -125,7 +126,7 @@ def update(self, can_parsers) -> structs.CarState: ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_stalk( 250, cp.vl["SCM_FEEDBACK"]["LEFT_BLINKER"], cp.vl["SCM_FEEDBACK"]["RIGHT_BLINKER"]) - ret.brakeHoldActive = cp.vl["VSA_STATUS"]["BRAKE_HOLD_ACTIVE"] == 1 + ret.brakeHoldActive = cp.vl[self.brakehold_msg]["BRAKE_HOLD_ACTIVE"] == 1 ret.parkingBrake = bool(cp.vl[self.car_state_scm_msg]["PARKING_BRAKE_ON"]) if self.CP.transmissionType == TransmissionType.manual: From 70b4126432a4aa86f0be69b78c9d581d133d2995 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Sat, 6 Sep 2025 23:28:10 -0400 Subject: [PATCH 47/53] whitespace fix --- opendbc/car/honda/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index 5083e6e9113..ddb1600fdb7 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -197,7 +197,7 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID): ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID) and (0x223 in fingerprint[CAN.pt]): - ret.flags |= HondaFlags.HYBRID_ALT_BRAKEHOLD.value + ret.flags |= HondaFlags.HYBRID_ALT_BRAKEHOLD.value # min speed to enable ACC. if car can do stop and go, then set enabling speed # to a negative value, so it won't matter. Otherwise, add 0.5 mph margin to not From c44f7fadb3b729cf11904b0e8434e67025512db0 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Mon, 8 Sep 2025 10:01:38 -0400 Subject: [PATCH 48/53] move HYBRID_ALT_BRAKEHOLD flag to regular location --- opendbc/car/honda/interface.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/opendbc/car/honda/interface.py b/opendbc/car/honda/interface.py index ddb1600fdb7..003722befc7 100755 --- a/opendbc/car/honda/interface.py +++ b/opendbc/car/honda/interface.py @@ -66,6 +66,9 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo if 0x184 in fingerprint[CAN.pt]: ret.flags |= HondaFlags.HYBRID.value + if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID) and (0x223 in fingerprint[CAN.pt]): + ret.flags |= HondaFlags.HYBRID_ALT_BRAKEHOLD.value + if ret.flags & HondaFlags.ALLOW_MANUAL_TRANS and all(msg not in fingerprint[CAN.pt] for msg in (0x191, 0x1A3)): # Manual transmission support for allowlisted cars only, to prevent silent fall-through on auto-detection failures ret.transmissionType = TransmissionType.manual @@ -196,8 +199,6 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.BOSCH_CANFD.value if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID): ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_HYBRID.value - if (ret.flags & HondaFlags.NIDEC) and (ret.flags & HondaFlags.HYBRID) and (0x223 in fingerprint[CAN.pt]): - ret.flags |= HondaFlags.HYBRID_ALT_BRAKEHOLD.value # min speed to enable ACC. if car can do stop and go, then set enabling speed # to a negative value, so it won't matter. Otherwise, add 0.5 mph margin to not From 28e4a4cce8e7b689fecff9a306d0b36d66d5d2f6 Mon Sep 17 00:00:00 2001 From: mvl-boston Date: Mon, 8 Sep 2025 14:37:36 -0400 Subject: [PATCH 49/53] workaround to block cruise when on brake hold --- opendbc/car/honda/carstate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 13ee0df6868..6a056dce453 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -130,6 +130,9 @@ def update(self, can_parsers) -> structs.CarState: ret.brakeHoldActive = cp.vl[self.brakehold_msg]["BRAKE_HOLD_ACTIVE"] == 1 ret.parkingBrake = bool(cp.vl[self.car_state_scm_msg]["PARKING_BRAKE_ON"]) + if (self.CP.flags & HondaFlags.NIDEC) and (self.CP.flags & HondaFlags.HYBRID): + ret.blockPcmEnable = ret.brakeHoldActive # Nidec Hybrids fault if resuming cruise from brake hold + if self.CP.transmissionType == TransmissionType.manual: ret.gearShifter = GearShifter.reverse if bool(cp.vl["SCM_FEEDBACK"]["REVERSE_LIGHT"]) else GearShifter.drive else: From 42ad632e4e8bf2f0b0b58918056477e697319462 Mon Sep 17 00:00:00 2001 From: MVL Date: Tue, 30 Sep 2025 09:43:07 -0400 Subject: [PATCH 50/53] brake command refactor --- opendbc/car/honda/carstate.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 905ee7164d6..8ada487a234 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -201,10 +201,8 @@ def update(self, can_parsers) -> structs.CarState: if self.CP.carFingerprint not in HONDA_BOSCH_RADARLESS: ret.stockAeb = (not self.CP.openpilotLongitudinalControl) and bool(cp.vl["ACC_CONTROL"]["AEB_STATUS"] and cp.vl["ACC_CONTROL"]["ACCEL_COMMAND"] < -1e-5) else: - if self.CP.flags & HondaFlags.HYBRID: - ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"]["COMPUTER_BRAKE_HYBRID"] > 1e-5) - else: - ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"]["COMPUTER_BRAKE"] > 1e-5) + brake_cmd = ""COMPUTER_BRAKE_HYBRID"" if self.CP.flags & HondaFlags.HYBRID else "COMPUTER_BRAKE" + ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"][brake_cmd] > 1e-5) self.acc_hud = False self.lkas_hud = False From 2d1864ae4f0d417342a56a2d915759903148d633 Mon Sep 17 00:00:00 2001 From: MVL Date: Tue, 30 Sep 2025 09:44:49 -0400 Subject: [PATCH 51/53] rename to CanPackerSafety --- opendbc/safety/tests/test_honda.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/safety/tests/test_honda.py b/opendbc/safety/tests/test_honda.py index 97c7c543fad..251d6788232 100755 --- a/opendbc/safety/tests/test_honda.py +++ b/opendbc/safety/tests/test_honda.py @@ -366,7 +366,7 @@ class TestHondaNidecPcmHybridSafety(TestHondaNidecPcmAltSafety): """ def setUp(self): - self.packer = CANPackerPanda("acura_ilx_2016_can_generated") + self.packer = CANPackerSafety("acura_ilx_2016_can_generated") self.safety = libsafety_py.libsafety self.safety.set_safety_hooks(CarParams.SafetyModel.hondaNidec, HondaSafetyFlags.NIDEC_ALT | HondaSafetyFlags.NIDEC_HYBRID) self.safety.init_tests() From 5d156d8c4b951b2e9cb50faf8f720171e62fe4a2 Mon Sep 17 00:00:00 2001 From: MVL Date: Tue, 30 Sep 2025 09:59:50 -0400 Subject: [PATCH 52/53] additional rename from panda to safety --- opendbc/safety/tests/test_honda.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/safety/tests/test_honda.py b/opendbc/safety/tests/test_honda.py index 251d6788232..d6bb456ef7f 100755 --- a/opendbc/safety/tests/test_honda.py +++ b/opendbc/safety/tests/test_honda.py @@ -373,7 +373,7 @@ def setUp(self): def _send_brake_msg(self, brake, aeb_req=0, bus=0): values = {"COMPUTER_BRAKE_HYBRID": brake, "AEB_REQ_1": aeb_req} - return self.packer.make_can_msg_panda("BRAKE_COMMAND", bus, values) + return self.packer.make_can_msg_safety("BRAKE_COMMAND", bus, values) # ********************* Honda Bosch ********************** From f1e3867e7ac944103db016b35a341bced33d9866 Mon Sep 17 00:00:00 2001 From: MVL Date: Tue, 30 Sep 2025 10:03:43 -0400 Subject: [PATCH 53/53] typo fix --- opendbc/car/honda/carstate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opendbc/car/honda/carstate.py b/opendbc/car/honda/carstate.py index 8ada487a234..d980feb1959 100644 --- a/opendbc/car/honda/carstate.py +++ b/opendbc/car/honda/carstate.py @@ -201,7 +201,7 @@ def update(self, can_parsers) -> structs.CarState: if self.CP.carFingerprint not in HONDA_BOSCH_RADARLESS: ret.stockAeb = (not self.CP.openpilotLongitudinalControl) and bool(cp.vl["ACC_CONTROL"]["AEB_STATUS"] and cp.vl["ACC_CONTROL"]["ACCEL_COMMAND"] < -1e-5) else: - brake_cmd = ""COMPUTER_BRAKE_HYBRID"" if self.CP.flags & HondaFlags.HYBRID else "COMPUTER_BRAKE" + brake_cmd = "COMPUTER_BRAKE_HYBRID" if self.CP.flags & HondaFlags.HYBRID else "COMPUTER_BRAKE" ret.stockAeb = bool(cp_cam.vl["BRAKE_COMMAND"]["AEB_REQ_1"] and cp_cam.vl["BRAKE_COMMAND"][brake_cmd] > 1e-5) self.acc_hud = False