From f34275204e0008596463f485a294b8942ff429af Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Tue, 24 Oct 2023 10:07:08 -0700 Subject: [PATCH 01/11] subaru angle safety --- board/safety/safety_subaru.h | 46 ++++++++++++++++++++++++++++++------ python/__init__.py | 1 + tests/safety/common.py | 3 ++- tests/safety/test_subaru.py | 23 ++++++++++++++++++ 4 files changed, 65 insertions(+), 8 deletions(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index bfe800142a3..14d0b250577 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -20,6 +20,17 @@ const SteeringLimits SUBARU_STEERING_LIMITS = SUBARU_STEERING_LIMITS_GENERATOR(2047, 50, 70); const SteeringLimits SUBARU_GEN2_STEERING_LIMITS = SUBARU_STEERING_LIMITS_GENERATOR(1000, 40, 40); +const SteeringLimits SUBARU_ANGLE_STEERING_LIMITS = { + .angle_deg_to_can = 100, + .angle_rate_up_lookup = { + {0., 5., 15.}, + {5., .8, .15} + }, + .angle_rate_down_lookup = { + {0., 5., 15.}, + {5., 3.5, .4} + }, +}; const LongitudinalLimits SUBARU_LONG_LIMITS = { .min_gas = 808, // appears to be engine braking @@ -96,6 +107,11 @@ const CanMsg SUBARU_GEN2_TX_MSGS[] = { }; #define SUBARU_GEN2_TX_MSGS_LEN (sizeof(SUBARU_GEN2_TX_MSGS) / sizeof(SUBARU_GEN2_TX_MSGS[0])) +const CanMsg SUBARU_LKAS_ANGLE_TX_MSGS[] = { + SUBARU_COMMON_TX_MSGS(SUBARU_MAIN_BUS, MSG_SUBARU_ES_LKAS_ANGLE) +}; +#define SUBARU_LKAS_ANGLE_TX_MSGS_LEN (sizeof(SUBARU_LKAS_ANGLE_TX_MSGS) / sizeof(SUBARU_LKAS_ANGLE_TX_MSGS[0])) + const CanMsg SUBARU_GEN2_LONG_TX_MSGS[] = { SUBARU_COMMON_TX_MSGS(SUBARU_ALT_BUS, MSG_SUBARU_ES_LKAS) SUBARU_COMMON_LONG_TX_MSGS(SUBARU_ALT_BUS) @@ -118,9 +134,11 @@ addr_checks subaru_gen2_rx_checks = {subaru_gen2_addr_checks, SUBARU_GEN2_ADDR_C const uint16_t SUBARU_PARAM_GEN2 = 1; const uint16_t SUBARU_PARAM_LONGITUDINAL = 2; +const uint16_t SUBARU_PARAM_LKAS_ANGLE = 4; bool subaru_gen2 = false; bool subaru_longitudinal = false; +bool lkas_angle = false; static uint32_t subaru_get_checksum(CANPacket_t *to_push) { @@ -149,6 +167,7 @@ static int subaru_rx_hook(CANPacket_t *to_push) { if (valid) { const int bus = GET_BUS(to_push); const int alt_main_bus = subaru_gen2 ? SUBARU_ALT_BUS : SUBARU_MAIN_BUS; + const int stock_lkas_msg = lkas_angle ? MSG_SUBARU_ES_LKAS_ANGLE : MSG_SUBARU_ES_LKAS; int addr = GET_ADDR(to_push); if ((addr == MSG_SUBARU_Steering_Torque) && (bus == SUBARU_MAIN_BUS)) { @@ -190,7 +209,7 @@ static int subaru_rx_hook(CANPacket_t *to_push) { gas_pressed = GET_BYTE(to_push, 4) != 0U; } - generic_rx_checks((addr == MSG_SUBARU_ES_LKAS) && (bus == SUBARU_MAIN_BUS)); + generic_rx_checks((addr == stock_lkas_msg) && (bus == SUBARU_MAIN_BUS)); } return valid; } @@ -201,7 +220,9 @@ static int subaru_tx_hook(CANPacket_t *to_send) { int addr = GET_ADDR(to_send); bool violation = false; - if (subaru_gen2 && subaru_longitudinal) { + if (lkas_angle) { + tx = msg_allowed(to_send, SUBARU_LKAS_ANGLE_TX_MSGS, SUBARU_LKAS_ANGLE_TX_MSGS_LEN); + } else if (subaru_gen2 && subaru_longitudinal) { tx = msg_allowed(to_send, SUBARU_GEN2_LONG_TX_MSGS, SUBARU_GEN2_LONG_TX_MSGS_LEN); } else if (subaru_gen2) { tx = msg_allowed(to_send, SUBARU_GEN2_TX_MSGS, SUBARU_GEN2_TX_MSGS_LEN); @@ -222,6 +243,15 @@ static int subaru_tx_hook(CANPacket_t *to_send) { violation |= steer_torque_cmd_checks(desired_torque, steer_req, limits); } + if (addr == MSG_SUBARU_ES_LKAS_ANGLE) { + int desired_angle = (GET_BYTES(to_send, 5, 3) & 0x1FFFFU); + desired_angle = to_signed(desired_angle, 17); + bool lkas_request = GET_BIT(to_send, 12U); + + const SteeringLimits limits = SUBARU_ANGLE_STEERING_LIMITS; + violation |= steer_angle_cmd_checks(desired_angle, lkas_request, limits); + } + // check es_brake brake_pressure limits if (addr == MSG_SUBARU_ES_Brake) { int es_brake_pressure = GET_BYTES(to_send, 2, 2); @@ -274,10 +304,11 @@ static int subaru_fwd_hook(int bus_num, int addr) { if (bus_num == SUBARU_CAM_BUS) { // Global platform - bool block_lkas = ((addr == MSG_SUBARU_ES_LKAS) || - (addr == MSG_SUBARU_ES_DashStatus) || - (addr == MSG_SUBARU_ES_LKAS_State) || - (addr == MSG_SUBARU_ES_Infotainment)); + bool block_lkas = (((addr == MSG_SUBARU_ES_LKAS) && !lkas_angle) || + ((addr == MSG_SUBARU_ES_LKAS_ANGLE) && lkas_angle) || + (addr == MSG_SUBARU_ES_DashStatus) || + (addr == MSG_SUBARU_ES_LKAS_State) || + (addr == MSG_SUBARU_ES_Infotainment)); bool block_long = ((addr == MSG_SUBARU_ES_Brake) || (addr == MSG_SUBARU_ES_Distance) || @@ -296,7 +327,8 @@ static const addr_checks* subaru_init(uint16_t param) { subaru_gen2 = GET_FLAG(param, SUBARU_PARAM_GEN2); #ifdef ALLOW_DEBUG - subaru_longitudinal = GET_FLAG(param, SUBARU_PARAM_LONGITUDINAL); + lkas_angle = GET_FLAG(param, SUBARU_PARAM_LKAS_ANGLE); + subaru_longitudinal = GET_FLAG(param, SUBARU_PARAM_LONGITUDINAL) && !lkas_angle; #endif if (subaru_gen2) { diff --git a/python/__init__.py b/python/__init__.py index 6f99f4fa9ba..ce24cb88edd 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -218,6 +218,7 @@ class Panda: FLAG_SUBARU_GEN2 = 1 FLAG_SUBARU_LONG = 2 + FLAG_SUBARU_LKAS_ANGLE = 4 FLAG_NISSAN_ALT_EPS_BUS = 1 diff --git a/tests/safety/common.py b/tests/safety/common.py index 3077df2be2a..6ad9bec9f16 100644 --- a/tests/safety/common.py +++ b/tests/safety/common.py @@ -970,7 +970,8 @@ def test_tx_hook_on_wrong_safety_mode(self): if attr.startswith('TestToyota') and current_test.startswith('TestToyota'): continue if {attr, current_test}.issubset({'TestSubaruGen1TorqueStockLongitudinalSafety', 'TestSubaruGen2TorqueStockLongitudinalSafety', - 'TestSubaruGen1LongitudinalSafety', 'TestSubaruGen2LongitudinalSafety'}): + 'TestSubaruGen1AngleStockLongitudinalSafety', 'TestSubaruGen1LongitudinalSafety', + 'TestSubaruGen2LongitudinalSafety'}): continue if {attr, current_test}.issubset({'TestVolkswagenPqSafety', 'TestVolkswagenPqStockSafety', 'TestVolkswagenPqLongSafety'}): continue diff --git a/tests/safety/test_subaru.py b/tests/safety/test_subaru.py index bedb3cd0ae1..b8fa09db6b7 100755 --- a/tests/safety/test_subaru.py +++ b/tests/safety/test_subaru.py @@ -168,6 +168,29 @@ def _torque_cmd_msg(self, torque, steer_req=1): values = {"LKAS_Output": torque, "LKAS_Request": steer_req} return self.packer.make_can_msg_panda("ES_LKAS", SUBARU_MAIN_BUS, values) +class TestSubaruAngleSafetyBase(TestSubaruSafetyBase, common.AngleSteeringSafetyTest): + TX_MSGS = lkas_tx_msgs(SUBARU_MAIN_BUS, SubaruMsg.ES_LKAS_ANGLE) + RELAY_MALFUNCTION_ADDR = SubaruMsg.ES_LKAS_ANGLE + FWD_BLACKLISTED_ADDRS = fwd_blacklisted_addr(SubaruMsg.ES_LKAS_ANGLE) + + FLAGS = Panda.FLAG_SUBARU_LKAS_ANGLE + + ANGLE_RATE_BP = [0, 5, 15] + ANGLE_RATE_UP = [5, 0.8, 0.15] + ANGLE_RATE_DOWN = [5, 3.5, 0.4] + + def _angle_cmd_msg(self, angle, enabled=1): + values = {"LKAS_Output": angle, "LKAS_Request": enabled} + return self.packer.make_can_msg_panda("ES_LKAS_ANGLE", 0, values) + + def _angle_meas_msg(self, angle): + values = {"Steering_Angle": angle} + return self.packer.make_can_msg_panda("Steering_Torque", 0, values) + + +class TestSubaruGen1AngleStockLongitudinalSafety(TestSubaruStockLongitudinalSafetyBase, TestSubaruAngleSafetyBase): + pass + class TestSubaruGen1TorqueStockLongitudinalSafety(TestSubaruStockLongitudinalSafetyBase, TestSubaruTorqueSafetyBase): FLAGS = 0 From 98d829f16b3082fce8b6b23318bf216c3d4d7412 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Tue, 24 Oct 2023 11:43:20 -0700 Subject: [PATCH 02/11] fix sign --- board/safety/safety_subaru.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index 14d0b250577..96ff95d4547 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -245,7 +245,7 @@ static int subaru_tx_hook(CANPacket_t *to_send) { if (addr == MSG_SUBARU_ES_LKAS_ANGLE) { int desired_angle = (GET_BYTES(to_send, 5, 3) & 0x1FFFFU); - desired_angle = to_signed(desired_angle, 17); + desired_angle = -1 * to_signed(desired_angle, 17); bool lkas_request = GET_BIT(to_send, 12U); const SteeringLimits limits = SUBARU_ANGLE_STEERING_LIMITS; From 2d624f4f79dd9fc9304bdce6356a92fca9e004eb Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Tue, 24 Oct 2023 11:46:14 -0700 Subject: [PATCH 03/11] that's checked above --- board/safety/safety_subaru.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index 96ff95d4547..4e5a2529233 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -328,7 +328,7 @@ static const addr_checks* subaru_init(uint16_t param) { #ifdef ALLOW_DEBUG lkas_angle = GET_FLAG(param, SUBARU_PARAM_LKAS_ANGLE); - subaru_longitudinal = GET_FLAG(param, SUBARU_PARAM_LONGITUDINAL) && !lkas_angle; + subaru_longitudinal = GET_FLAG(param, SUBARU_PARAM_LONGITUDINAL); #endif if (subaru_gen2) { From b92a137c50a19c4901b370f6f626b7aad3dbdaf5 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Tue, 24 Oct 2023 14:18:03 -0700 Subject: [PATCH 04/11] reduce complexity --- board/safety/safety_subaru.h | 19 ++++++++++--------- tests/safety/test_subaru.py | 6 +++--- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index 4e5a2529233..265086d36a5 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -23,12 +23,12 @@ const SteeringLimits SUBARU_GEN2_STEERING_LIMITS = SUBARU_STEERING_LIMITS_GENERA const SteeringLimits SUBARU_ANGLE_STEERING_LIMITS = { .angle_deg_to_can = 100, .angle_rate_up_lookup = { - {0., 5., 15.}, - {5., .8, .15} + {0., 15., 15.}, + {5., .8, .8} }, .angle_rate_down_lookup = { - {0., 5., 15.}, - {5., 3.5, .4} + {0., 15., 15.}, + {5., .4, .4} }, }; @@ -298,17 +298,18 @@ static int subaru_tx_hook(CANPacket_t *to_send) { static int subaru_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; + const int stock_lkas_msg = lkas_angle ? MSG_SUBARU_ES_LKAS_ANGLE : MSG_SUBARU_ES_LKAS; + if (bus_num == SUBARU_MAIN_BUS) { bus_fwd = SUBARU_CAM_BUS; // to the eyesight camera } if (bus_num == SUBARU_CAM_BUS) { // Global platform - bool block_lkas = (((addr == MSG_SUBARU_ES_LKAS) && !lkas_angle) || - ((addr == MSG_SUBARU_ES_LKAS_ANGLE) && lkas_angle) || - (addr == MSG_SUBARU_ES_DashStatus) || - (addr == MSG_SUBARU_ES_LKAS_State) || - (addr == MSG_SUBARU_ES_Infotainment)); + bool block_lkas = ((addr == stock_lkas_msg) || + (addr == MSG_SUBARU_ES_DashStatus) || + (addr == MSG_SUBARU_ES_LKAS_State) || + (addr == MSG_SUBARU_ES_Infotainment)); bool block_long = ((addr == MSG_SUBARU_ES_Brake) || (addr == MSG_SUBARU_ES_Distance) || diff --git a/tests/safety/test_subaru.py b/tests/safety/test_subaru.py index b8fa09db6b7..8b90a87038f 100755 --- a/tests/safety/test_subaru.py +++ b/tests/safety/test_subaru.py @@ -175,9 +175,9 @@ class TestSubaruAngleSafetyBase(TestSubaruSafetyBase, common.AngleSteeringSafety FLAGS = Panda.FLAG_SUBARU_LKAS_ANGLE - ANGLE_RATE_BP = [0, 5, 15] - ANGLE_RATE_UP = [5, 0.8, 0.15] - ANGLE_RATE_DOWN = [5, 3.5, 0.4] + ANGLE_RATE_BP = [0, 15] + ANGLE_RATE_UP = [5, 0.15] + ANGLE_RATE_DOWN = [5, 0.4] def _angle_cmd_msg(self, angle, enabled=1): values = {"LKAS_Output": angle, "LKAS_Request": enabled} From c6648a41b701314a2a40896c5684f9a161bf12b9 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Wed, 25 Oct 2023 11:45:24 -0700 Subject: [PATCH 05/11] Apply suggestions from code review Co-authored-by: Shane Smiskol --- board/safety/safety_subaru.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index 265086d36a5..700634937c5 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -244,12 +244,11 @@ static int subaru_tx_hook(CANPacket_t *to_send) { } if (addr == MSG_SUBARU_ES_LKAS_ANGLE) { - int desired_angle = (GET_BYTES(to_send, 5, 3) & 0x1FFFFU); + int desired_angle = GET_BYTES(to_send, 5, 3) & 0x1FFFFU; desired_angle = -1 * to_signed(desired_angle, 17); bool lkas_request = GET_BIT(to_send, 12U); - const SteeringLimits limits = SUBARU_ANGLE_STEERING_LIMITS; - violation |= steer_angle_cmd_checks(desired_angle, lkas_request, limits); + violation |= steer_angle_cmd_checks(desired_angle, lkas_request, SUBARU_ANGLE_STEERING_LIMITS); } // check es_brake brake_pressure limits From ce325f2dbe3980b241492cd14d310eb1fd5f1212 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Wed, 25 Oct 2023 11:46:54 -0700 Subject: [PATCH 06/11] prefix with subaru_ --- board/safety/safety_subaru.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index 265086d36a5..0bd3b078a54 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -138,7 +138,7 @@ const uint16_t SUBARU_PARAM_LKAS_ANGLE = 4; bool subaru_gen2 = false; bool subaru_longitudinal = false; -bool lkas_angle = false; +bool subaru_lkas_angle = false; static uint32_t subaru_get_checksum(CANPacket_t *to_push) { @@ -167,7 +167,7 @@ static int subaru_rx_hook(CANPacket_t *to_push) { if (valid) { const int bus = GET_BUS(to_push); const int alt_main_bus = subaru_gen2 ? SUBARU_ALT_BUS : SUBARU_MAIN_BUS; - const int stock_lkas_msg = lkas_angle ? MSG_SUBARU_ES_LKAS_ANGLE : MSG_SUBARU_ES_LKAS; + const int stock_lkas_msg = subaru_lkas_angle ? MSG_SUBARU_ES_LKAS_ANGLE : MSG_SUBARU_ES_LKAS; int addr = GET_ADDR(to_push); if ((addr == MSG_SUBARU_Steering_Torque) && (bus == SUBARU_MAIN_BUS)) { @@ -220,7 +220,7 @@ static int subaru_tx_hook(CANPacket_t *to_send) { int addr = GET_ADDR(to_send); bool violation = false; - if (lkas_angle) { + if (subaru_lkas_angle) { tx = msg_allowed(to_send, SUBARU_LKAS_ANGLE_TX_MSGS, SUBARU_LKAS_ANGLE_TX_MSGS_LEN); } else if (subaru_gen2 && subaru_longitudinal) { tx = msg_allowed(to_send, SUBARU_GEN2_LONG_TX_MSGS, SUBARU_GEN2_LONG_TX_MSGS_LEN); @@ -298,7 +298,7 @@ static int subaru_tx_hook(CANPacket_t *to_send) { static int subaru_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; - const int stock_lkas_msg = lkas_angle ? MSG_SUBARU_ES_LKAS_ANGLE : MSG_SUBARU_ES_LKAS; + const int stock_lkas_msg = subaru_lkas_angle ? MSG_SUBARU_ES_LKAS_ANGLE : MSG_SUBARU_ES_LKAS; if (bus_num == SUBARU_MAIN_BUS) { bus_fwd = SUBARU_CAM_BUS; // to the eyesight camera @@ -328,7 +328,7 @@ static const addr_checks* subaru_init(uint16_t param) { subaru_gen2 = GET_FLAG(param, SUBARU_PARAM_GEN2); #ifdef ALLOW_DEBUG - lkas_angle = GET_FLAG(param, SUBARU_PARAM_LKAS_ANGLE); + subaru_lkas_angle = GET_FLAG(param, SUBARU_PARAM_LKAS_ANGLE); subaru_longitudinal = GET_FLAG(param, SUBARU_PARAM_LONGITUDINAL); #endif From 9c271d95ec43fc35e7109f4991553da0c34fe3f5 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Wed, 8 Nov 2023 12:18:09 -0800 Subject: [PATCH 07/11] fix conflict --- tests/safety/test_subaru.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safety/test_subaru.py b/tests/safety/test_subaru.py index fc148cb1d35..178cc19c005 100755 --- a/tests/safety/test_subaru.py +++ b/tests/safety/test_subaru.py @@ -168,7 +168,7 @@ def _torque_cmd_msg(self, torque, steer_req=1): class TestSubaruAngleSafetyBase(TestSubaruSafetyBase, common.AngleSteeringSafetyTest): TX_MSGS = lkas_tx_msgs(SUBARU_MAIN_BUS, SubaruMsg.ES_LKAS_ANGLE) - RELAY_MALFUNCTION_ADDR = SubaruMsg.ES_LKAS_ANGLE + RELAY_MALFUNCTION_ADDRS = {0: (SubaruMsg.ES_LKAS_ANGLE,)} FWD_BLACKLISTED_ADDRS = fwd_blacklisted_addr(SubaruMsg.ES_LKAS_ANGLE) FLAGS = Panda.FLAG_SUBARU_LKAS_ANGLE From 931e54f4a95d8943c59d0b1e0ff0171bb2febe50 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Wed, 8 Nov 2023 12:18:56 -0800 Subject: [PATCH 08/11] spacing --- tests/safety/test_subaru.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/safety/test_subaru.py b/tests/safety/test_subaru.py index 178cc19c005..e2ffe679f65 100755 --- a/tests/safety/test_subaru.py +++ b/tests/safety/test_subaru.py @@ -166,6 +166,7 @@ def _torque_cmd_msg(self, torque, steer_req=1): values = {"LKAS_Output": torque, "LKAS_Request": steer_req} return self.packer.make_can_msg_panda("ES_LKAS", SUBARU_MAIN_BUS, values) + class TestSubaruAngleSafetyBase(TestSubaruSafetyBase, common.AngleSteeringSafetyTest): TX_MSGS = lkas_tx_msgs(SUBARU_MAIN_BUS, SubaruMsg.ES_LKAS_ANGLE) RELAY_MALFUNCTION_ADDRS = {0: (SubaruMsg.ES_LKAS_ANGLE,)} From 38e249b2de3fa60f95c1023b54362c8726c286f9 Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Fri, 15 Dec 2023 13:30:56 -0800 Subject: [PATCH 09/11] dont need that --- board/safety/safety_subaru.h | 1 - 1 file changed, 1 deletion(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index 83e7aad175d..3a25085609e 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -107,7 +107,6 @@ const CanMsg SUBARU_GEN2_TX_MSGS[] = { const CanMsg SUBARU_LKAS_ANGLE_TX_MSGS[] = { SUBARU_COMMON_TX_MSGS(SUBARU_MAIN_BUS, MSG_SUBARU_ES_LKAS_ANGLE) }; -#define SUBARU_LKAS_ANGLE_TX_MSGS_LEN (sizeof(SUBARU_LKAS_ANGLE_TX_MSGS) / sizeof(SUBARU_LKAS_ANGLE_TX_MSGS[0])) const CanMsg SUBARU_GEN2_LONG_TX_MSGS[] = { SUBARU_COMMON_TX_MSGS(SUBARU_ALT_BUS, MSG_SUBARU_ES_LKAS) From 69a28982fa0c0a59a709f97551ad15f15386801b Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Fri, 15 Dec 2023 13:32:43 -0800 Subject: [PATCH 10/11] fix those issues --- board/safety/safety_subaru.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/board/safety/safety_subaru.h b/board/safety/safety_subaru.h index 3a25085609e..d39cd394111 100644 --- a/board/safety/safety_subaru.h +++ b/board/safety/safety_subaru.h @@ -153,6 +153,7 @@ static uint32_t subaru_compute_checksum(CANPacket_t *to_push) { static void subaru_rx_hook(CANPacket_t *to_push) { const int bus = GET_BUS(to_push); const int alt_main_bus = subaru_gen2 ? SUBARU_ALT_BUS : SUBARU_MAIN_BUS; + const int stock_lkas_msg = subaru_lkas_angle ? MSG_SUBARU_ES_LKAS_ANGLE : MSG_SUBARU_ES_LKAS; int addr = GET_ADDR(to_push); if ((addr == MSG_SUBARU_Steering_Torque) && (bus == SUBARU_MAIN_BUS)) { @@ -193,7 +194,7 @@ static void subaru_rx_hook(CANPacket_t *to_push) { gas_pressed = GET_BYTE(to_push, 4) != 0U; } - generic_rx_checks((addr == MSG_SUBARU_ES_LKAS) && (bus == SUBARU_MAIN_BUS)); + generic_rx_checks((addr == stock_lkas_msg) && (bus == SUBARU_MAIN_BUS)); } static bool subaru_tx_hook(CANPacket_t *to_send) { @@ -301,7 +302,10 @@ static safety_config subaru_init(uint16_t param) { #endif safety_config ret; - if (subaru_gen2) { + if (subaru_lkas_angle) { + ret = BUILD_SAFETY_CFG(subaru_rx_checks, SUBARU_LKAS_ANGLE_TX_MSGS); + } + else if (subaru_gen2) { ret = subaru_longitudinal ? BUILD_SAFETY_CFG(subaru_gen2_rx_checks, SUBARU_GEN2_LONG_TX_MSGS) : \ BUILD_SAFETY_CFG(subaru_gen2_rx_checks, SUBARU_GEN2_TX_MSGS); } else { From 75f40c1c9a1ca40134842d1f5c9334fc49de658a Mon Sep 17 00:00:00 2001 From: Justin Newberry Date: Sun, 25 Feb 2024 20:02:56 -0800 Subject: [PATCH 11/11] float --- tests/safety/test_subaru.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/safety/test_subaru.py b/tests/safety/test_subaru.py index 248d97c0b2f..c89c1c77242 100755 --- a/tests/safety/test_subaru.py +++ b/tests/safety/test_subaru.py @@ -68,7 +68,7 @@ class TestSubaruSafetyBase(common.PandaCarSafetyTest): ALT_MAIN_BUS = SUBARU_MAIN_BUS ALT_CAM_BUS = SUBARU_CAM_BUS - DEG_TO_CAN = 100 + DEG_TO_CAN = 100. INACTIVE_GAS = 1818