Skip to content

Commit 7e78791

Browse files
committed
Add tests for ALT_BUTTONS w/ HDA2
1 parent d0eb7b6 commit 7e78791

File tree

1 file changed

+86
-103
lines changed

1 file changed

+86
-103
lines changed

tests/safety/test_hyundai_canfd.py

Lines changed: 86 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010

1111
class TestHyundaiCanfdBase(HyundaiButtonBase, common.PandaCarSafetyTest, common.DriverTorqueSteeringSafetyTest, common.SteerRequestCutSafetyTest):
12-
12+
SAFETY_PARAM = 0
1313
TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0]]
1414
STANDSTILL_THRESHOLD = 12 # 0.375 kph
1515
FWD_BLACKLISTED_ADDRS = {2: [0x50, 0x2a4]}
@@ -45,6 +45,12 @@ def setUpClass(cls):
4545
cls.safety = None
4646
raise unittest.SkipTest
4747

48+
def setUp(self):
49+
self.packer = CANPackerPanda("hyundai_canfd")
50+
self.safety = libpanda_py.libpanda
51+
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, self.SAFETY_PARAM)
52+
self.safety.init_tests()
53+
4854
def _torque_driver_msg(self, torque):
4955
values = {"STEERING_COL_TORQUE": torque}
5056
return self.packer.make_can_msg_panda("MDPS", self.PT_BUS, values)
@@ -79,6 +85,29 @@ def _button_msg(self, buttons, main_button=0, bus=None):
7985
return self.packer.make_can_msg_panda("CRUISE_BUTTONS", bus, values)
8086

8187

88+
class HyundaiCanfdAltButtonsMixin:
89+
@classmethod
90+
def setUpClass(cls):
91+
super().setUpClass()
92+
cls.SAFETY_PARAM |= Panda.FLAG_HYUNDAI_CANFD_ALT_BUTTONS
93+
94+
def _button_msg(self, buttons, main_button=0, bus=1):
95+
values = {
96+
"CRUISE_BUTTONS": buttons,
97+
"ADAPTIVE_CRUISE_MAIN_BTN": main_button,
98+
}
99+
return self.packer.make_can_msg_panda("CRUISE_BUTTONS_ALT", self.PT_BUS, values)
100+
101+
def test_button_sends(self):
102+
"""
103+
No button send allowed with alt buttons.
104+
"""
105+
for enabled in (True, False):
106+
for btn in range(8):
107+
self.safety.set_controls_allowed(enabled)
108+
self.assertFalse(self._tx(self._button_msg(btn)))
109+
110+
82111
class TestHyundaiCanfdHDA1Base(TestHyundaiCanfdBase):
83112

84113
TX_MSGS = [[0x12A, 0], [0x1A0, 1], [0x1CF, 0], [0x1E0, 0]]
@@ -88,7 +117,6 @@ class TestHyundaiCanfdHDA1Base(TestHyundaiCanfdBase):
88117

89118
STEER_MSG = "LFA"
90119
BUTTONS_TX_BUS = 2
91-
SAFETY_PARAM: int
92120

93121
@classmethod
94122
def setUpClass(cls):
@@ -98,12 +126,6 @@ def setUpClass(cls):
98126
cls.safety = None
99127
raise unittest.SkipTest
100128

101-
def setUp(self):
102-
self.packer = CANPackerPanda("hyundai_canfd")
103-
self.safety = libpanda_py.libpanda
104-
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, self.SAFETY_PARAM)
105-
self.safety.init_tests()
106-
107129

