2019-09-24 18:50:53 -06:00
|
|
|
#!/usr/bin/env python3
|
2018-11-06 13:28:33 -07:00
|
|
|
import unittest
|
2019-10-02 19:20:32 -06:00
|
|
|
from panda import Panda
|
2019-11-15 01:52:34 -07:00
|
|
|
from panda.tests.safety import libpandasafety_py
|
2020-04-17 14:34:23 -06:00
|
|
|
import panda.tests.safety.common as common
|
2020-04-30 15:26:28 -06:00
|
|
|
from panda.tests.safety.common import CANPackerPanda
|
|
|
|
|
2020-02-24 17:36:46 -07:00
|
|
|
|
2020-04-29 21:37:12 -06:00
|
|
|
class TestChryslerSafety(common.PandaSafetyTest, common.TorqueSteeringSafetyTest):
|
2020-04-17 14:34:23 -06:00
|
|
|
TX_MSGS = [[571, 0], [658, 0], [678, 0]]
|
|
|
|
STANDSTILL_THRESHOLD = 0
|
|
|
|
RELAY_MALFUNCTION_ADDR = 0x292
|
|
|
|
RELAY_MALFUNCTION_BUS = 0
|
|
|
|
FWD_BLACKLISTED_ADDRS = {2: [658, 678]}
|
|
|
|
FWD_BUS_LOOKUP = {0: 2, 2: 0}
|
|
|
|
|
2020-04-29 21:37:12 -06:00
|
|
|
MAX_RATE_UP = 3
|
|
|
|
MAX_RATE_DOWN = 3
|
|
|
|
MAX_TORQUE = 261
|
|
|
|
MAX_RT_DELTA = 112
|
|
|
|
RT_INTERVAL = 250000
|
|
|
|
MAX_TORQUE_ERROR = 80
|
|
|
|
|
|
|
|
cnt_torque_meas = 0
|
|
|
|
cnt_gas = 0
|
|
|
|
cnt_cruise = 0
|
|
|
|
cnt_brake = 0
|
|
|
|
|
2020-04-17 14:34:23 -06:00
|
|
|
def setUp(self):
|
2020-04-30 15:26:28 -06:00
|
|
|
self.packer = CANPackerPanda("chrysler_pacifica_2017_hybrid")
|
2020-04-17 14:34:23 -06:00
|
|
|
self.safety = libpandasafety_py.libpandasafety
|
|
|
|
self.safety.set_safety_hooks(Panda.SAFETY_CHRYSLER, 0)
|
2020-05-26 15:23:39 -06:00
|
|
|
self.safety.init_tests()
|
2018-11-06 13:28:33 -07:00
|
|
|
|
2020-04-30 15:26:28 -06:00
|
|
|
def _button_msg(self, cancel):
|
|
|
|
values = {"ACC_CANCEL": cancel}
|
|
|
|
return self.packer.make_can_msg_panda("WHEEL_BUTTONS", 0, values)
|
2018-11-06 13:28:33 -07:00
|
|
|
|
2020-06-02 17:27:07 -06:00
|
|
|
def _pcm_status_msg(self, enable):
|
|
|
|
values = {"ACC_STATUS_2": 0x7 if enable else 0,
|
2020-04-30 15:26:28 -06:00
|
|
|
"COUNTER": self.cnt_cruise % 16}
|
2020-02-29 10:00:29 -07:00
|
|
|
self.__class__.cnt_cruise += 1
|
2020-04-30 15:26:28 -06:00
|
|
|
return self.packer.make_can_msg_panda("ACC_2", 0, values)
|
2020-02-24 17:36:46 -07:00
|
|
|
|
2020-02-20 00:46:38 -07:00
|
|
|
def _speed_msg(self, speed):
|
2020-04-30 15:26:28 -06:00
|
|
|
values = {"SPEED_LEFT": speed, "SPEED_RIGHT": speed}
|
|
|
|
return self.packer.make_can_msg_panda("SPEED_1", 0, values)
|
2020-02-20 00:46:38 -07:00
|
|
|
|
|
|
|
def _gas_msg(self, gas):
|
2020-04-30 15:26:28 -06:00
|
|
|
values = {"ACCEL_134": gas, "COUNTER": self.cnt_gas % 16}
|
2020-02-29 10:00:29 -07:00
|
|
|
self.__class__.cnt_gas += 1
|
2020-04-30 15:26:28 -06:00
|
|
|
return self.packer.make_can_msg_panda("ACCEL_GAS_134", 0, values)
|
2020-02-20 00:46:38 -07:00
|
|
|
|
2020-02-26 19:19:18 -07:00
|
|
|
def _brake_msg(self, brake):
|
2020-05-31 18:39:42 -06:00
|
|
|
values = {"BRAKE_PRESSED_2": 5 if brake else 0,
|
2020-06-01 02:49:26 -06:00
|
|
|
"COUNTER": self.cnt_brake % 16}
|
2020-02-29 10:00:29 -07:00
|
|
|
self.__class__.cnt_brake += 1
|
2020-04-30 15:26:28 -06:00
|
|
|
return self.packer.make_can_msg_panda("BRAKE_2", 0, values)
|
2020-02-26 19:19:18 -07:00
|
|
|
|
2019-01-02 22:53:07 -07:00
|
|
|
def _torque_meas_msg(self, torque):
|
2020-04-30 15:26:28 -06:00
|
|
|
values = {"TORQUE_MOTOR": torque, "COUNTER": self.cnt_torque_meas % 16}
|
2020-02-29 10:00:29 -07:00
|
|
|
self.__class__.cnt_torque_meas += 1
|
2020-04-30 15:26:28 -06:00
|
|
|
return self.packer.make_can_msg_panda("EPS_STATUS", 0, values)
|
2018-11-06 13:28:33 -07:00
|
|
|
|
2018-12-28 20:20:57 -07:00
|
|
|
def _torque_msg(self, torque):
|
2020-04-30 15:26:28 -06:00
|
|
|
values = {"LKAS_STEERING_TORQUE": torque}
|
|
|
|
return self.packer.make_can_msg_panda("LKAS_COMMAND", 0, values)
|
2018-11-06 13:28:33 -07:00
|
|
|
|
2020-04-17 14:34:23 -06:00
|
|
|
def test_disengage_on_gas(self):
|
2020-02-20 00:46:38 -07:00
|
|
|
self.safety.set_controls_allowed(1)
|
2020-04-30 15:26:28 -06:00
|
|
|
self._rx(self._speed_msg(2.1))
|
2020-04-27 16:27:28 -06:00
|
|
|
self._rx(self._gas_msg(1))
|
2020-02-20 00:46:38 -07:00
|
|
|
self.assertTrue(self.safety.get_controls_allowed())
|
2020-04-27 16:27:28 -06:00
|
|
|
self._rx(self._gas_msg(0))
|
2020-04-30 15:26:28 -06:00
|
|
|
self._rx(self._speed_msg(2.2))
|
2020-04-27 16:27:28 -06:00
|
|
|
self._rx(self._gas_msg(1))
|
2020-02-20 00:46:38 -07:00
|
|
|
self.assertFalse(self.safety.get_controls_allowed())
|
2020-02-26 19:19:18 -07:00
|
|
|
|
2019-11-17 23:31:26 -07:00
|
|
|
def test_cancel_button(self):
|
2020-04-30 15:26:28 -06:00
|
|
|
for cancel in [True, False]:
|
|
|
|
self.assertEqual(cancel, self._tx(self._button_msg(cancel)))
|
2019-11-17 23:31:26 -07:00
|
|
|
|
2018-11-06 13:28:33 -07:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
unittest.main()
|