mirror of
https://github.com/infiniteCable2/opendbc.git
synced 2026-06-08 10:54:51 +08:00
Add VW MEB can ignition (#3387)
* move can ignition to opendbc * more tests * init counters for deterministic test * Revert "init counters for deterministic test" This reverts commit d2abb4a9a6c3fde3bc4f4c4a396f62f4fab42de1. * rm * use getter/setter * clean tests * fix test * add loop * split into brand tests * add vw meb can ignition * smol * bump
This commit is contained in:
@@ -53,6 +53,19 @@ void ignition_can_hook(const CANPacket_t *msg) {
|
||||
ignition_can = (msg->data[0] >> 5) == 0x6U;
|
||||
ignition_can_cnt = 0U;
|
||||
}
|
||||
|
||||
// Volkswagen MEB exception
|
||||
if ((msg->addr == 0x3C0U) && (len == 4)) {
|
||||
int counter = msg->data[1] & 0xFU;
|
||||
|
||||
static int prev_counter_vw_meb = -1;
|
||||
if ((counter == ((prev_counter_vw_meb + 1) % 16)) && (prev_counter_vw_meb != -1)) {
|
||||
// Klemmen_Status_01->ZAS_Kl_15
|
||||
ignition_can = ((msg->data[2] >> 1) & 1U) != 0U;
|
||||
ignition_can_cnt = 0U;
|
||||
}
|
||||
prev_counter_vw_meb = counter;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: this is too loose, Teslas have 0x222
|
||||
|
||||
40
opendbc/safety/tests/test_volkswagen_meb.py
Normal file
40
opendbc/safety/tests/test_volkswagen_meb.py
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python3
|
||||
import unittest
|
||||
|
||||
from opendbc.safety.tests.libsafety import libsafety_py
|
||||
from opendbc.safety.tests.common import CANPackerSafety
|
||||
|
||||
|
||||
class TestVolkswagenMebIgnition(unittest.TestCase):
|
||||
TX_MSGS: list = []
|
||||
|
||||
def setUp(self):
|
||||
self.safety = libsafety_py.libsafety
|
||||
self.safety.init_tests()
|
||||
self.packer = CANPackerSafety("vw_meb")
|
||||
|
||||
def _msg(self, counter, ign):
|
||||
return self.packer.make_can_msg_safety("Klemmen_Status_01", 0,
|
||||
{"Klemmen_Status_01_BZ": counter,
|
||||
"ZAS_Kl_15": ign})
|
||||
|
||||
# ZAS_Kl_15=1
|
||||
def test_ignition_on(self):
|
||||
for i in range(16):
|
||||
self.safety.init_tests()
|
||||
self.safety.ignition_can_hook(self._msg(i, 1))
|
||||
self.assertFalse(self.safety.get_ignition_can())
|
||||
self.safety.ignition_can_hook(self._msg((i + 1) % 16, 1))
|
||||
self.assertTrue(self.safety.get_ignition_can())
|
||||
|
||||
def test_ignition_off(self):
|
||||
self.safety.ignition_can_hook(self._msg(0, 1))
|
||||
self.safety.ignition_can_hook(self._msg(1, 1))
|
||||
self.assertTrue(self.safety.get_ignition_can())
|
||||
self.safety.ignition_can_hook(self._msg(2, 0))
|
||||
self.safety.ignition_can_hook(self._msg(3, 0))
|
||||
self.assertFalse(self.safety.get_ignition_can())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user