这是indexloc提供的服务,不要输入任何密码
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
d9fdcb0
docs: Scheduled auto-update CARS.md
mvl-boston Aug 14, 2025
76d9929
rename hybrid brake signals
mvl-boston Aug 17, 2025
64f3c8f
add hybrid brake error
mvl-boston Aug 17, 2025
a1e60b5
moved hybrid brake error to honda common
mvl-boston Aug 17, 2025
4c00d0d
autodetect hybrid signal
mvl-boston Aug 17, 2025
269b728
add hybrid values
mvl-boston Aug 17, 2025
31287ee
add hybrid fault status
mvl-boston Aug 17, 2025
2a31c74
add honda hybrid
mvl-boston Aug 17, 2025
5e7e0cf
add honda hybrid control
mvl-boston Aug 17, 2025
dd36b0b
update hybrid brake pump
mvl-boston Aug 17, 2025
2a323b4
Revert "add honda hybrid control"
mvl-boston Aug 17, 2025
054a88a
nidec hybrid safety
mvl-boston Aug 17, 2025
7bf609e
add test coverage for hybrid brake
mvl-boston Aug 17, 2025
98cec79
adding nidec hybrid variable
mvl-boston Aug 17, 2025
69eec91
adding initial hybrid values
mvl-boston Aug 17, 2025
9bd255b
merge master
mvl-boston Aug 17, 2025
97c8f3d
add remaining hybrid_allowed cars
mvl-boston Aug 17, 2025
b307b42
update value to consistent ALLOW_HYBRD
mvl-boston Aug 17, 2025
1098aab
cleanup nidec hybrid
mvl-boston Aug 17, 2025
fe0ceba
typo fix
mvl-boston Aug 17, 2025
2a57957
import HONDA_HYBRID
mvl-boston Aug 17, 2025
e14034c
formatting
mvl-boston Aug 17, 2025
e9e6ea8
whitespace fix
mvl-boston Aug 17, 2025
4c2388a
add hybrid flag autodetection
mvl-boston Aug 18, 2025
a8a0232
adding hybrid flag
mvl-boston Aug 18, 2025
bf2b0ca
adding common hybrid brake error signal
mvl-boston Aug 18, 2025
543740c
remove brake error - moved to honda common
mvl-boston Aug 18, 2025
4e11301
update brake error if hybrid
mvl-boston Aug 18, 2025
98d4dd5
Merge branch 'commaai:master' into hybrid-brake-error
mvl-boston Aug 18, 2025
458c195
Merge branch 'master' into hybrid-long-control
mvl-boston Aug 18, 2025
9b20460
test_order_of_operations
mvl-boston Aug 18, 2025
f2b77e0
try original DBC
mvl-boston Aug 18, 2025
22dd88d
Merge branch 'master' into hybrid-brake-error
mvl-boston Aug 19, 2025
f303409
whitespace fix
mvl-boston Aug 19, 2025
74a9bca
Merge branch 'hybrid-long-control' into delete-hybrid-copy
mvl-boston Aug 19, 2025
a7c39a9
merge hybrid-brake-error as baseline
mvl-boston Aug 19, 2025
03338b5
remove Hybrid model gating
mvl-boston Aug 19, 2025
a54a069
formatting fixes
mvl-boston Aug 19, 2025
095c98c
revert model gating
mvl-boston Aug 19, 2025
f1dc272
Revert "docs: Scheduled auto-update CARS.md"
mvl-boston Aug 19, 2025
19ddbcb
backing out unintended auto-model chages
mvl-boston Aug 19, 2025
2574de3
backing out unintended auto-model chages
mvl-boston Aug 19, 2025
0f2c2b9
fix logical error found in road testing
mvl-boston Aug 22, 2025
df3fb4c
Merge branch 'master' into hybrid-long-control
mvl-boston Aug 22, 2025
fdce787
switch value to flags
mvl-boston Aug 24, 2025
23c0427
send CP instead
mvl-boston Aug 24, 2025
309c1ca
remove honda_hybrid values
mvl-boston Aug 24, 2025
00f6a19
fix indent
mvl-boston Aug 24, 2025
74980f7
Merge branch 'master' into hybrid-long-control
mvl-boston Aug 24, 2025
2e77a5e
update aeb to detect hybrids
mvl-boston Aug 27, 2025
cf630a4
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 4, 2025
1bd2fc0
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 6, 2025
4f086db
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 6, 2025
67a5e94
Merge branch 'master' of ssh://github.com/commaai/opendbc into hybrid…
jyoung8607 Sep 6, 2025
79613bb
revert docs touch
jyoung8607 Sep 6, 2025
c4ca3c8
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 6, 2025
a0d8053
add hybrid-alt-brakehold
mvl-boston Sep 7, 2025
7fd3054
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 7, 2025
6b6684c
add hybrid_alt_brakehold
mvl-boston Sep 7, 2025
a644963
new brakehold signal
mvl-boston Sep 7, 2025
70b4126
whitespace fix
mvl-boston Sep 7, 2025
338035f
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 8, 2025
c44f7fa
move HYBRID_ALT_BRAKEHOLD flag to regular location
mvl-boston Sep 8, 2025
f927083
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 8, 2025
28e4a4c
workaround to block cruise when on brake hold
mvl-boston Sep 8, 2025
9596369
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 8, 2025
71478ef
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 13, 2025
71719c6
Merge branch 'master' into hybrid-long-control
mvl-boston Sep 30, 2025
42ad632
brake command refactor
mvl-boston Sep 30, 2025
2d1864a
rename to CanPackerSafety
mvl-boston Sep 30, 2025
5d156d8
additional rename from panda to safety
mvl-boston Sep 30, 2025
f1e3867
typo fix
mvl-boston Sep 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion opendbc/car/honda/carcontroller.py
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,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, alert_fcw,
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

