|
|
|
@ -10,6 +10,7 @@ from openpilot.system.hardware import HARDWARE |
|
|
|
|
from openpilot.selfdrive.test.helpers import phone_only, with_processes |
|
|
|
|
from openpilot.selfdrive.pandad.tests.test_pandad_loopback import setup_pandad, send_random_can_messages |
|
|
|
|
|
|
|
|
|
JUNGLE_SPAM = "JUNGLE_SPAM" in os.environ |
|
|
|
|
|
|
|
|
|
@pytest.mark.tici |
|
|
|
|
class TestBoarddSpi: |
|
|
|
@ -18,9 +19,9 @@ class TestBoarddSpi: |
|
|
|
|
if HARDWARE.get_device_type() == 'tici': |
|
|
|
|
pytest.skip("only for spi pandas") |
|
|
|
|
os.environ['STARTED'] = '1' |
|
|
|
|
os.environ['BOARDD_LOOPBACK'] = '1' |
|
|
|
|
#os.environ['SPI_ERR_PROB'] = '-1' |
|
|
|
|
os.environ['SPI_ERR_PROB'] = '0.001' |
|
|
|
|
if not JUNGLE_SPAM: |
|
|
|
|
os.environ['BOARDD_LOOPBACK'] = '1' |
|
|
|
|
|
|
|
|
|
@phone_only |
|
|
|
|
@with_processes(['pandad']) |
|
|
|
@ -39,8 +40,9 @@ class TestBoarddSpi: |
|
|
|
|
|
|
|
|
|
st = time.monotonic() |
|
|
|
|
ts = {s: list() for s in socks.keys()} |
|
|
|
|
for _ in range(20): |
|
|
|
|
for _ in range(int(os.getenv("TEST_TIME", "20"))): |
|
|
|
|
# send some CAN messages |
|
|
|
|
if not JUNGLE_SPAM: |
|
|
|
|
sent = send_random_can_messages(sendcan, random.randrange(2, 20)) |
|
|
|
|
for k, v in sent.items(): |
|
|
|
|
sent_msgs[k].extend(list(v)) |
|
|
|
@ -54,6 +56,15 @@ class TestBoarddSpi: |
|
|
|
|
assert m.valid or (service == "can") |
|
|
|
|
if service == "can": |
|
|
|
|
for msg in m.can: |
|
|
|
|
if JUNGLE_SPAM: |
|
|
|
|
# PandaJungle.set_generated_can(True) |
|
|
|
|
i = msg.address - 0x200 |
|
|
|
|
assert msg.address >= 0x200 |
|
|
|
|
assert msg.src == (i%3) |
|
|
|
|
assert msg.dat == b"\xff"*(i%8) |
|
|
|
|
total_recv_count += 1 |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
if msg.src > 4: |
|
|
|
|
continue |
|
|
|
|
key = (msg.address, msg.dat) |
|
|
|
@ -91,5 +102,5 @@ class TestBoarddSpi: |
|
|
|
|
assert len(dts) >= ((et-0.5)*SERVICE_LIST[service].frequency*0.8) |
|
|
|
|
|
|
|
|
|
with subtests.test(msg="CAN traffic"): |
|
|
|
|
print(f"Sent {total_sent_count} CAN messages, got {total_recv_count} back. {total_recv_count/total_sent_count:.2%} received") |
|
|
|
|
print(f"Sent {total_sent_count} CAN messages, got {total_recv_count} back. {total_recv_count/(total_sent_count+1e-4):.2%} received") |
|
|
|
|
assert total_recv_count > 20 |
|
|
|
|