99
1010
1111class 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+
82111class 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
199231class 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-
271254if __name__ == "__main__" :
272- unittest .main ()
255+ unittest .main ()
0 commit comments