diff --git a/tests/safety/common.py b/tests/safety/common.py index 63408ce430ed50..572b27176eb1ff 100644 --- a/tests/safety/common.py +++ b/tests/safety/common.py @@ -13,12 +13,12 @@ def make_msg(bus, addr, length=8): return to_send -def test_relay_malfunction(test, addr): - # input is a test class and the address that, if seen on bus 0, triggers +def test_relay_malfunction(test, addr, bus=0): + # input is a test class and the address that, if seen on specified bus, triggers # the relay_malfunction protection logic: both tx_hook and fwd_hook are # expected to return failure test.assertFalse(test.safety.get_relay_malfunction()) - test.safety.safety_rx_hook(make_msg(0, addr, 8)) + test.safety.safety_rx_hook(make_msg(bus, addr, 8)) test.assertTrue(test.safety.get_relay_malfunction()) for a in range(1, 0x800): for b in range(0, 3): diff --git a/tests/safety/libpandasafety_py.py b/tests/safety/libpandasafety_py.py index 74f2ee4671265b..b289e4c5fc2ea8 100644 --- a/tests/safety/libpandasafety_py.py +++ b/tests/safety/libpandasafety_py.py @@ -60,7 +60,6 @@ int get_honda_gas_prev(void); void set_honda_fwd_brake(bool); void set_honda_alt_brake_msg(bool); -void set_honda_hw(int); int get_honda_hw(void); void init_tests_cadillac(void); diff --git a/tests/safety/test.c b/tests/safety/test.c index 2dac7e9deca3fc..48b94dec6cb734 100644 --- a/tests/safety/test.c +++ b/tests/safety/test.c @@ -259,10 +259,6 @@ void set_honda_alt_brake_msg(bool c){ honda_alt_brake_msg = c; } -void set_honda_hw(int c){ - honda_hw = c; -} - int get_honda_hw(void) { return honda_hw; } diff --git a/tests/safety/test_chrysler.py b/tests/safety/test_chrysler.py index b2e87e0ce269b0..ec431e9cafa8ed 100755 --- a/tests/safety/test_chrysler.py +++ b/tests/safety/test_chrysler.py @@ -42,15 +42,16 @@ def chrysler_checksum(msg, len_msg): return ~checksum & 0xFF class TestChryslerSafety(unittest.TestCase): + cnt_torque_meas = 0 + cnt_gas = 0 + cnt_cruise = 0 + cnt_brake = 0 + @classmethod def setUp(cls): cls.safety = libpandasafety_py.libpandasafety cls.safety.set_safety_hooks(Panda.SAFETY_CHRYSLER, 0) cls.safety.init_tests_chrysler() - cls.cnt_torque_meas = 0 - cls.cnt_gas = 0 - cls.cnt_cruise = 0 - cls.cnt_brake = 0 def _button_msg(self, buttons): to_send = make_msg(0, 571) @@ -62,7 +63,7 @@ def _cruise_msg(self, active): 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 - self.cnt_cruise += 1 + self.__class__.cnt_cruise += 1 return to_send def _speed_msg(self, speed): @@ -76,7 +77,7 @@ 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 - self.cnt_gas += 1 + self.__class__.cnt_gas += 1 return to_send def _brake_msg(self, brake): @@ -84,7 +85,7 @@ def _brake_msg(self, brake): 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 - self.cnt_brake += 1 + self.__class__.cnt_brake += 1 return to_send def _set_prev_torque(self, t): @@ -97,7 +98,7 @@ def _torque_meas_msg(self, torque): 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 - self.cnt_torque_meas += 1 + self.__class__.cnt_torque_meas += 1 return to_send def _torque_msg(self, torque): diff --git a/tests/safety/test_honda.py b/tests/safety/test_honda.py index 87f708930402a9..52aaa84dfa1057 100755 --- a/tests/safety/test_honda.py +++ b/tests/safety/test_honda.py @@ -10,7 +10,10 @@ MAX_BRAKE = 255 INTERCEPTOR_THRESHOLD = 328 -TX_MSGS = [[0xE4, 0], [0x194, 0], [0x1FA, 0], [0x200, 0], [0x30C, 0], [0x33D, 0]] +N_TX_MSGS = [[0xE4, 0], [0x194, 0], [0x1FA, 0], [0x200, 0], [0x30C, 0], [0x33D, 0]] +BH_TX_MSGS = [[0xE4, 0], [0x296, 1], [0x33D, 0]] # Bosch Harness +BG_TX_MSGS = [[0xE4, 2], [0x296, 0], [0x33D, 2]] # Bosch Giraffe + HONDA_N_HW = 0 HONDA_BG_HW = 1 @@ -30,39 +33,41 @@ def honda_checksum(msg, addr, len_msg): class TestHondaSafety(unittest.TestCase): + cnt_speed = 0 + cnt_gas = 0 + cnt_button = 0 + @classmethod def setUp(cls): cls.safety = libpandasafety_py.libpandasafety cls.safety.set_safety_hooks(Panda.SAFETY_HONDA_NIDEC, 0) cls.safety.init_tests_honda() - cls.cnt_speed = 0 - cls.cnt_gas = 0 - cls.cnt_button = 0 def _speed_msg(self, speed): - to_send = make_msg(0, 0x158) + bus = 1 if self.safety.get_honda_hw() == HONDA_BH_HW else 0 + to_send = make_msg(bus, 0x158) to_send[0].RDLR = speed to_send[0].RDHR |= (self.cnt_speed % 4) << 28 to_send[0].RDHR |= honda_checksum(to_send[0], 0x158, 8) << 24 - self.cnt_speed += 1 + self.__class__.cnt_speed += 1 return to_send def _button_msg(self, buttons, addr): - honda_hw = self.safety.get_honda_hw() - bus = 1 if honda_hw == HONDA_BH_HW else 0 + bus = 1 if self.safety.get_honda_hw() == HONDA_BH_HW else 0 to_send = make_msg(bus, addr) to_send[0].RDLR = buttons << 5 to_send[0].RDHR |= (self.cnt_button % 4) << 28 to_send[0].RDHR |= honda_checksum(to_send[0], addr, 8) << 24 - self.cnt_button += 1 + self.__class__.cnt_button += 1 return to_send def _brake_msg(self, brake): - to_send = make_msg(0, 0x17C) + bus = 1 if self.safety.get_honda_hw() == HONDA_BH_HW else 0 + to_send = make_msg(bus, 0x17C) to_send[0].RDHR = 0x200000 if brake else 0 to_send[0].RDHR |= (self.cnt_gas % 4) << 28 to_send[0].RDHR |= honda_checksum(to_send[0], 0x17C, 8) << 24 - self.cnt_gas += 1 + self.__class__.cnt_gas += 1 return to_send def _alt_brake_msg(self, brake): @@ -71,11 +76,12 @@ def _alt_brake_msg(self, brake): return to_send def _gas_msg(self, gas): - to_send = make_msg(0, 0x17C) + bus = 1 if self.safety.get_honda_hw() == HONDA_BH_HW else 0 + to_send = make_msg(bus, 0x17C) to_send[0].RDLR = 1 if gas else 0 to_send[0].RDHR |= (self.cnt_gas % 4) << 28 to_send[0].RDHR |= honda_checksum(to_send[0], 0x17C, 8) << 24 - self.cnt_gas += 1 + self.__class__.cnt_gas += 1 return to_send def _send_brake_msg(self, brake): @@ -91,16 +97,25 @@ def _send_interceptor_msg(self, gas, addr): return to_send def _send_steer_msg(self, steer): - to_send = make_msg(0, 0xE4, 6) + bus = 2 if self.safety.get_honda_hw() == HONDA_BG_HW else 0 + to_send = make_msg(bus, 0xE4, 6) to_send[0].RDLR = steer return to_send def test_spam_can_buses(self): - self.safety.set_honda_hw(HONDA_N_HW) - test_spam_can_buses(self, TX_MSGS) + hw_type = self.safety.get_honda_hw() + if hw_type == HONDA_N_HW: + tx_msgs = N_TX_MSGS + elif hw_type == HONDA_BH_HW: + tx_msgs = BH_TX_MSGS + elif hw_type == HONDA_BG_HW: + tx_msgs = BG_TX_MSGS + test_spam_can_buses(self, tx_msgs) def test_relay_malfunction(self): - test_relay_malfunction(self, 0xE4) + hw = self.safety.get_honda_hw() + bus = 2 if hw == HONDA_BG_HW else 0 + test_relay_malfunction(self, 0xE4, bus=bus) def test_default_controls_not_allowed(self): self.assertFalse(self.safety.get_controls_allowed()) @@ -111,19 +126,19 @@ def test_manually_enable_controls_allowed(self): def test_resume_button(self): RESUME_BTN = 4 self.safety.set_controls_allowed(0) - self.safety.safety_rx_hook(self._button_msg(RESUME_BTN, 0x1A6)) + self.safety.safety_rx_hook(self._button_msg(RESUME_BTN, 0x296)) self.assertTrue(self.safety.get_controls_allowed()) def test_set_button(self): SET_BTN = 3 self.safety.set_controls_allowed(0) - self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x1A6)) + self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x296)) self.assertTrue(self.safety.get_controls_allowed()) def test_cancel_button(self): CANCEL_BTN = 2 self.safety.set_controls_allowed(1) - self.safety.safety_rx_hook(self._button_msg(CANCEL_BTN, 0x1A6)) + self.safety.safety_rx_hook(self._button_msg(CANCEL_BTN, 0x296)) self.assertFalse(self.safety.get_controls_allowed()) def test_sample_speed(self): @@ -215,29 +230,32 @@ def test_allow_engage_with_gas_interceptor_pressed(self): self.safety.set_gas_interceptor_detected(False) def test_brake_safety_check(self): - for fwd_brake in [False, True]: - self.safety.set_honda_fwd_brake(fwd_brake) - for brake in np.arange(0, MAX_BRAKE + 10, 1): + hw = self.safety.get_honda_hw() + if hw == HONDA_N_HW: + for fwd_brake in [False, True]: + self.safety.set_honda_fwd_brake(fwd_brake) + for brake in np.arange(0, MAX_BRAKE + 10, 1): + for controls_allowed in [True, False]: + self.safety.set_controls_allowed(controls_allowed) + if fwd_brake: + send = False # block openpilot brake msg when fwd'ing stock msg + elif controls_allowed: + send = MAX_BRAKE >= brake >= 0 + else: + send = brake == 0 + self.assertEqual(send, self.safety.safety_tx_hook(self._send_brake_msg(brake))) + self.safety.set_honda_fwd_brake(False) + + def test_gas_interceptor_safety_check(self): + if self.safety.get_honda_hw() == HONDA_N_HW: + for gas in np.arange(0, 4000, 100): for controls_allowed in [True, False]: self.safety.set_controls_allowed(controls_allowed) - if fwd_brake: - send = False # block openpilot brake msg when fwd'ing stock msg - elif controls_allowed: - send = MAX_BRAKE >= brake >= 0 + if controls_allowed: + send = True else: - send = brake == 0 - self.assertEqual(send, self.safety.safety_tx_hook(self._send_brake_msg(brake))) - self.safety.set_honda_fwd_brake(False) - - def test_gas_interceptor_safety_check(self): - for gas in np.arange(0, 4000, 100): - for controls_allowed in [True, False]: - self.safety.set_controls_allowed(controls_allowed) - if controls_allowed: - send = True - else: - send = gas == 0 - self.assertEqual(send, self.safety.safety_tx_hook(self._send_interceptor_msg(gas, 0x200))) + send = gas == 0 + self.assertEqual(send, self.safety.safety_tx_hook(self._send_interceptor_msg(gas, 0x200))) def test_steer_safety_check(self): self.safety.set_controls_allowed(0) @@ -245,12 +263,12 @@ def test_steer_safety_check(self): self.assertFalse(self.safety.safety_tx_hook(self._send_steer_msg(0x1000))) def test_spam_cancel_safety_check(self): - RESUME_BTN = 4 - SET_BTN = 3 - CANCEL_BTN = 2 - BUTTON_MSG = 0x296 - for hw in [HONDA_BG_HW, HONDA_BH_HW]: - self.safety.set_honda_hw(hw) + hw = self.safety.get_honda_hw() + if hw != HONDA_N_HW: + RESUME_BTN = 4 + SET_BTN = 3 + CANCEL_BTN = 2 + BUTTON_MSG = 0x296 self.safety.set_controls_allowed(0) self.assertTrue(self.safety.safety_tx_hook(self._button_msg(CANCEL_BTN, BUTTON_MSG))) self.assertFalse(self.safety.safety_tx_hook(self._button_msg(RESUME_BTN, BUTTON_MSG))) @@ -260,12 +278,16 @@ def test_spam_cancel_safety_check(self): self.assertTrue(self.safety.safety_tx_hook(self._button_msg(RESUME_BTN, BUTTON_MSG))) def test_rx_hook(self): + # checksum checks SET_BTN = 3 for msg in ["btn1", "btn2", "gas", "speed"]: self.safety.set_controls_allowed(1) if msg == "btn1": - to_push = self._button_msg(SET_BTN, 0x1A6) + if self.safety.get_honda_hw() == HONDA_N_HW: + to_push = self._button_msg(SET_BTN, 0x1A6) # only in Honda_NIDEC + else: + continue if msg == "btn2": to_push = self._button_msg(SET_BTN, 0x296) if msg == "gas": @@ -273,23 +295,23 @@ def test_rx_hook(self): if msg == "speed": to_push = self._speed_msg(0) self.assertTrue(self.safety.safety_rx_hook(to_push)) - to_push[0].RDHR = 0 + to_push[0].RDHR = 0 # invalidate checksum self.assertFalse(self.safety.safety_rx_hook(to_push)) self.assertFalse(self.safety.get_controls_allowed()) # counter # reset wrong_counters to zero by sending valid messages for i in range(MAX_WRONG_COUNTERS + 1): - self.cnt_speed = 0 - self.cnt_gas = 0 - self.cnt_button = 0 + self.__class__.cnt_speed += 1 + self.__class__.cnt_gas += 1 + self.__class__.cnt_button += 1 if i < MAX_WRONG_COUNTERS: self.safety.set_controls_allowed(1) - self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x1A6)) + self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x296)) self.safety.safety_rx_hook(self._speed_msg(0)) self.safety.safety_rx_hook(self._gas_msg(0)) else: - self.assertFalse(self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x1A6))) + self.assertFalse(self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x296))) self.assertFalse(self.safety.safety_rx_hook(self._speed_msg(0))) self.assertFalse(self.safety.safety_rx_hook(self._gas_msg(0))) self.assertFalse(self.safety.get_controls_allowed()) @@ -297,10 +319,10 @@ def test_rx_hook(self): # restore counters for future tests with a couple of good messages for i in range(2): self.safety.set_controls_allowed(1) - self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x1A6)) + self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x296)) self.safety.safety_rx_hook(self._speed_msg(0)) self.safety.safety_rx_hook(self._gas_msg(0)) - self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x1A6)) + self.safety.safety_rx_hook(self._button_msg(SET_BTN, 0x296)) self.assertTrue(self.safety.get_controls_allowed()) @@ -309,8 +331,6 @@ def test_fwd_hook(self): msgs = list(range(0x1, 0x800)) fwd_brake = [False, True] - self.safety.set_honda_hw(HONDA_N_HW) - for f in fwd_brake: self.safety.set_honda_fwd_brake(f) blocked_msgs = [0xE4, 0x194, 0x33D] @@ -332,5 +352,43 @@ def test_fwd_hook(self): self.safety.set_honda_fwd_brake(False) +class TestHondaBoschGiraffeSafety(TestHondaSafety): + @classmethod + def setUp(cls): + TestHondaSafety.setUp() + cls.safety = libpandasafety_py.libpandasafety + cls.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH_GIRAFFE, 0) + cls.safety.init_tests_honda() + + def test_fwd_hook(self): + buss = range(0x0, 0x3) + msgs = range(0x1, 0x800) + hw = self.safety.get_honda_hw() + bus_rdr_cam = 2 if hw == HONDA_BH_HW else 1 + bus_rdr_car = 0 if hw == HONDA_BH_HW else 2 + bus_pt = 1 if hw == HONDA_BH_HW else 0 + + blocked_msgs = [0xE4, 0x33D] + for b in buss: + for m in msgs: + if b == bus_pt: + fwd_bus = -1 + elif b == bus_rdr_cam: + fwd_bus = -1 if m in blocked_msgs else bus_rdr_car + elif b == bus_rdr_car: + fwd_bus = bus_rdr_cam + + # assume len 8 + self.assertEqual(fwd_bus, self.safety.safety_fwd_hook(b, make_msg(b, m, 8))) + + +class TestHondaBoschHarnessSafety(TestHondaBoschGiraffeSafety): + @classmethod + def setUp(cls): + TestHondaBoschGiraffeSafety.setUp() + cls.safety = libpandasafety_py.libpandasafety + cls.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH_HARNESS, 0) + cls.safety.init_tests_honda() + if __name__ == "__main__": unittest.main() diff --git a/tests/safety/test_honda_bosch.py b/tests/safety/test_honda_bosch.py deleted file mode 100755 index 99c8d35464d956..00000000000000 --- a/tests/safety/test_honda_bosch.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python3 -import unittest -from panda import Panda -from panda.tests.safety import libpandasafety_py -from panda.tests.safety.common import make_msg, test_spam_can_buses -from panda.tests.safety.test_honda import HONDA_BG_HW, HONDA_BH_HW - -MAX_BRAKE = 255 - -H_TX_MSGS = [[0xE4, 0], [0x296, 1], [0x33D, 0]] # Bosch Harness -G_TX_MSGS = [[0xE4, 2], [0x296, 0], [0x33D, 2]] # Bosch Giraffe - - -class TestHondaSafety(unittest.TestCase): - @classmethod - def setUp(cls): - cls.safety = libpandasafety_py.libpandasafety - cls.safety.set_safety_hooks(Panda.SAFETY_HONDA_BOSCH_GIRAFFE, 0) - cls.safety.init_tests_honda() - - def test_spam_can_buses(self): - for hw in [HONDA_BG_HW, HONDA_BH_HW]: - self.safety.set_honda_hw(hw) - test_spam_can_buses(self, H_TX_MSGS if hw == HONDA_BH_HW else G_TX_MSGS) - - def test_fwd_hook(self): - buss = range(0x0, 0x3) - msgs = range(0x1, 0x800) - for hw in [HONDA_BG_HW, HONDA_BH_HW]: - self.safety.set_honda_hw(hw) - bus_rdr_cam = 2 if hw == HONDA_BH_HW else 1 - bus_rdr_car = 0 if hw == HONDA_BH_HW else 2 - bus_pt = 1 if hw == HONDA_BH_HW else 0 - - blocked_msgs = [0xE4, 0x33D] - for b in buss: - for m in msgs: - if b == bus_pt: - fwd_bus = -1 - elif b == bus_rdr_cam: - fwd_bus = -1 if m in blocked_msgs else bus_rdr_car - elif b == bus_rdr_car: - fwd_bus = bus_rdr_cam - - # assume len 8 - self.assertEqual(fwd_bus, self.safety.safety_fwd_hook(b, make_msg(b, m, 8))) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/safety/test_subaru.py b/tests/safety/test_subaru.py index ce2eca6ee9ad44..4fbe3376b8ce41 100644 --- a/tests/safety/test_subaru.py +++ b/tests/safety/test_subaru.py @@ -41,14 +41,15 @@ def subaru_checksum(msg, addr, len_msg): class TestSubaruSafety(unittest.TestCase): + cnt_gas = 0 + cnt_torque_driver = 0 + cnt_cruise = 0 + @classmethod def setUp(cls): cls.safety = libpandasafety_py.libpandasafety cls.safety.set_safety_hooks(Panda.SAFETY_SUBARU, 0) cls.safety.init_tests_subaru() - cls.cnt_gas = 0 - cls.cnt_torque_driver = 0 - cls.cnt_cruise = 0 def _set_prev_torque(self, t): self.safety.set_subaru_desired_torque_last(t) @@ -61,7 +62,7 @@ def _torque_driver_msg(self, torque): to_send[0].RDLR = ((t & 0x7FF) << 16) to_send[0].RDLR |= (self.cnt_torque_driver & 0xF) << 8 to_send[0].RDLR |= subaru_checksum(to_send, 0x119, 8) - self.cnt_torque_driver += 1 + self.__class__.cnt_torque_driver += 1 else: to_send = make_msg(0, 0x371) to_send[0].RDLR = (t & 0x7) << 29 @@ -84,7 +85,7 @@ def _gas_msg(self, gas): to_send[0].RDHR = gas & 0xFF to_send[0].RDLR |= (self.cnt_gas & 0xF) << 8 to_send[0].RDLR |= subaru_checksum(to_send, 0x40, 8) - self.cnt_gas += 1 + self.__class__.cnt_gas += 1 else: to_send = make_msg(0, 0x140) to_send[0].RDLR = gas & 0xFF @@ -96,7 +97,7 @@ def _cruise_msg(self, cruise): to_send[0].RDHR = cruise << 9 to_send[0].RDLR |= (self.cnt_cruise & 0xF) << 8 to_send[0].RDLR |= subaru_checksum(to_send, 0x240, 8) - self.cnt_cruise += 1 + self.__class__.cnt_cruise += 1 else: to_send = make_msg(0, 0x144) to_send[0].RDHR = cruise << 17 diff --git a/tests/safety/test_volkswagen_mqb.py b/tests/safety/test_volkswagen_mqb.py index 8874c59cdc3ebd..1e4fc7ce5a25a5 100644 --- a/tests/safety/test_volkswagen_mqb.py +++ b/tests/safety/test_volkswagen_mqb.py @@ -61,17 +61,18 @@ def volkswagen_mqb_crc(msg, addr, len_msg): return volkswagen_crc_8h2f(msg_bytes[1:len_msg] + magic_pad.to_bytes(1, 'little')) class TestVolkswagenMqbSafety(unittest.TestCase): + cnt_eps_01 = 0 + cnt_esp_05 = 0 + cnt_motor_20 = 0 + cnt_acc_06 = 0 + cnt_hca_01 = 0 + cnt_gra_acc_01 = 0 + @classmethod def setUp(cls): cls.safety = libpandasafety_py.libpandasafety cls.safety.set_safety_hooks(Panda.SAFETY_VOLKSWAGEN_MQB, 0) cls.safety.init_tests_volkswagen() - cls.cnt_eps_01 = 0 - cls.cnt_esp_05 = 0 - cls.cnt_motor_20 = 0 - cls.cnt_acc_06 = 0 - cls.cnt_hca_01 = 0 - cls.cnt_gra_acc_01 = 0 def _set_prev_torque(self, t): self.safety.set_volkswagen_desired_torque_last(t) @@ -91,7 +92,7 @@ def _esp_05_msg(self, brake): to_send[0].RDLR = (0x1 << 26) if brake else 0 to_send[0].RDLR |= (self.cnt_esp_05 % 16) << 8 to_send[0].RDLR |= volkswagen_mqb_crc(to_send[0], MSG_ESP_05, 8) - self.cnt_esp_05 += 1 + self.__class__.cnt_esp_05 += 1 return to_send # Driver steering input torque @@ -103,7 +104,7 @@ def _eps_01_msg(self, torque): to_send[0].RDHR |= 0x1 << 23 to_send[0].RDLR |= (self.cnt_eps_01 % 16) << 8 to_send[0].RDLR |= volkswagen_mqb_crc(to_send[0], MSG_EPS_01, 8) - self.cnt_eps_01 += 1 + self.__class__.cnt_eps_01 += 1 return to_send # openpilot steering output torque @@ -115,7 +116,7 @@ def _hca_01_msg(self, torque): to_send[0].RDLR |= 0x1 << 31 to_send[0].RDLR |= (self.cnt_hca_01 % 16) << 8 to_send[0].RDLR |= volkswagen_mqb_crc(to_send[0], MSG_HCA_01, 8) - self.cnt_hca_01 += 1 + self.__class__.cnt_hca_01 += 1 return to_send # ACC engagement status @@ -124,7 +125,7 @@ def _acc_06_msg(self, status): to_send[0].RDHR = (status & 0x7) << 28 to_send[0].RDLR |= (self.cnt_acc_06 % 16) << 8 to_send[0].RDLR |= volkswagen_mqb_crc(to_send[0], MSG_ACC_06, 8) - self.cnt_acc_06 += 1 + self.__class__.cnt_acc_06 += 1 return to_send # Driver throttle input @@ -133,7 +134,7 @@ def _motor_20_msg(self, gas): to_send[0].RDLR = (gas & 0xFF) << 12 to_send[0].RDLR |= (self.cnt_motor_20 % 16) << 8 to_send[0].RDLR |= volkswagen_mqb_crc(to_send[0], MSG_MOTOR_20, 8) - self.cnt_motor_20 += 1 + self.__class__.cnt_motor_20 += 1 return to_send # Cruise control buttons @@ -142,7 +143,7 @@ def _gra_acc_01_msg(self, bit): to_send[0].RDLR = 1 << bit to_send[0].RDLR |= (self.cnt_gra_acc_01 % 16) << 8 to_send[0].RDLR |= volkswagen_mqb_crc(to_send[0], MSG_GRA_ACC_01, 8) - self.cnt_gra_acc_01 += 1 + self.__class__.cnt_gra_acc_01 += 1 return to_send def test_spam_can_buses(self): @@ -368,10 +369,10 @@ def test_rx_hook(self): # counter # reset wrong_counters to zero by sending valid messages for i in range(MAX_WRONG_COUNTERS + 1): - self.cnt_eps_01 = 0 - self.cnt_esp_05 = 0 - self.cnt_motor_20 = 0 - self.cnt_acc_06 = 0 + self.__class__.cnt_eps_01 += 1 + self.__class__.cnt_esp_05 += 1 + self.__class__.cnt_motor_20 += 1 + self.__class__.cnt_acc_06 += 1 if i < MAX_WRONG_COUNTERS: self.safety.set_controls_allowed(1) self.safety.safety_rx_hook(self._eps_01_msg(0))