From b1d4c8a83b5b653df10ec10c8eeddd29946dd597 Mon Sep 17 00:00:00 2001 From: Rick Lan Date: Tue, 27 May 2025 11:55:32 +0800 Subject: [PATCH] Toyota Long Filter - 2025-06-13 --- opendbc_repo/opendbc/car/toyota/values.py | 1 + opendbc_repo/opendbc/safety/modes/toyota.h | 27 +++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/opendbc_repo/opendbc/car/toyota/values.py b/opendbc_repo/opendbc/car/toyota/values.py index f10f7d0ce..2a9d25711 100644 --- a/opendbc_repo/opendbc/car/toyota/values.py +++ b/opendbc_repo/opendbc/car/toyota/values.py @@ -55,6 +55,7 @@ class ToyotaSafetyFlags(IntFlag): STOCK_LONGITUDINAL = (2 << 8) LTA = (4 << 8) SECOC = (8 << 8) + LONG_FILTER = (16 << 8) class ToyotaFlags(IntFlag): diff --git a/opendbc_repo/opendbc/safety/modes/toyota.h b/opendbc_repo/opendbc/safety/modes/toyota.h index 4c6ae77d6..d8d65d90d 100644 --- a/opendbc_repo/opendbc/safety/modes/toyota.h +++ b/opendbc_repo/opendbc/safety/modes/toyota.h @@ -31,6 +31,19 @@ /* ACC */ \ {0x343, 0, 8, .check_relay = true}, \ +#define TOYOTA_COMMON_LONG_TX_MSGS_FILTER \ + TOYOTA_COMMON_TX_MSGS \ + /* DSU bus 0 */ \ + {0x283, 0, 7, .check_relay = false}, {0x2E6, 0, 8, .check_relay = false}, {0x2E7, 0, 8, .check_relay = false}, {0x33E, 0, 7, .check_relay = false}, \ + {0x344, 0, 8, .check_relay = false}, {0x365, 0, 7, .check_relay = false}, {0x366, 0, 7, .check_relay = false}, {0x4CB, 0, 8, .check_relay = false}, \ + /* DSU bus 1 */ \ + {0x128, 1, 6, .check_relay = false}, {0x141, 1, 4, .check_relay = false}, {0x160, 1, 8, .check_relay = false}, {0x161, 1, 7, .check_relay = false}, \ + {0x470, 1, 4, .check_relay = false}, \ + /* PCS_HUD */ \ + {0x411, 0, 8, .check_relay = false}, \ + /* radar diagnostic address */ \ + {0x750, 0, 8, .check_relay = false}, \ + #define TOYOTA_COMMON_RX_CHECKS(lta) \ {.msg = {{ 0xaa, 0, 8, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true, .frequency = 83U}, { 0 }, { 0 }}}, \ {.msg = {{0x260, 0, 8, .ignore_counter = true, .ignore_quality_flag=!(lta), .frequency = 50U}, { 0 }, { 0 }}}, \ @@ -56,6 +69,7 @@ static bool toyota_alt_brake = false; static bool toyota_stock_longitudinal = false; static bool toyota_lta = false; static int toyota_dbc_eps_torque_factor = 100; // conversion factor for STEER_TORQUE_EPS in %: see dbc file +static bool toyota_long_filter = false; static uint32_t toyota_compute_checksum(const CANPacket_t *to_push) { int addr = GET_ADDR(to_push); @@ -345,6 +359,10 @@ static safety_config toyota_init(uint16_t param) { TOYOTA_COMMON_LONG_TX_MSGS }; + static const CanMsg TOYOTA_LONG_TX_MSGS_FILTER[] = { + TOYOTA_COMMON_LONG_TX_MSGS_FILTER + }; + // safety param flags // first byte is for EPS factor, second is for flags const uint32_t TOYOTA_PARAM_OFFSET = 8U; @@ -358,10 +376,13 @@ static safety_config toyota_init(uint16_t param) { toyota_secoc = GET_FLAG(param, TOYOTA_PARAM_SECOC); #endif + const uint32_t TOYOTA_PARAM_LONG_FILTER = 16U << TOYOTA_PARAM_OFFSET; + toyota_alt_brake = GET_FLAG(param, TOYOTA_PARAM_ALT_BRAKE); toyota_stock_longitudinal = GET_FLAG(param, TOYOTA_PARAM_STOCK_LONGITUDINAL); toyota_lta = GET_FLAG(param, TOYOTA_PARAM_LTA); toyota_dbc_eps_torque_factor = param & TOYOTA_EPS_FACTOR; + toyota_long_filter = GET_FLAG(param, TOYOTA_PARAM_LONG_FILTER); safety_config ret; if (toyota_stock_longitudinal) { @@ -371,7 +392,11 @@ static safety_config toyota_init(uint16_t param) { SET_TX_MSGS(TOYOTA_TX_MSGS, ret); } } else { - SET_TX_MSGS(TOYOTA_LONG_TX_MSGS, ret); + if (toyota_long_filter) { + SET_TX_MSGS(TOYOTA_LONG_TX_MSGS_FILTER, ret); + } else { + SET_TX_MSGS(TOYOTA_LONG_TX_MSGS, ret); + } } if (toyota_secoc) {