Expand Down
9 changes: 7 additions & 2 deletions opendbc/car/honda/carstate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"])

Expand Down Expand Up @@ -137,9 +138,12 @@ 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.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:
Expand Down Expand Up @@ -197,7 +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:
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
Expand Down
14 changes: 11 additions & 3 deletions opendbc/car/honda/hondacan.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,13 @@ 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
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,
Expand All @@ -67,6 +65,16 @@ 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):
values.update({
"COMPUTER_BRAKE_HYBRID": apply_brake,
"BRAKE_PUMP_REQUEST_HYBRID": (apply_brake > 0),
})
else:
values.update({
"COMPUTER_BRAKE": apply_brake,
"BRAKE_PUMP_REQUEST": pump_on,
})
return packer.make_can_msg("BRAKE_COMMAND", CAN.pt, values)


Expand Down
5 changes: 5 additions & 0 deletions opendbc/car/honda/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -208,6 +211,8 @@ 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

# 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
Expand Down
2 changes: 2 additions & 0 deletions opendbc/car/honda/values.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class HondaSafetyFlags(IntFlag):
NIDEC_ALT = 4
RADARLESS = 8
BOSCH_CANFD = 16
NIDEC_HYBRID = 32


class HondaFlags(IntFlag):
Expand All @@ -79,6 +80,7 @@ class HondaFlags(IntFlag):
ALLOW_MANUAL_TRANS = 1024
HYBRID = 2048
BOSCH_TJA_CONTROL = 4096
HYBRID_ALT_BRAKEHOLD = 8192 # Some Nidec Hybrids use a different brakehold


# Car button codes
Expand Down
20 changes: 17 additions & 3 deletions opendbc/safety/modes/honda.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -147,7 +148,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
Expand Down Expand Up @@ -199,7 +207,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;
}
Expand Down Expand Up @@ -280,6 +292,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;
Expand All @@ -293,7 +306,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[] = {
Expand Down
16 changes: 16 additions & 0 deletions opendbc/safety/tests/test_honda.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,22 @@ def _button_msg(self, buttons, main_on=False, bus=None):
return self.packer.make_can_msg_safety("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 = 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()

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_safety("BRAKE_COMMAND", bus, values)


# ********************* Honda Bosch **********************


Expand Down