Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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/carstate.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ def update(self, can_parsers) -> structs.CarState:
else:
ret.cruiseState.speed = cp.vl["CRUISE"]["CRUISE_SPEED_PCM"] * CV.KPH_TO_MS

if self.CP.flags & HondaFlags.BOSCH_ALT_BRAKE:
if self.CP.flags & HondaFlags.BOSCH_ELECTRIC_BRAKE_BOOSTER:
ret.brakePressed = cp.vl["BRAKE_MODULE"]["BRAKE_PRESSED"] != 0
else:
# brake switch has shown some single time step noise, so only considered when
Expand Down
8 changes: 4 additions & 4 deletions opendbc/car/honda/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,11 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_lo
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)

# These cars use alternate user brake msg (0x1BE)
if 0x1BE in fingerprint[CAN.pt] and candidate in (CAR.HONDA_ACCORD, CAR.HONDA_HRV_3G, *HONDA_BOSCH_CANFD):
ret.flags |= HondaFlags.BOSCH_ALT_BRAKE.value
if 0x1BE in fingerprint[CAN.pt]:
ret.flags |= HondaFlags.BOSCH_ELECTRIC_BRAKE_BOOSTER.value

if ret.flags & HondaFlags.BOSCH_ALT_BRAKE:
ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.ALT_BRAKE.value
if ret.flags & HondaFlags.BOSCH_ELECTRIC_BRAKE_BOOSTER:
ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.ELECTRIC_BRAKE_BOOSTER.value
if candidate in HONDA_NIDEC_ALT_SCM_MESSAGES:
ret.safetyConfigs[-1].safetyParam |= HondaSafetyFlags.NIDEC_ALT.value
if ret.openpilotLongitudinalControl and candidate in HONDA_BOSCH:
Expand Down
8 changes: 3 additions & 5 deletions opendbc/car/honda/values.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def __init__(self, CP):


class HondaSafetyFlags(IntFlag):
ALT_BRAKE = 1
ELECTRIC_BRAKE_BOOSTER = 1
BOSCH_LONG = 2
NIDEC_ALT = 4
RADARLESS = 8
Expand All @@ -62,7 +62,7 @@ class HondaFlags(IntFlag):
# Detected flags
# Bosch models with alternate set of LKAS_HUD messages
BOSCH_EXT_HUD = 1
BOSCH_ALT_BRAKE = 2
BOSCH_ELECTRIC_BRAKE_BOOSTER = 2