108130
@parameterized_class([
109131
# Radar SCC, test with long flag to ensure flag is not respected until it is supported
@@ -129,71 +151,81 @@ class TestHyundaiCanfdHDA1(TestHyundaiCanfdHDA1Base):
129151
{"GAS_MSG": ("ACCELERATOR", "ACCELERATOR_PEDAL"), "SCC_BUS": 2, "SAFETY_PARAM": Panda.FLAG_HYUNDAI_EV_GAS | Panda.FLAG_HYUNDAI_CAMERA_SCC},
130152
{"GAS_MSG": ("ACCELERATOR_ALT", "ACCELERATOR_PEDAL"), "SCC_BUS": 2, "SAFETY_PARAM": Panda.FLAG_HYUNDAI_HYBRID_GAS | Panda.FLAG_HYUNDAI_CAMERA_SCC},
131153
])
132-
class TestHyundaiCanfdHDA1AltButtons(TestHyundaiCanfdHDA1Base):
154+
class TestHyundaiCanfdHDA1AltButtons(HyundaiCanfdAltButtonsMixin, TestHyundaiCanfdHDA1Base):
155+
pass
133156

134-
SAFETY_PARAM: int
135157

136-
def setUp(self):
137-
self.packer = CANPackerPanda("hyundai_canfd")
138-
self.safety = libpanda_py.libpanda
139-
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, Panda.FLAG_HYUNDAI_CANFD_ALT_BUTTONS | self.SAFETY_PARAM)
140-
self.safety.init_tests()
158+
# Tests HDA1 longitudinal for ICE, hybrid, EV
159+
@parameterized_class([
160+
# Camera SCC is the only supported configuration for HDA1 longitudinal, TODO: allow radar SCC
161+
{"GAS_MSG": ("ACCELERATOR_BRAKE_ALT", "ACCELERATOR_PEDAL_PRESSED"), "SAFETY_PARAM": Panda.FLAG_HYUNDAI_LONG},
162+
{"GAS_MSG": ("ACCELERATOR", "ACCELERATOR_PEDAL"), "SAFETY_PARAM": Panda.FLAG_HYUNDAI_LONG | Panda.FLAG_HYUNDAI_EV_GAS},
163+
{"GAS_MSG": ("ACCELERATOR_ALT", "ACCELERATOR_PEDAL"), "SAFETY_PARAM": Panda.FLAG_HYUNDAI_LONG | Panda.FLAG_HYUNDAI_HYBRID_GAS},
164+
])
165+
class TestHyundaiCanfdHDA1Long(HyundaiLongitudinalBase, TestHyundaiCanfdHDA1Base):
141166

142-
def _button_msg(self, buttons, main_button=0, bus=1):
167+
FWD_BLACKLISTED_ADDRS = {2: [0x12a, 0x1e0, 0x1a0]}
168+
169+
RELAY_MALFUNCTION_ADDRS = {0: (0x12A, 0x1a0)} # LFA, SCC_CONTROL
170+
171+
DISABLED_ECU_UDS_MSG = (0x730, 1)
172+
DISABLED_ECU_ACTUATION_MSG = (0x1a0, 0)
173+
174+
STEER_MSG = "LFA"
175+
STEER_BUS = 0
176+
SCC_BUS = 2
177+
178+
@classmethod
179+
def setUpClass(cls):
180+
super().setUpClass()
181+
cls.SAFETY_PARAM |= Panda.FLAG_HYUNDAI_CAMERA_SCC
182+
if cls.__name__ == "TestHyundaiCanfdHDA1Long":
183+
cls.safety = None
184+
raise unittest.SkipTest
185+
186+
def _accel_msg(self, accel, aeb_req=False, aeb_decel=0):
143187
values = {
144-
"CRUISE_BUTTONS": buttons,
145-
"ADAPTIVE_CRUISE_MAIN_BTN": main_button,
188+
"aReqRaw": accel,
189+
"aReqValue": accel,
146190
}
147-
return self.packer.make_can_msg_panda("CRUISE_BUTTONS_ALT", self.PT_BUS, values)
191+
return self.packer.make_can_msg_panda("SCC_CONTROL", 0, values)
148192

149-
def test_button_sends(self):
150-
"""
151-
No button send allowed with alt buttons.
152-
"""
153-
for enabled in (True, False):
154-
for btn in range(8):
155-
self.safety.set_controls_allowed(enabled)
156-
self.assertFalse(self._tx(self._button_msg(btn)))
193+
# no knockout
194+
def test_tester_present_allowed(self):
195+
pass
157196

