tizi: retry amp comms (#27735)
* tizi: retry amp comms * ensure all config is written together * simple test * check errors * test shutdown * a tici exclusive --------- Co-authored-by: Comma Device <device@comma.ai>pull/27828/head
parent
6381546075
commit
767ed4295f
3 changed files with 110 additions and 24 deletions
@ -0,0 +1,70 @@ |
||||
#!/usr/bin/env python3 |
||||
import time |
||||
import random |
||||
import unittest |
||||
import subprocess |
||||
|
||||
from panda import Panda |
||||
from system.hardware import TICI |
||||
from system.hardware.tici.hardware import Tici |
||||
from system.hardware.tici.amplifier import Amplifier |
||||
|
||||
|
||||
class TestAmplifier(unittest.TestCase): |
||||
|
||||
@classmethod |
||||
def setUpClass(cls): |
||||
if not TICI: |
||||
raise unittest.SkipTest |
||||
|
||||
def setUp(self): |
||||
# clear dmesg |
||||
subprocess.check_call("sudo dmesg -C", shell=True) |
||||
|
||||
self.panda = Panda() |
||||
self.panda.reset() |
||||
|
||||
def tearDown(self): |
||||
self.panda.reset(reconnect=False) |
||||
|
||||
def _check_for_i2c_errors(self, expected): |
||||
dmesg = subprocess.check_output("dmesg", shell=True, encoding='utf8') |
||||
i2c_lines = [l for l in dmesg.strip().splitlines() if 'i2c_geni a88000.i2c' in l] |
||||
i2c_str = '\n'.join(i2c_lines) |
||||
if not expected: |
||||
assert len(i2c_lines) == 0 |
||||
else: |
||||
assert "i2c error :-107" in i2c_str or "Bus arbitration lost" in i2c_str |
||||
|
||||
def test_init(self): |
||||
amp = Amplifier(debug=True) |
||||
r = amp.initialize_configuration(Tici().model) |
||||
assert r |
||||
self._check_for_i2c_errors(False) |
||||
|
||||
def test_shutdown(self): |
||||
amp = Amplifier(debug=True) |
||||
for _ in range(10): |
||||
r = amp.set_global_shutdown(True) |
||||
r = amp.set_global_shutdown(False) |
||||
assert r |
||||
self._check_for_i2c_errors(False) |
||||
|
||||
def test_init_while_siren_play(self): |
||||
for _ in range(5): |
||||
self.panda.set_siren(False) |
||||
time.sleep(0.1) |
||||
|
||||
self.panda.set_siren(True) |
||||
time.sleep(random.randint(0, 5)) |
||||
|
||||
amp = Amplifier(debug=True) |
||||
r = amp.initialize_configuration(Tici().model) |
||||
assert r |
||||
|
||||
# make sure we're a good test |
||||
self._check_for_i2c_errors(True) |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
unittest.main() |
Loading…
Reference in new issue