From c9102c00ee9b94b520ed7bd99b3cdd821a33dbf4 Mon Sep 17 00:00:00 2001 From: Adeeb <8762862+quillford@users.noreply.github.com> Date: Thu, 30 Apr 2020 14:26:28 -0700 Subject: [PATCH] Chrysler: use can packer in safety tests (#522) * Chrysler: use can packer in safety tests * bump opendbc --- tests/safety/Dockerfile | 2 +- tests/safety/test_chrysler.py | 88 +++++++++-------------------------- 2 files changed, 24 insertions(+), 66 deletions(-) diff --git a/tests/safety/Dockerfile b/tests/safety/Dockerfile index bb605b58..524cfc39 100644 --- a/tests/safety/Dockerfile +++ b/tests/safety/Dockerfile @@ -34,7 +34,7 @@ RUN pip install -r /tmp/requirements.txt WORKDIR /openpilot RUN git clone https://github.com/commaai/opendbc.git || true WORKDIR /openpilot/opendbc -RUN git pull && git checkout a57e7ddbd72c92241d5d6442da9d47c55e95a8cf +RUN git pull && git checkout 7f3b1774dd248d4ebad91cc9de0fb1c561fab54b WORKDIR /openpilot RUN git clone https://github.com/commaai/cereal.git WORKDIR /openpilot/cereal diff --git a/tests/safety/test_chrysler.py b/tests/safety/test_chrysler.py index 7584156d..369f1f98 100755 --- a/tests/safety/test_chrysler.py +++ b/tests/safety/test_chrysler.py @@ -3,34 +3,9 @@ import unittest from panda import Panda from panda.tests.safety import libpandasafety_py import panda.tests.safety.common as common -from panda.tests.safety.common import make_msg +from panda.tests.safety.common import CANPackerPanda -def chrysler_checksum(msg, len_msg): - checksum = 0xFF - for idx in range(0, len_msg-1): - curr = (msg.RDLR >> (8*idx)) if idx < 4 else (msg.RDHR >> (8*(idx - 4))) - curr &= 0xFF - shift = 0x80 - for i in range(0, 8): - bit_sum = curr & shift - temp_chk = checksum & 0x80 - if (bit_sum != 0): - bit_sum = 0x1C - if (temp_chk != 0): - bit_sum = 1 - checksum = checksum << 1 - temp_chk = checksum | 1 - bit_sum ^= temp_chk - else: - if (temp_chk != 0): - bit_sum = 0x1D - checksum = checksum << 1 - bit_sum ^= checksum - checksum = bit_sum - shift = shift >> 1 - return ~checksum & 0xFF - class TestChryslerSafety(common.PandaSafetyTest, common.TorqueSteeringSafetyTest): TX_MSGS = [[571, 0], [658, 0], [678, 0]] STANDSTILL_THRESHOLD = 0 @@ -52,75 +27,58 @@ class TestChryslerSafety(common.PandaSafetyTest, common.TorqueSteeringSafetyTest cnt_brake = 0 def setUp(self): + self.packer = CANPackerPanda("chrysler_pacifica_2017_hybrid") self.safety = libpandasafety_py.libpandasafety self.safety.set_safety_hooks(Panda.SAFETY_CHRYSLER, 0) self.safety.init_tests_chrysler() - def _button_msg(self, buttons): - to_send = make_msg(0, 571) - to_send[0].RDLR = buttons - return to_send + def _button_msg(self, cancel): + values = {"ACC_CANCEL": cancel} + return self.packer.make_can_msg_panda("WHEEL_BUTTONS", 0, values) def _pcm_status_msg(self, active): - to_send = make_msg(0, 500) - to_send[0].RDLR = 0x380000 if active else 0 - to_send[0].RDHR |= (self.cnt_cruise % 16) << 20 - to_send[0].RDHR |= chrysler_checksum(to_send[0], 8) << 24 + values = {"ACC_STATUS_2": 0x7 if active else 0, \ + "COUNTER": self.cnt_cruise % 16} self.__class__.cnt_cruise += 1 - return to_send + return self.packer.make_can_msg_panda("ACC_2", 0, values) def _speed_msg(self, speed): - speed = int(speed / 0.071028) - to_send = make_msg(0, 514, 4) - to_send[0].RDLR = ((speed & 0xFF0) >> 4) + ((speed & 0xF) << 12) + \ - ((speed & 0xFF0) << 12) + ((speed & 0xF) << 28) - return to_send + values = {"SPEED_LEFT": speed, "SPEED_RIGHT": speed} + return self.packer.make_can_msg_panda("SPEED_1", 0, values) def _gas_msg(self, gas): - to_send = make_msg(0, 308) - to_send[0].RDHR = (gas & 0x7F) << 8 - to_send[0].RDHR |= (self.cnt_gas % 16) << 20 + values = {"ACCEL_134": gas, "COUNTER": self.cnt_gas % 16} self.__class__.cnt_gas += 1 - return to_send + return self.packer.make_can_msg_panda("ACCEL_GAS_134", 0, values) def _brake_msg(self, brake): - to_send = make_msg(0, 320) - to_send[0].RDLR = 5 if brake else 0 - to_send[0].RDHR |= (self.cnt_brake % 16) << 20 - to_send[0].RDHR |= chrysler_checksum(to_send[0], 8) << 24 + values = {"BRAKE_PRESSED_2": 5 if brake else 0, \ + "COUNTER": self.cnt_brake % 16} self.__class__.cnt_brake += 1 - return to_send + return self.packer.make_can_msg_panda("BRAKE_2", 0, values) def _torque_meas_msg(self, torque): - to_send = make_msg(0, 544) - to_send[0].RDHR = ((torque + 1024) >> 8) + (((torque + 1024) & 0xff) << 8) - to_send[0].RDHR |= (self.cnt_torque_meas % 16) << 20 - to_send[0].RDHR |= chrysler_checksum(to_send[0], 8) << 24 + values = {"TORQUE_MOTOR": torque, "COUNTER": self.cnt_torque_meas % 16} self.__class__.cnt_torque_meas += 1 - return to_send + return self.packer.make_can_msg_panda("EPS_STATUS", 0, values) def _torque_msg(self, torque): - to_send = make_msg(0, 0x292) - to_send[0].RDLR = ((torque + 1024) >> 8) + (((torque + 1024) & 0xff) << 8) - return to_send + values = {"LKAS_STEERING_TORQUE": torque} + return self.packer.make_can_msg_panda("LKAS_COMMAND", 0, values) def test_disengage_on_gas(self): self.safety.set_controls_allowed(1) - self._rx(self._speed_msg(2.2)) + self._rx(self._speed_msg(2.1)) self._rx(self._gas_msg(1)) self.assertTrue(self.safety.get_controls_allowed()) self._rx(self._gas_msg(0)) - self._rx(self._speed_msg(2.3)) + self._rx(self._speed_msg(2.2)) self._rx(self._gas_msg(1)) self.assertFalse(self.safety.get_controls_allowed()) def test_cancel_button(self): - CANCEL = 1 - for b in range(0, 0x1ff): - if b == CANCEL: - self.assertTrue(self._tx(self._button_msg(b))) - else: - self.assertFalse(self._tx(self._button_msg(b))) + for cancel in [True, False]: + self.assertEqual(cancel, self._tx(self._button_msg(cancel))) if __name__ == "__main__":