158197

159-
class TestHyundaiCanfdHDA2EV(TestHyundaiCanfdBase):
198+
# ********************* HDA2 **********************
160199

161-
TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0]]
162-
RELAY_MALFUNCTION_ADDRS = {0: (0x50,)} # LKAS
163-
FWD_BLACKLISTED_ADDRS = {2: [0x50, 0x2a4]}
164-
FWD_BUS_LOOKUP = {0: 2, 2: 0}
165200

201+
class TestHyundaiCanfdHDA2EVBase(TestHyundaiCanfdBase):
166202
PT_BUS = 1
167203
SCC_BUS = 1
168-
STEER_MSG = "LKAS"
169204
GAS_MSG = ("ACCELERATOR", "ACCELERATOR_PEDAL")
205+
FWD_BUS_LOOKUP = {0: 2, 2: 0}
170206

171-
def setUp(self):
172-
self.packer = CANPackerPanda("hyundai_canfd")
173-
self.safety = libpanda_py.libpanda
174-
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, Panda.FLAG_HYUNDAI_CANFD_HDA2 | Panda.FLAG_HYUNDAI_EV_GAS)
175-
self.safety.init_tests()
176207

208+
class TestHyundaiCanfdHDA2EV(TestHyundaiCanfdHDA2EVBase):
209+
TX_MSGS = [[0x50, 0], [0x1CF, 1], [0x2A4, 0]]
210+
RELAY_MALFUNCTION_ADDRS = {0: (0x50,)}
211+
FWD_BLACKLISTED_ADDRS = {2: [0x50, 0x2a4]}
212+
STEER_MSG = "LKAS"
213+
SAFETY_PARAM = Panda.FLAG_HYUNDAI_CANFD_HDA2 | Panda.FLAG_HYUNDAI_EV_GAS
177214

178-
# TODO: Handle ICE and HEV configurations once we see cars that use the new messages
179-
class TestHyundaiCanfdHDA2EVAltSteering(TestHyundaiCanfdBase):
180215

216+
class TestHyundaiCanfdHDA2EVAltSteering(TestHyundaiCanfdHDA2EVBase):
181217
TX_MSGS = [[0x110, 0], [0x1CF, 1], [0x362, 0]]
182-
RELAY_MALFUNCTION_ADDRS = {0: (0x110,)} # LKAS_ALT
218+
RELAY_MALFUNCTION_ADDRS = {0: (0x110,)}
183219
FWD_BLACKLISTED_ADDRS = {2: [0x110, 0x362]}
184-
FWD_BUS_LOOKUP = {0: 2, 2: 0}
185-
186-
PT_BUS = 1
187-
SCC_BUS = 1
188220
STEER_MSG = "LKAS_ALT"
189-
GAS_MSG = ("ACCELERATOR", "ACCELERATOR_PEDAL")
221+
SAFETY_PARAM = Panda.FLAG_HYUNDAI_CANFD_HDA2 | Panda.FLAG_HYUNDAI_EV_GAS | Panda.FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING
190222

191-
def setUp(self):
192-
self.packer = CANPackerPanda("hyundai_canfd")
193-
self.safety = libpanda_py.libpanda
194-
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, Panda.FLAG_HYUNDAI_CANFD_HDA2 | Panda.FLAG_HYUNDAI_EV_GAS |
195-
Panda.FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING)
196-
self.safety.init_tests()
223+
224+
class TestHyundaiCanfdHDA2EVAltButtons(HyundaiCanfdAltButtonsMixin, TestHyundaiCanfdHDA2EV):
225+
pass
226+
227+
class TestHyundaiCanfdHDA2EVAltSteeringAltButtons(HyundaiCanfdAltButtonsMixin, TestHyundaiCanfdHDA2EVAltSteering):
228+
pass
197229

198230