# Static flags
BOSCH = 4
Expand Down Expand Up @@ -209,7 +209,6 @@ class CAR(Platforms):
# steerRatio: 12.3 is spec end-to-end
CarSpecs(mass=3410 * CV.LB_TO_KG, wheelbase=2.66, steerRatio=16.0, centerToFrontRatio=0.41, tireStiffnessFactor=0.677),
{Bus.pt: 'honda_civic_hatchback_ex_2017_can_generated', Bus.body: 'honda_crv_ex_2017_body_generated'},
flags=HondaFlags.BOSCH_ALT_BRAKE,
)
HONDA_CRV_6G = HondaBoschCANFDPlatformConfig(
[
Expand Down Expand Up @@ -240,7 +239,6 @@ class CAR(Platforms):
[HondaCarDocs("Acura RDX 2019-21", "All", min_steer_speed=3. * CV.MPH_TO_MS)],
CarSpecs(mass=4068 * CV.LB_TO_KG, wheelbase=2.75, steerRatio=11.95, centerToFrontRatio=0.41, tireStiffnessFactor=0.677), # as spec
{Bus.pt: 'acura_rdx_2020_can_generated'},
flags=HondaFlags.BOSCH_ALT_BRAKE,
)
HONDA_INSIGHT = HondaBoschPlatformConfig(
[HondaCarDocs("Honda Insight 2019-22", "All", min_steer_speed=3. * CV.MPH_TO_MS)],
Expand Down Expand Up @@ -269,7 +267,7 @@ class CAR(Platforms):
[HondaCarDocs("Honda Odyssey 2021-26", "All", min_steer_speed=70. * CV.KPH_TO_MS)],
CarSpecs(mass=4590 * CV.LB_TO_KG, wheelbase=3.00, steerRatio=19.4, centerToFrontRatio=0.41),
{Bus.pt: 'acura_rdx_2020_can_generated'},
flags=HondaFlags.BOSCH_ALT_BRAKE | HondaFlags.BOSCH_ALT_RADAR,
flags=HondaFlags.BOSCH_ALT_RADAR,
)
ACURA_TLX_2G = HondaBoschPlatformConfig(
[HondaCarDocs("Acura TLX 2021", "All")],
Expand Down
42 changes: 21 additions & 21 deletions opendbc/safety/modes/honda.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
HONDA_COMMON_NO_SCM_FEEDBACK_RX_CHECKS(pt_bus) \
{.msg = {{0x326, (pt_bus), 8, 10U, .max_counter = 3U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, /* SCM_FEEDBACK */ \

// Alternate brake message is used on some Honda Bosch, and Honda Bosch radarless (where PT bus is 0)
#define HONDA_ALT_BRAKE_ADDR_CHECK(pt_bus) \
// Electric brake booster message is used on some Honda Bosch, and Honda Bosch radarless (where PT bus is 0)
#define HONDA_ELEC_BRAKE_ADDR_CHECK(pt_bus) \
{.msg = {{0x1BE, (pt_bus), 3, 50U, .max_counter = 3U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, /* BRAKE_MODULE */ \

enum {
Expand All @@ -27,7 +27,7 @@ enum {

static int honda_brake = 0;
static bool honda_brake_switch_prev = false;
static bool honda_alt_brake_msg = false;
static bool honda_elec_brake_msg = false;
static bool honda_fwd_brake = false;
static bool honda_bosch_long = false;
static bool honda_bosch_radarless = false;
Expand Down Expand Up @@ -120,13 +120,13 @@ static void honda_rx_hook(const CANPacket_t *msg) {
cruise_button_prev = button;
}

// user brake signal on 0x17C reports applied brake from computer brake on accord
// and crv, which prevents the usual brake safety from working correctly. these
// cars have a signal on 0x1BE which only detects user's brake being applied so
// in these cases, this is used instead.
// most hondas: 0x17C
// accord, crv: 0x1BE
if (honda_alt_brake_msg) {
// user brake signal on 0x17C reports applied brake from computer brake on models
// with an electric brake booster, which prevents the usual brake safety from working
// correctly. these cars have a signal on 0x1BE which only detects user's brake being
// applied so in these cases, this is used instead.
// without electric brake booster: 0x17C
// with electric brake booster: 0x1BE
if (honda_elec_brake_msg) {
if (msg->addr == 0x1BEU) {
brake_pressed = GET_BIT(msg, 4U);
}
Expand Down Expand Up @@ -285,7 +285,7 @@ static safety_config honda_nidec_init(uint16_t param) {
honda_brake = 0;
honda_brake_switch_prev = false;
honda_fwd_brake = false;
honda_alt_brake_msg = false;
honda_elec_brake_msg = false;
honda_bosch_long = false;
honda_bosch_radarless = false;
honda_bosch_canfd = false;
Expand Down Expand Up @@ -334,7 +334,7 @@ static safety_config honda_bosch_init(uint16_t param) {
static CanMsg HONDA_CANFD_TX_MSGS[] = {{0xE4, 0, 5, .check_relay = true}, {0x296, 0, 4, .check_relay = false}, {0x33D, 0, 8, .check_relay = true}};


const uint16_t HONDA_PARAM_ALT_BRAKE = 1;
const uint16_t HONDA_PARAM_ELEC_BRAKE = 1;
const uint16_t HONDA_PARAM_RADARLESS = 8;
const uint16_t HONDA_PARAM_BOSCH_CANFD = 16;

Expand All @@ -343,27 +343,27 @@ static safety_config honda_bosch_init(uint16_t param) {
HONDA_COMMON_RX_CHECKS(0)
};

static RxCheck honda_bosch_pt0_alt_brake_rx_checks[] = {
static RxCheck honda_bosch_pt0_elec_brake_rx_checks[] = {
HONDA_COMMON_RX_CHECKS(0)
HONDA_ALT_BRAKE_ADDR_CHECK(0)
HONDA_ELEC_BRAKE_ADDR_CHECK(0)
};

// Bosch has powertrain on bus 1, verified 0x1A6 does not exist
static RxCheck honda_bosch_pt1_rx_checks[] = {
HONDA_COMMON_RX_CHECKS(1)
};

static RxCheck honda_bosch_pt1_alt_brake_rx_checks[] = {
static RxCheck honda_bosch_pt1_elec_brake_rx_checks[] = {
HONDA_COMMON_RX_CHECKS(1)
HONDA_ALT_BRAKE_ADDR_CHECK(1)
HONDA_ELEC_BRAKE_ADDR_CHECK(1)
};

honda_hw = HONDA_BOSCH;
honda_brake_switch_prev = false;
honda_bosch_radarless = GET_FLAG(param, HONDA_PARAM_RADARLESS);
honda_bosch_canfd = GET_FLAG(param, HONDA_PARAM_BOSCH_CANFD);
// Checking for alternate brake override from safety parameter
honda_alt_brake_msg = GET_FLAG(param, HONDA_PARAM_ALT_BRAKE);
honda_elec_brake_msg = GET_FLAG(param, HONDA_PARAM_ELEC_BRAKE);

// radar disabled so allow gas/brakes
#ifdef ALLOW_DEBUG
Expand All @@ -373,14 +373,14 @@ static safety_config honda_bosch_init(uint16_t param) {

safety_config ret;
if (honda_bosch_radarless || honda_bosch_canfd) {
if (honda_alt_brake_msg) {
SET_RX_CHECKS(honda_bosch_pt0_alt_brake_rx_checks, ret);
if (honda_elec_brake_msg) {
SET_RX_CHECKS(honda_bosch_pt0_elec_brake_rx_checks, ret);
} else {
SET_RX_CHECKS(honda_bosch_pt0_rx_checks, ret);
}
} else {
if (honda_alt_brake_msg) {
SET_RX_CHECKS(honda_bosch_pt1_alt_brake_rx_checks, ret);
if (honda_elec_brake_msg) {
SET_RX_CHECKS(honda_bosch_pt1_elec_brake_rx_checks, ret);
} else {
SET_RX_CHECKS(honda_bosch_pt1_rx_checks, ret);
}
Expand Down
2 changes: 1 addition & 1 deletion opendbc/safety/tests/libsafety/libsafety_py.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class CANPacket:

void set_honda_fwd_brake(bool c);
bool get_honda_fwd_brake(void);
void set_honda_alt_brake_msg(bool c);
void set_honda_elec_brake_msg(bool c);
void set_honda_bosch_long(bool c);
int get_honda_hw(void);
""")
Expand Down
4 changes: 2 additions & 2 deletions opendbc/safety/tests/libsafety/safety.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,8 @@ int get_angle_meas_max(void){

// ***** car specific helpers *****

void set_honda_alt_brake_msg(bool c){
honda_alt_brake_msg = c;
void set_honda_elec_brake_msg(bool c){
honda_elec_brake_msg = c;
}

void set_honda_bosch_long(bool c){
Expand Down
42 changes: 21 additions & 21 deletions opendbc/safety/tests/test_honda.py
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ def setUp(self):
self.packer = CANPackerSafety("honda_civic_hatchback_ex_2017_can_generated")
self.safety = libsafety_py.libsafety

def _alt_brake_msg(self, brake):
def _elec_brake_msg(self, brake):
values = {"BRAKE_PRESSED": brake, "COUNTER": self.cnt_brake % 4}
self.__class__.cnt_brake += 1
return self.packer.make_can_msg_safety("BRAKE_MODULE", self.PT_BUS, values)
Expand All @@ -394,36 +394,36 @@ def test_spam_cancel_safety_check(self):
self.assertTrue(self._tx(self._button_msg(Btn.RESUME, bus=self.BUTTONS_BUS)))


class TestHondaBoschAltBrakeSafetyBase(TestHondaBoschSafetyBase):
class TestHondaBoschElecBrakeSafetyBase(TestHondaBoschSafetyBase):
"""
Base Bosch safety test class with an alternate brake message
Base Bosch safety test class with electric brake booster message
"""
def setUp(self):
super().setUp()
self.safety.set_safety_hooks(CarParams.SafetyModel.hondaBosch, HondaSafetyFlags.ALT_BRAKE)
self.safety.set_safety_hooks(CarParams.SafetyModel.hondaBosch, HondaSafetyFlags.ELECTRIC_BRAKE_BOOSTER)
self.safety.init_tests()

def _user_brake_msg(self, brake):
return self._alt_brake_msg(brake)
return self._elec_brake_msg(brake)

def test_alt_brake_rx_hook(self):
self.safety.set_honda_alt_brake_msg(1)
def test_elec_brake_rx_hook(self):
self.safety.set_honda_elec_brake_msg(1)
self.safety.set_controls_allowed(1)
msg = self._alt_brake_msg(0)
msg = self._elec_brake_msg(0)
self.assertTrue(self._rx(msg))
msg[0].data[2] = msg[0].data[2] & 0xF0 # invalidate checksum
self.assertFalse(self._rx(msg))
self.assertFalse(self.safety.get_controls_allowed())

def test_alt_disengage_on_brake(self):
self.safety.set_honda_alt_brake_msg(1)
def test_elec_disengage_on_brake(self):
self.safety.set_honda_elec_brake_msg(1)
self.safety.set_controls_allowed(1)
self._rx(self._alt_brake_msg(1))
self._rx(self._elec_brake_msg(1))
self.assertFalse(self.safety.get_controls_allowed())

self.safety.set_honda_alt_brake_msg(0)
self.safety.set_honda_elec_brake_msg(0)
self.safety.set_controls_allowed(1)
self._rx(self._alt_brake_msg(1))
self._rx(self._elec_brake_msg(1))
self.assertTrue(self.safety.get_controls_allowed())


Expand All @@ -437,9 +437,9 @@ def setUp(self):
self.safety.init_tests()


class TestHondaBoschAltBrakeSafety(HondaPcmEnableBase, TestHondaBoschAltBrakeSafetyBase):
class TestHondaBoschElecBrakeSafety(HondaPcmEnableBase, TestHondaBoschElecBrakeSafetyBase):
"""
Covers the Honda Bosch safety mode with stock longitudinal and an alternate brake message
Covers the Honda Bosch safety mode with stock longitudinal and an electric brake booster message
"""


Expand Down Expand Up @@ -525,14 +525,14 @@ def setUp(self):
self.safety.init_tests()


class TestHondaBoschRadarlessAltBrakeSafety(HondaPcmEnableBase, TestHondaBoschRadarlessSafetyBase, TestHondaBoschAltBrakeSafetyBase):
class TestHondaBoschRadarlessElecBrakeSafety(HondaPcmEnableBase, TestHondaBoschRadarlessSafetyBase, TestHondaBoschElecBrakeSafetyBase):
"""
Covers the Honda Bosch Radarless safety mode with stock longitudinal and an alternate brake message
Covers the Honda Bosch Radarless safety mode with stock longitudinal and an electric brake booster message
"""

def setUp(self):
super().setUp()
self.safety.set_safety_hooks(CarParams.SafetyModel.hondaBosch, HondaSafetyFlags.RADARLESS | HondaSafetyFlags.ALT_BRAKE)
self.safety.set_safety_hooks(CarParams.SafetyModel.hondaBosch, HondaSafetyFlags.RADARLESS | HondaSafetyFlags.ELECTRIC_BRAKE_BOOSTER)
self.safety.init_tests()


Expand Down Expand Up @@ -587,14 +587,14 @@ def setUp(self):
self.safety.init_tests()


class TestHondaBoschCANFDAltBrakeSafety(HondaPcmEnableBase, TestHondaBoschCANFDSafetyBase, TestHondaBoschAltBrakeSafetyBase):
class TestHondaBoschCANFDElecBrakeSafety(HondaPcmEnableBase, TestHondaBoschCANFDSafetyBase, TestHondaBoschElecBrakeSafetyBase):
"""
Covers the Honda Bosch CANFD safety mode with stock longitudinal and an alternate brake message
Covers the Honda Bosch CANFD safety mode with stock longitudinal and an electric brake booster message
"""

def setUp(self):
super().setUp()
self.safety.set_safety_hooks(CarParams.SafetyModel.hondaBosch, HondaSafetyFlags.BOSCH_CANFD | HondaSafetyFlags.ALT_BRAKE)
self.safety.set_safety_hooks(CarParams.SafetyModel.hondaBosch, HondaSafetyFlags.BOSCH_CANFD | HondaSafetyFlags.ELECTRIC_BRAKE_BOOSTER)
self.safety.init_tests()


Expand Down