From 0d1b42c306e62fd4ee4f984cf87edd5e9a751213 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sun, 18 Oct 2026 10:14:02 -0500 Subject: [PATCH] Correct Palisade stock status relay ownership --- opendbc_repo/opendbc/safety/modes/hyundai.h | 2 +- .../safety/tests/test_hyundai_blended.py | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/opendbc_repo/opendbc/safety/modes/hyundai.h b/opendbc_repo/opendbc/safety/modes/hyundai.h index 5fc2626ae5..41235b76ad 100644 --- a/opendbc_repo/opendbc/safety/modes/hyundai.h +++ b/opendbc_repo/opendbc/safety/modes/hyundai.h @@ -716,7 +716,7 @@ static safety_config hyundai_init(uint16_t param) { {0x50, 0, 16, .check_relay = true}, {0x4F1, 1, 4, .check_relay = false}, {0x2A4, 0, 24, .check_relay = true}, - {0x485, 1, 8, .check_relay = true}, + {0x485, 1, 8, .check_relay = false}, }; static const CanMsg blended_hda2_aol_tx[] = { {0x50, 0, 16, .check_relay = true, .disable_static_blocking = true}, diff --git a/opendbc_repo/opendbc/safety/tests/test_hyundai_blended.py b/opendbc_repo/opendbc/safety/tests/test_hyundai_blended.py index d655b1217b..f11e8f82de 100644 --- a/opendbc_repo/opendbc/safety/tests/test_hyundai_blended.py +++ b/opendbc_repo/opendbc/safety/tests/test_hyundai_blended.py @@ -9,6 +9,7 @@ from opendbc.safety.tests.test_hyundai import checksum class TestHyundaiBlendedStock(unittest.TestCase): def setUp(self): self.safety = libsafety_py.libsafety + self.safety.set_alternative_experience(0) self.packer = common.CANPackerSafety('hyundai_can_generated') def select(self, hda2): @@ -115,6 +116,8 @@ class TestHyundaiBlendedStock(unittest.TestCase): self.assertEqual(self.safety.safety_fwd_hook(0, 0x485), 2) self.safety.set_timer(2_000_000) self.safety.safety_rx_hook(common.make_msg(1, 0x485, dat=payloads[0])) + self.assertFalse(self.safety.get_relay_malfunction(), 'Stock E-CAN status is not exclusive steering ownership') + self.safety.safety_rx_hook(common.make_msg(0, 0x50, 16)) self.assertTrue(self.safety.get_relay_malfunction()) self.assertFalse(self.safety.safety_tx_hook(common.make_msg(1, 0x485, dat=payloads[0]))) @@ -187,3 +190,32 @@ class TestHyundaiBlendedStock(unittest.TestCase): self.safety.safety_rx_hook(common.make_msg(0, address, length)) self.assertTrue(self.safety.get_relay_malfunction()) self.assertFalse(self.safety.safety_tx_hook(self.steer(0, False))) + + def test_palisade_captured_status_preserves_steering_relay_shutdown(self): + for steering_address, length in ((0x50, 16), (0x2A4, 24)): + self.select(True) + self.safety.set_timer(2_000_000) + camera = bytes.fromhex('2dc35b01000008006401010200000000') + suppression = bytes.fromhex('daed12000022000022000000000000000000000000000000') + status = bytes.fromhex('5030020000000000') + self.safety.safety_rx_hook(common.make_msg(2, 0x50, dat=camera)) + self.safety.safety_rx_hook(common.make_msg(2, 0x2A4, dat=suppression)) + self.assertFalse(self.safety.get_relay_malfunction()) + self.safety.safety_rx_hook(common.make_msg(1, 0x485, dat=status)) + self.assertFalse(self.safety.get_relay_malfunction()) + self.assertEqual(self.safety.safety_fwd_hook(2, 0x50), -1) + self.assertEqual(self.safety.safety_fwd_hook(2, 0x2A4), -1) + self.assertEqual(self.safety.safety_fwd_hook(2, 0x485), 0) + self.safety.safety_rx_hook(common.make_msg(0, steering_address, length)) + self.assertTrue(self.safety.get_relay_malfunction()) + self.assertFalse(self.safety.safety_tx_hook(common.make_msg(0, 0x50, 16))) + + def test_stock_status_ownership_does_not_change_aol_table(self): + for experience in (0, 32): + self.safety.set_alternative_experience(experience) + self.assertEqual(self.safety.set_safety_hooks(CarParams.SafetyModel.hyundai, 0x2010), 0) + self.safety.init_tests() + self.safety.set_alternative_experience(experience) + self.safety.safety_rx_hook(common.make_msg(1, 0x485, dat=bytes.fromhex('5030020000000000'))) + self.assertEqual(bool(self.safety.get_relay_malfunction()), experience == 32) + self.safety.set_alternative_experience(0)