199231
class TestHyundaiCanfdHDA2LongEV(HyundaiLongitudinalBase, TestHyundaiCanfdHDA2EV):
@@ -209,12 +241,7 @@ class TestHyundaiCanfdHDA2LongEV(HyundaiLongitudinalBase, TestHyundaiCanfdHDA2EV
209241
STEER_MSG = "LFA"
210242
GAS_MSG = ("ACCELERATOR", "ACCELERATOR_PEDAL")
211243
STEER_BUS = 1
212-
213-
def setUp(self):
214-
self.packer = CANPackerPanda("hyundai_canfd")
215-
self.safety = libpanda_py.libpanda
216-
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, Panda.FLAG_HYUNDAI_CANFD_HDA2 | Panda.FLAG_HYUNDAI_LONG | Panda.FLAG_HYUNDAI_EV_GAS)
217-
self.safety.init_tests()
244+
SAFETY_PARAM = Panda.FLAG_HYUNDAI_CANFD_HDA2 | Panda.FLAG_HYUNDAI_LONG | Panda.FLAG_HYUNDAI_EV_GAS
218245

219246
def _accel_msg(self, accel, aeb_req=False, aeb_decel=0):
220247
values = {
@@ -224,49 +251,5 @@ def _accel_msg(self, accel, aeb_req=False, aeb_decel=0):
224251
return self.packer.make_can_msg_panda("SCC_CONTROL", 1, values)
225252

226253

227-
# Tests HDA1 longitudinal for ICE, hybrid, EV
228-
@parameterized_class([
229-
# Camera SCC is the only supported configuration for HDA1 longitudinal, TODO: allow radar SCC
230-
{"GAS_MSG": ("ACCELERATOR_BRAKE_ALT", "ACCELERATOR_PEDAL_PRESSED"), "SAFETY_PARAM": Panda.FLAG_HYUNDAI_LONG},
231-
{"GAS_MSG": ("ACCELERATOR", "ACCELERATOR_PEDAL"), "SAFETY_PARAM": Panda.FLAG_HYUNDAI_LONG | Panda.FLAG_HYUNDAI_EV_GAS},
232-
{"GAS_MSG": ("ACCELERATOR_ALT", "ACCELERATOR_PEDAL"), "SAFETY_PARAM": Panda.FLAG_HYUNDAI_LONG | Panda.FLAG_HYUNDAI_HYBRID_GAS},
233-
])
234-
class TestHyundaiCanfdHDA1Long(HyundaiLongitudinalBase, TestHyundaiCanfdHDA1Base):
235-
236-
FWD_BLACKLISTED_ADDRS = {2: [0x12a, 0x1e0, 0x1a0]}
237-
238-
RELAY_MALFUNCTION_ADDRS = {0: (0x12A, 0x1a0)} # LFA, SCC_CONTROL
239-
240-
DISABLED_ECU_UDS_MSG = (0x730, 1)
241-
DISABLED_ECU_ACTUATION_MSG = (0x1a0, 0)
242-
243-
STEER_MSG = "LFA"
244-
STEER_BUS = 0
245-
SCC_BUS = 2
246-
247-
@classmethod
248-
def setUpClass(cls):
249-
if cls.__name__ == "TestHyundaiCanfdHDA1Long":
250-
cls.safety = None
251-
raise unittest.SkipTest
252-
253-
def setUp(self):
254-
self.packer = CANPackerPanda("hyundai_canfd")
255-
self.safety = libpanda_py.libpanda
256-
self.safety.set_safety_hooks(Panda.SAFETY_HYUNDAI_CANFD, Panda.FLAG_HYUNDAI_CAMERA_SCC | self.SAFETY_PARAM)
257-
self.safety.init_tests()
258-
259-
def _accel_msg(self, accel, aeb_req=False, aeb_decel=0):
260-
values = {
261-
"aReqRaw": accel,
262-
"aReqValue": accel,
263-
}
264-
return self.packer.make_can_msg_panda("SCC_CONTROL", 0, values)
265-
266-
# no knockout
267-
def test_tester_present_allowed(self):
268-
pass
269-
270-
271254
if __name__ == "__main__":
272-
unittest.main()
255+
unittest.main()

0 commit comments

Comments
 (0)